forked from OSchip/llvm-project
[DebugInfo] Add -fno-ctor-homing for as counterpart to -fuse-ctor-homing
Add an opt out flag for constructor homing. Differential Revision: https://reviews.llvm.org/D106582
This commit is contained in:
parent
83225936af
commit
3e2ad26b08
|
@ -2563,7 +2563,8 @@ below. If multiple flags are present, the last one is used.
|
|||
non-trivial, non-aggregate C++ class in the modules that contain a
|
||||
definition of one of its constructors. This relies on the additional
|
||||
assumption that all classes that are not trivially constructible have a
|
||||
non-trivial constructor that is used somewhere.
|
||||
non-trivial constructor that is used somewhere. The negation,
|
||||
-fno-use-ctor-homing, ensures that constructor homing is not used.
|
||||
|
||||
This flag is not enabled by default, and needs to be used with -cc1 or
|
||||
-Xclang.
|
||||
|
|
|
@ -4836,6 +4836,8 @@ def mrelocation_model : Separate<["-"], "mrelocation-model">,
|
|||
def fno_math_builtin : Flag<["-"], "fno-math-builtin">,
|
||||
HelpText<"Disable implicit builtin knowledge of math functions">,
|
||||
MarshallingInfoFlag<LangOpts<"NoMathBuiltin">>;
|
||||
def fno_use_ctor_homing: Flag<["-"], "fno-use-ctor-homing">,
|
||||
HelpText<"Don't use constructor homing for debug info">;
|
||||
def fuse_ctor_homing: Flag<["-"], "fuse-ctor-homing">,
|
||||
HelpText<"Use constructor homing if we are using limited debug info already">;
|
||||
}
|
||||
|
|
|
@ -1369,9 +1369,6 @@ void CompilerInvocation::GenerateCodeGenArgs(
|
|||
if (DebugInfoVal)
|
||||
GenerateArg(Args, OPT_debug_info_kind_EQ, *DebugInfoVal, SA);
|
||||
|
||||
if (Opts.DebugInfo == codegenoptions::DebugInfoConstructor)
|
||||
GenerateArg(Args, OPT_fuse_ctor_homing, SA);
|
||||
|
||||
for (const auto &Prefix : Opts.DebugPrefixMap)
|
||||
GenerateArg(Args, OPT_fdebug_prefix_map_EQ,
|
||||
Prefix.first + "=" + Prefix.second, SA);
|
||||
|
@ -1627,10 +1624,16 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,
|
|||
}
|
||||
|
||||
// If -fuse-ctor-homing is set and limited debug info is already on, then use
|
||||
// constructor homing.
|
||||
if (Args.getLastArg(OPT_fuse_ctor_homing))
|
||||
if (Opts.getDebugInfo() == codegenoptions::LimitedDebugInfo)
|
||||
// constructor homing, and vice versa for -fno-use-ctor-homing.
|
||||
if (const Arg *A =
|
||||
Args.getLastArg(OPT_fuse_ctor_homing, OPT_fno_use_ctor_homing)) {
|
||||
if (A->getOption().matches(OPT_fuse_ctor_homing) &&
|
||||
Opts.getDebugInfo() == codegenoptions::LimitedDebugInfo)
|
||||
Opts.setDebugInfo(codegenoptions::DebugInfoConstructor);
|
||||
if (A->getOption().matches(OPT_fno_use_ctor_homing) &&
|
||||
Opts.getDebugInfo() == codegenoptions::DebugInfoConstructor)
|
||||
Opts.setDebugInfo(codegenoptions::LimitedDebugInfo);
|
||||
}
|
||||
|
||||
for (const auto &Arg : Args.getAllArgValues(OPT_fdebug_prefix_map_EQ)) {
|
||||
auto Split = StringRef(Arg).split('=');
|
||||
|
|
|
@ -8,6 +8,9 @@
|
|||
// RUN: | FileCheck %s -check-prefix=NO_DEBUG
|
||||
// RUN: %clang -cc1 -fuse-ctor-homing -emit-llvm %s -o - \
|
||||
// RUN: | FileCheck %s -check-prefix=NO_DEBUG
|
||||
//
|
||||
// RUN: %clang -cc1 -debug-info-kind=constructor -fno-use-ctor-homing \
|
||||
// RUN: -emit-llvm %s -o - | FileCheck %s -check-prefix=FULL_DEBUG
|
||||
|
||||
// This tests that the -fuse-ctor-homing is only used if limited debug info would have
|
||||
// been used otherwise.
|
||||
|
|
Loading…
Reference in New Issue