diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3691,6 +3691,8 @@ AutoNormalizeEnum; def fno_math_builtin : Flag<["-"], "fno-math-builtin">, HelpText<"Disable implicit builtin knowledge of math functions">; +def fuse_ctor_homing: Flag<["-"], "fuse-ctor-homing">, + HelpText<"Use constructor homing if we are using limited debug info already">; } def disable_llvm_verifier : Flag<["-"], "disable-llvm-verifier">, diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -775,6 +775,12 @@ else Opts.setDebugInfo(static_cast(Val)); } + // If -fuse-ctor-homing is set and limited debug info is already on, then use + // constructor homing. + if (Arg *A = Args.getLastArg(OPT_fuse_ctor_homing)) + if (Opts.getDebugInfo() == codegenoptions::LimitedDebugInfo) + Opts.setDebugInfo(codegenoptions::DebugInfoConstructor); + if (Arg *A = Args.getLastArg(OPT_debugger_tuning_EQ)) { unsigned Val = llvm::StringSwitch(A->getValue()) .Case("gdb", unsigned(llvm::DebuggerKind::GDB))