[clang] 4821508 - Revert "DebugInfo: Fully integrate ctor type homing into 'limited' debug info"

David Blaikie via cfe-commits cfe-commits at lists.llvm.org
Wed Jul 27 17:11:06 PDT 2022


Excuse the delay - yeah, pulled out the fix in
4e719e0f16933a8945a4e85db39fdad5afbede36

On Fri, Jul 1, 2022 at 7:21 AM Robinson, Paul <paul.robinson at sony.com> wrote:
>
> Hi Dave,
>
> The original commit message included
>     Also fix a bug I found along the way that was causing ctor type homing
>     to kick in even when something could be vtable homed
>
> Is it reasonable to fix that without removing ctor homing in general?
> Or would that cause too much test churn, as you're planning to recommit
> this patch anyway?
> --paulr
>
> > -----Original Message-----
> > From: cfe-commits <cfe-commits-bounces at lists.llvm.org> On Behalf Of David
> > Blaikie via cfe-commits
> > Sent: Friday, June 24, 2022 1:08 PM
> > To: cfe-commits at lists.llvm.org
> > Subject: [clang] 4821508 - Revert "DebugInfo: Fully integrate ctor type
> > homing into 'limited' debug info"
> >
> >
> > Author: David Blaikie
> > Date: 2022-06-24T17:07:47Z
> > New Revision: 4821508d4db75a535d02b8938f81fac6de66cc26
> >
> > URL: https://urldefense.com/v3/__https://github.com/llvm/llvm-
> > project/commit/4821508d4db75a535d02b8938f81fac6de66cc26__;!!JmoZiZGBv3RvKR
> > Sx!7pmjZG0ponrxAVY0dOSOTgWfvxMgERh3TNpn2zRGr7NTuooxwQKHzTroRX39LtKaKCXGoQD
> > n3Ri4BOhJymrwDVc8Rzk$
> > DIFF: https://urldefense.com/v3/__https://github.com/llvm/llvm-
> > project/commit/4821508d4db75a535d02b8938f81fac6de66cc26.diff__;!!JmoZiZGBv
> > 3RvKRSx!7pmjZG0ponrxAVY0dOSOTgWfvxMgERh3TNpn2zRGr7NTuooxwQKHzTroRX39LtKaKC
> > XGoQDn3Ri4BOhJymrwKAIx5Rg$
> >
> > LOG: Revert "DebugInfo: Fully integrate ctor type homing into 'limited'
> > debug info"
> >
> > Reverting to simplify some Google-internal rollout issues. Will recommit
> > in a week or two.
> >
> > This reverts commit 517bbc64dbe493644eff8d55fd9566435e930520.
> >
> > Added:
> >     clang/test/CodeGenCXX/debug-info-ctor-homing-flag.cpp
> >
> > Modified:
> >     clang/docs/UsersManual.rst
> >     clang/include/clang/Basic/CodeGenOptions.h
> >     clang/include/clang/Basic/DebugInfoOptions.h
> >     clang/include/clang/Driver/Options.td
> >     clang/lib/CodeGen/CGDebugInfo.cpp
> >     clang/lib/Driver/ToolChains/Clang.cpp
> >     clang/lib/Frontend/CompilerInvocation.cpp
> >     clang/test/CodeGen/attr-cpuspecific-renaming.cpp
> >     clang/test/CodeGen/pr52782-stdcall-func-decl.cpp
> >     clang/test/CodeGenCXX/debug-info-class.cpp
> >     clang/test/CodeGenCXX/debug-info-limited-ctor.cpp
> >     clang/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp
> >     clang/test/CodeGenCXX/debug-lambda-this.cpp
> >     clang/test/CodeGenCXX/ibm128-declarations.cpp
> >     clang/test/CodeGenCXX/standalone-debug-attribute.cpp
> >     clang/test/Driver/cl-options.c
> >     clang/test/Driver/clang-g-opts.c
> >     clang/test/Driver/cuda-dwarf-2.cu
> >     clang/test/Driver/debug-options-as.c
> >     clang/test/Driver/debug-options.c
> >     clang/test/Driver/integrated-as.s
> >     clang/test/Driver/myriad-toolchain.c
> >     clang/test/Driver/openmp-offload-gpu.c
> >     clang/test/Driver/split-debug.c
> >     clang/test/OpenMP/debug_private.c
> >     clang/test/OpenMP/debug_task_shared.c
> >     clang/test/OpenMP/debug_threadprivate_copyin.c
> >
> > Removed:
> >
> >
> >
> > ##########################################################################
> > ######
> > diff  --git a/clang/docs/UsersManual.rst b/clang/docs/UsersManual.rst
> > index ccb5fed1cb370..e12dc72407b13 100644
> > --- a/clang/docs/UsersManual.rst
> > +++ b/clang/docs/UsersManual.rst
> > @@ -2672,6 +2672,19 @@ below. If multiple flags are present, the last one
> > is used.
> >     **-fno-standalone-debug** option can be used to get to turn on the
> >     vtable-based optimization described above.
> >
> > +.. option:: -fuse-ctor-homing
> > +
> > +   This optimization is similar to the optimizations that are enabled as
> > part
> > +   of -fno-standalone-debug. Here, Clang only emits type info for a
> > +   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. 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.
> > +
> >  .. option:: -g
> >
> >    Generate complete debug info.
> >
> > diff  --git a/clang/include/clang/Basic/CodeGenOptions.h
> > b/clang/include/clang/Basic/CodeGenOptions.h
> > index 5f5218c87a605..23d76c308d847 100644
> > --- a/clang/include/clang/Basic/CodeGenOptions.h
> > +++ b/clang/include/clang/Basic/CodeGenOptions.h
> > @@ -468,7 +468,7 @@ class CodeGenOptions : public CodeGenOptionsBase {
> >
> >    /// Check if type and variable info should be emitted.
> >    bool hasReducedDebugInfo() const {
> > -    return getDebugInfo() >= codegenoptions::LimitedDebugInfo;
> > +    return getDebugInfo() >= codegenoptions::DebugInfoConstructor;
> >    }
> >
> >    /// Check if maybe unused type info should be emitted.
> >
> > diff  --git a/clang/include/clang/Basic/DebugInfoOptions.h
> > b/clang/include/clang/Basic/DebugInfoOptions.h
> > index 98210cc3cfa13..a99a2b5903d7e 100644
> > --- a/clang/include/clang/Basic/DebugInfoOptions.h
> > +++ b/clang/include/clang/Basic/DebugInfoOptions.h
> > @@ -34,6 +34,12 @@ enum DebugInfoKind {
> >    /// (-gline-tables-only).
> >    DebugLineTablesOnly,
> >
> > +  /// Limit generated debug info for classes to reduce size. This emits
> > class
> > +  /// type info only where the constructor is emitted, if it is a class
> > that
> > +  /// has a constructor.
> > +  /// FIXME: Consider combining this with LimitedDebugInfo.
> > +  DebugInfoConstructor,
> > +
> >    /// Limit generated debug info to reduce size (-fno-standalone-debug).
> > This
> >    /// emits forward decls for types that could be replaced with forward
> > decls in
> >    /// the source code. For dynamic C++ classes type info is only emitted
> > into
> >
> > diff  --git a/clang/include/clang/Driver/Options.td
> > b/clang/include/clang/Driver/Options.td
> > index e998612d32e2e..81d1d53cea9b1 100644
> > --- a/clang/include/clang/Driver/Options.td
> > +++ b/clang/include/clang/Driver/Options.td
> > @@ -5246,6 +5246,11 @@ 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">;
> > +
> >  } // let Flags = [CC1Option, CC1AsOption, NoDriverOption]
> >
> >  let Flags = [CC1Option, NoDriverOption] in {
> >
> > diff  --git a/clang/lib/CodeGen/CGDebugInfo.cpp
> > b/clang/lib/CodeGen/CGDebugInfo.cpp
> > index c9d07cef89dcb..7e9e86763af99 100644
> > --- a/clang/lib/CodeGen/CGDebugInfo.cpp
> > +++ b/clang/lib/CodeGen/CGDebugInfo.cpp
> > @@ -27,7 +27,6 @@
> >  #include "clang/AST/RecordLayout.h"
> >  #include "clang/AST/RecursiveASTVisitor.h"
> >  #include "clang/Basic/CodeGenOptions.h"
> > -#include "clang/Basic/DebugInfoOptions.h"
> >  #include "clang/Basic/FileManager.h"
> >  #include "clang/Basic/SourceManager.h"
> >  #include "clang/Basic/Version.h"
> > @@ -587,6 +586,7 @@ void CGDebugInfo::CreateCompileUnit() {
> >    case codegenoptions::DebugDirectivesOnly:
> >      EmissionKind = llvm::DICompileUnit::DebugDirectivesOnly;
> >      break;
> > +  case codegenoptions::DebugInfoConstructor:
> >    case codegenoptions::LimitedDebugInfo:
> >    case codegenoptions::FullDebugInfo:
> >    case codegenoptions::UnusedTypeInfo:
> > @@ -1861,7 +1861,7 @@ llvm::DISubprogram
> > *CGDebugInfo::CreateCXXMemberFunction(
> >
> >    // In this debug mode, emit type info for a class when its constructor
> > type
> >    // info is emitted.
> > -  if (DebugKind == codegenoptions::LimitedDebugInfo)
> > +  if (DebugKind == codegenoptions::DebugInfoConstructor)
> >      if (const CXXConstructorDecl *CD =
> > dyn_cast<CXXConstructorDecl>(Method))
> >        completeUnusedClass(*CD->getParent());
> >
> > @@ -2528,7 +2528,7 @@ static bool
> > shouldOmitDefinition(codegenoptions::DebugInfoKind DebugKind,
> >
> >    // In constructor homing mode, only emit complete debug info for a
> > class
> >    // when its constructor is emitted.
> > -  if ((DebugKind == codegenoptions::LimitedDebugInfo) &&
> > +  if ((DebugKind == codegenoptions::DebugInfoConstructor) &&
> >        canUseCtorHoming(CXXDecl))
> >      return true;
> >
> > @@ -3349,7 +3349,7 @@ void CGDebugInfo::completeTemplateDefinition(
> >  }
> >
> >  void CGDebugInfo::completeUnusedClass(const CXXRecordDecl &D) {
> > -  if (DebugKind <= codegenoptions::DebugLineTablesOnly ||
> > D.isDynamicClass())
> > +  if (DebugKind <= codegenoptions::DebugLineTablesOnly)
> >      return;
> >
> >    completeClassData(&D);
> >
> > diff  --git a/clang/lib/Driver/ToolChains/Clang.cpp
> > b/clang/lib/Driver/ToolChains/Clang.cpp
> > index bcb34d0ffd561..5142b72a160fb 100644
> > --- a/clang/lib/Driver/ToolChains/Clang.cpp
> > +++ b/clang/lib/Driver/ToolChains/Clang.cpp
> > @@ -26,7 +26,6 @@
> >  #include "clang/Basic/CLWarnings.h"
> >  #include "clang/Basic/CharInfo.h"
> >  #include "clang/Basic/CodeGenOptions.h"
> > -#include "clang/Basic/DebugInfoOptions.h"
> >  #include "clang/Basic/LangOptions.h"
> >  #include "clang/Basic/ObjCRuntime.h"
> >  #include "clang/Basic/Version.h"
> > @@ -526,7 +525,7 @@ static codegenoptions::DebugInfoKind
> > DebugLevelToInfoKind(const Arg &A) {
> >      return codegenoptions::DebugLineTablesOnly;
> >    if (A.getOption().matches(options::OPT_gline_directives_only))
> >      return codegenoptions::DebugDirectivesOnly;
> > -  return codegenoptions::LimitedDebugInfo;
> > +  return codegenoptions::DebugInfoConstructor;
> >  }
> >
> >  static bool mustUseNonLeafFramePointerForTarget(const llvm::Triple
> > &Triple) {
> > @@ -1087,6 +1086,9 @@ static void RenderDebugEnablingArgs(const ArgList
> > &Args, ArgStringList &CmdArgs,
> >    case codegenoptions::DebugLineTablesOnly:
> >      CmdArgs.push_back("-debug-info-kind=line-tables-only");
> >      break;
> > +  case codegenoptions::DebugInfoConstructor:
> > +    CmdArgs.push_back("-debug-info-kind=constructor");
> > +    break;
> >    case codegenoptions::LimitedDebugInfo:
> >      CmdArgs.push_back("-debug-info-kind=limited");
> >      break;
> > @@ -2668,7 +2670,7 @@ static void
> > CollectArgsForIntegratedAssembler(Compilation &C,
> >            CmdArgs.push_back(Value.data());
> >          } else {
> >            RenderDebugEnablingArgs(Args, CmdArgs,
> > -                                  codegenoptions::LimitedDebugInfo,
> > +                                  codegenoptions::DebugInfoConstructor,
> >                                    DwarfVersion,
> > llvm::DebuggerKind::Default);
> >          }
> >        } else if (Value.startswith("-mcpu") || Value.startswith("-mfpu")
> > ||
> > @@ -4094,7 +4096,7 @@ static void renderDebugOptions(const ToolChain &TC,
> > const Driver &D,
> >      }
> >    }
> >    if (const Arg *A = Args.getLastArg(options::OPT_g_Group)) {
> > -    DebugInfoKind = codegenoptions::LimitedDebugInfo;
> > +    DebugInfoKind = codegenoptions::DebugInfoConstructor;
> >
> >      // If the last option explicitly specified a debug-info level, use
> > it.
> >      if (checkDebugInfoOption(A, Args, D, TC) &&
> > @@ -4216,7 +4218,7 @@ static void renderDebugOptions(const ToolChain &TC,
> > const Driver &D,
> >      if (checkDebugInfoOption(A, Args, D, TC)) {
> >        if (DebugInfoKind != codegenoptions::DebugLineTablesOnly &&
> >            DebugInfoKind != codegenoptions::DebugDirectivesOnly) {
> > -        DebugInfoKind = codegenoptions::LimitedDebugInfo;
> > +        DebugInfoKind = codegenoptions::DebugInfoConstructor;
> >          CmdArgs.push_back("-dwarf-ext-refs");
> >          CmdArgs.push_back("-fmodule-format=obj");
> >        }
> > @@ -4237,7 +4239,8 @@ static void renderDebugOptions(const ToolChain &TC,
> > const Driver &D,
> >    if (const Arg *A = Args.getLastArg(options::OPT_fstandalone_debug))
> >      (void)checkDebugInfoOption(A, Args, D, TC);
> >
> > -  if (DebugInfoKind == codegenoptions::LimitedDebugInfo) {
> > +  if (DebugInfoKind == codegenoptions::LimitedDebugInfo ||
> > +      DebugInfoKind == codegenoptions::DebugInfoConstructor) {
> >      if (Args.hasFlag(options::OPT_fno_eliminate_unused_debug_types,
> >                       options::OPT_feliminate_unused_debug_types, false))
> >        DebugInfoKind = codegenoptions::UnusedTypeInfo;
> > @@ -5435,7 +5438,7 @@ void Clang::ConstructJob(Compilation &C, const
> > JobAction &JA,
> >    // This controls whether or not we perform JustMyCode instrumentation.
> >    if (Args.hasFlag(options::OPT_fjmc, options::OPT_fno_jmc, false)) {
> >      if (TC.getTriple().isOSBinFormatELF()) {
> > -      if (DebugInfoKind >= codegenoptions::LimitedDebugInfo)
> > +      if (DebugInfoKind >= codegenoptions::DebugInfoConstructor)
> >          CmdArgs.push_back("-fjmc");
> >        else
> >          D.Diag(clang::diag::warn_drv_jmc_requires_debuginfo) << "-fjmc"
> > @@ -7562,7 +7565,7 @@ void Clang::AddClangCLArgs(const ArgList &Args,
> > types::ID InputType,
> >
> > options::OPT_gline_tables_only)) {
> >      *EmitCodeView = true;
> >      if (DebugInfoArg->getOption().matches(options::OPT__SLASH_Z7))
> > -      *DebugInfoKind = codegenoptions::LimitedDebugInfo;
> > +      *DebugInfoKind = codegenoptions::DebugInfoConstructor;
> >      else
> >        *DebugInfoKind = codegenoptions::DebugLineTablesOnly;
> >    } else {
> > @@ -7574,7 +7577,7 @@ void Clang::AddClangCLArgs(const ArgList &Args,
> > types::ID InputType,
> >    // This controls whether or not we perform JustMyCode instrumentation.
> >    if (Args.hasFlag(options::OPT__SLASH_JMC, options::OPT__SLASH_JMC_,
> >                     /*Default=*/false)) {
> > -    if (*EmitCodeView && *DebugInfoKind >=
> > codegenoptions::LimitedDebugInfo)
> > +    if (*EmitCodeView && *DebugInfoKind >=
> > codegenoptions::DebugInfoConstructor)
> >        CmdArgs.push_back("-fjmc");
> >      else
> >        D.Diag(clang::diag::warn_drv_jmc_requires_debuginfo) << "/JMC"
> > @@ -7899,7 +7902,7 @@ void ClangAs::ConstructJob(Compilation &C, const
> > JobAction &JA,
> >      // the guard for source type, however there is a test which asserts
> >      // that some assembler invocation receives no -debug-info-kind,
> >      // and it's not clear whether that test is just overly restrictive.
> > -    DebugInfoKind = (WantDebug ? codegenoptions::LimitedDebugInfo
> > +    DebugInfoKind = (WantDebug ? codegenoptions::DebugInfoConstructor
> >                                 : codegenoptions::NoDebugInfo);
> >
> >      addDebugPrefixMapArg(getToolChain().getDriver(), getToolChain(),
> > Args,
> >
> > diff  --git a/clang/lib/Frontend/CompilerInvocation.cpp
> > b/clang/lib/Frontend/CompilerInvocation.cpp
> > index 0cf5978d8347b..c0eed3ad87485 100644
> > --- a/clang/lib/Frontend/CompilerInvocation.cpp
> > +++ b/clang/lib/Frontend/CompilerInvocation.cpp
> > @@ -1360,6 +1360,9 @@ void CompilerInvocation::GenerateCodeGenArgs(
> >    case codegenoptions::DebugDirectivesOnly:
> >      DebugInfoVal = "line-directives-only";
> >      break;
> > +  case codegenoptions::DebugInfoConstructor:
> > +    DebugInfoVal = "constructor";
> > +    break;
> >    case codegenoptions::LimitedDebugInfo:
> >      DebugInfoVal = "limited";
> >      break;
> > @@ -1634,6 +1637,7 @@ bool
> > CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,
> >          llvm::StringSwitch<unsigned>(A->getValue())
> >              .Case("line-tables-only",
> > codegenoptions::DebugLineTablesOnly)
> >              .Case("line-directives-only",
> > codegenoptions::DebugDirectivesOnly)
> > +            .Case("constructor", codegenoptions::DebugInfoConstructor)
> >              .Case("limited", codegenoptions::LimitedDebugInfo)
> >              .Case("standalone", codegenoptions::FullDebugInfo)
> >              .Case("unused-types", codegenoptions::UnusedTypeInfo)
> > @@ -1645,6 +1649,18 @@ bool
> > CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,
> >        Opts.setDebugInfo(static_cast<codegenoptions::DebugInfoKind>(Val));
> >    }
> >
> > +  // If -fuse-ctor-homing is set and limited debug info is already on,
> > then use
> > +  // 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('=');
> >      Opts.DebugPrefixMap.insert(
> >
> > diff  --git a/clang/test/CodeGen/attr-cpuspecific-renaming.cpp
> > b/clang/test/CodeGen/attr-cpuspecific-renaming.cpp
> > index acf2ea83f36fb..4d9086a35c744 100644
> > --- a/clang/test/CodeGen/attr-cpuspecific-renaming.cpp
> > +++ b/clang/test/CodeGen/attr-cpuspecific-renaming.cpp
> > @@ -1,5 +1,5 @@
> > -// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-linux-gnu -emit-
> > llvm -o - -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb
> > %s | FileCheck %s --check-prefixes=CHECK,LIN
> > -// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-windows-pc -emit-
> > llvm -o - -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb
> > %s | FileCheck %s --check-prefixes=CHECK,WIN
> > +// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-linux-gnu -emit-
> > llvm -o - -debug-info-kind=constructor -dwarf-version=4 -debugger-
> > tuning=gdb %s | FileCheck %s --check-prefixes=CHECK,LIN
> > +// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-windows-pc -emit-
> > llvm -o - -debug-info-kind=constructor -dwarf-version=4 -debugger-
> > tuning=gdb %s | FileCheck %s --check-prefixes=CHECK,WIN
> >
> >  // LIN: @[[S1_NAME:.+]].ifunc = weak_odr ifunc void (%struct.S1*), void
> > (%struct.S1*)* ()* @[[S1_NAME]].resolver
> >  // LIN: @[[S2_NAME:.+]].ifunc = weak_odr ifunc void (%struct.S2*), void
> > (%struct.S2*)* ()* @[[S2_NAME]].resolver
> >
> > diff  --git a/clang/test/CodeGen/pr52782-stdcall-func-decl.cpp
> > b/clang/test/CodeGen/pr52782-stdcall-func-decl.cpp
> > index 094d386e7a49b..c3c94ece24b2a 100644
> > --- a/clang/test/CodeGen/pr52782-stdcall-func-decl.cpp
> > +++ b/clang/test/CodeGen/pr52782-stdcall-func-decl.cpp
> > @@ -1,4 +1,4 @@
> > -// RUN: %clang_cc1 -triple i686-w64-windows-gnu -o - -emit-llvm -debug-
> > info-kind=limited %s | FileCheck %s
> > +// RUN: %clang_cc1 -triple i686-w64-windows-gnu -o - -emit-llvm -debug-
> > info-kind=constructor %s | FileCheck %s
> >
> >  enum nsresult {};
> >
> >
> > diff  --git a/clang/test/CodeGenCXX/debug-info-class.cpp
> > b/clang/test/CodeGenCXX/debug-info-class.cpp
> > index 6dbfb005d1982..2ba99d18405b3 100644
> > --- a/clang/test/CodeGenCXX/debug-info-class.cpp
> > +++ b/clang/test/CodeGenCXX/debug-info-class.cpp
> > @@ -32,13 +32,14 @@ struct D {
> >  };
> >
> >  struct E {
> > +  E();
> >    virtual ~E();
> >    virtual void func() {
> >    }
> >  };
> >
> >  struct F {
> > -  struct F_inner {
> > +  struct inner {
> >    };
> >    static const int i = 2;
> >    virtual ~F();
> > @@ -46,7 +47,7 @@ struct F {
> >
> >  struct G {
> >    virtual void func();
> > -  struct G_inner {
> > +  struct inner {
> >      int j;
> >    };
> >  };
> > @@ -82,7 +83,7 @@ void f1() {
> >    x.func();
> >    E y;
> >    int i = F::i;
> > -  F::F_inner z;
> > +  F::inner z;
> >    K k;
> >    k.func();
> >    L l;
> > @@ -91,7 +92,7 @@ void f1() {
> >
> >  int main(int argc, char **argv) {
> >    B b;
> > -  G::G_inner c_i;
> > +  G::inner c_i;
> >    if (argc) {
> >      A a;
> >    }
> > @@ -115,13 +116,11 @@ int main(int argc, char **argv) {
> >  // CHECK-SAME:                             DIFlagFwdDecl
> >  // CHECK-NOT:                             identifier:
> >  // CHECK-SAME:                            ){{$}}
> > -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "A"
> > -// CHECK: ![[INT:[0-9]+]] = !DIBasicType(name: "int"
> > -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "HdrSize"
> >  // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "I"
> >  // CHECK-NOT:              DIFlagFwdDecl
> >  // CHECK-SAME:             ){{$}}
> >
> > +// CHECK: ![[INT:[0-9]+]] = !DIBasicType(name: "int"
> >  // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo"
> >  // CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "bar"
> >  // CHECK: !DICompositeType(tag: DW_TAG_union_type, name: "baz"
> > @@ -174,10 +173,10 @@ int main(int argc, char **argv) {
> >  // CHECK-SAME:          DISPFlagLocalToUnit | DISPFlagDefinition
> >  // CHECK-SAME:          declaration: [[L_FUNC_DECL]]
> >
> > -// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "G_inner",
> > +// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name:
> > "inner",{{.*}} line: 50
> >  // CHECK-NOT: DIFlagFwdDecl
> >  // CHECK-SAME: elements: [[G_INNER_MEM:![0-9]*]]
> > -// CHECK-SAME: identifier: "_ZTSN1G7G_innerE"
> > +// CHECK-SAME: identifier: "_ZTSN1G5innerE"
> >
> >  // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "G"
> >  // CHECK-SAME:             DIFlagFwdDecl
> > @@ -187,6 +186,8 @@ int main(int argc, char **argv) {
> >  // CHECK: [[G_INNER_I]] = !DIDerivedType(tag: DW_TAG_member, name: "j"
> >  // CHECK-SAME:                           baseType: ![[INT]]
> >
> > +// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "A"
> > +// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "HdrSize"
> >  //
> > -// CHECK: ![[EXCEPTLOC]] = !DILocation(line: 99,
> > -// CHECK: ![[RETLOC]] = !DILocation(line: 98,
> > +// CHECK: ![[EXCEPTLOC]] = !DILocation(line: 100,
> > +// CHECK: ![[RETLOC]] = !DILocation(line: 99,
> >
> > diff  --git a/clang/test/CodeGenCXX/debug-info-ctor-homing-flag.cpp
> > b/clang/test/CodeGenCXX/debug-info-ctor-homing-flag.cpp
> > new file mode 100644
> > index 0000000000000..4398fa3b532ce
> > --- /dev/null
> > +++ b/clang/test/CodeGenCXX/debug-info-ctor-homing-flag.cpp
> > @@ -0,0 +1,23 @@
> > +// RUN: %clang_cc1 -debug-info-kind=constructor -emit-llvm %s -o - \
> > +// RUN:        | FileCheck %s -check-prefix=CTOR_HOMING
> > +// RUN: %clang_cc1 -debug-info-kind=limited -fuse-ctor-homing -emit-llvm
> > %s -o - \
> > +// RUN:        | FileCheck %s -check-prefix=CTOR_HOMING
> > +// RUN: %clang_cc1 -debug-info-kind=standalone -fuse-ctor-homing -emit-
> > llvm %s -o - \
> > +// RUN:        | FileCheck %s -check-prefix=FULL_DEBUG
> > +// RUN: %clang_cc1 -debug-info-kind=line-tables-only -fuse-ctor-homing -
> > emit-llvm %s -o - \
> > +// 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.
> > +
> > +// CTOR_HOMING: !DICompositeType(tag: DW_TAG_structure_type, name:
> > "A"{{.*}}flags: DIFlagFwdDecl
> > +// FULL_DEBUG: !DICompositeType(tag: DW_TAG_structure_type, name:
> > "A"{{.*}}DIFlagTypePassByValue
> > +// NO_DEBUG-NOT: !DICompositeType(tag: DW_TAG_structure_type, name: "A"
> > +struct A {
> > +  A();
> > +} TestA;
> >
> > diff  --git a/clang/test/CodeGenCXX/debug-info-limited-ctor.cpp
> > b/clang/test/CodeGenCXX/debug-info-limited-ctor.cpp
> > index c22d6587e6c70..835e6d4816225 100644
> > --- a/clang/test/CodeGenCXX/debug-info-limited-ctor.cpp
> > +++ b/clang/test/CodeGenCXX/debug-info-limited-ctor.cpp
> > @@ -1,4 +1,4 @@
> > -// RUN: %clang_cc1 -debug-info-kind=limited -emit-llvm %s -o - |
> > FileCheck %s
> > +// RUN: %clang_cc1 -debug-info-kind=constructor -emit-llvm %s -o - |
> > FileCheck %s
> >
> >  // CHECK-DAG: !DICompositeType(tag: DW_TAG_structure_type, name:
> > "A"{{.*}}DIFlagTypePassByValue
> >  struct A {
> >
> > diff  --git a/clang/test/CodeGenCXX/debug-info-template-explicit-
> > specialization.cpp b/clang/test/CodeGenCXX/debug-info-template-explicit-
> > specialization.cpp
> > index 4e41c4092bf4e..b756674f54c40 100644
> > --- a/clang/test/CodeGenCXX/debug-info-template-explicit-
> > specialization.cpp
> > +++ b/clang/test/CodeGenCXX/debug-info-template-explicit-
> > specialization.cpp
> > @@ -1,5 +1,8 @@
> >  // RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple -debug-info-
> > kind=limited %s -o - | FileCheck %s
> >
> > +// Make sure this still works with constructor homing.
> > +// RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple -debug-info-
> > kind=constructor %s -o - | FileCheck %s
> > +
> >  // Run again with -gline-tables-only or -gline-directives-only and verify
> > we don't crash.  We won't output
> >  // type info at all.
> >  // RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple -debug-info-
> > kind=line-tables-only %s -o - | FileCheck %s -check-prefix LINES-ONLY
> >
> > diff  --git a/clang/test/CodeGenCXX/debug-lambda-this.cpp
> > b/clang/test/CodeGenCXX/debug-lambda-this.cpp
> > index 7368962ac1dfa..eecbac6520ac9 100644
> > --- a/clang/test/CodeGenCXX/debug-lambda-this.cpp
> > +++ b/clang/test/CodeGenCXX/debug-lambda-this.cpp
> > @@ -12,7 +12,7 @@ int D::d(int x) {
> >    }();
> >  }
> >
> > -// CHECK: ![[D:[0-9]+]] = !DICompositeType(tag: DW_TAG_structure_type,
> > name: "D",
> > +// CHECK: ![[D:[0-9]+]] = distinct !DICompositeType(tag:
> > DW_TAG_structure_type, name: "D",
> >  // CHECK: ![[POINTER:.*]] = !DIDerivedType(tag: DW_TAG_pointer_type,
> > baseType: ![[D]], size: 64)
> >  // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "this",
> >  // CHECK-SAME:           line: 11
> >
> > diff  --git a/clang/test/CodeGenCXX/ibm128-declarations.cpp
> > b/clang/test/CodeGenCXX/ibm128-declarations.cpp
> > index 0aab887fd62f4..ec06ff1990d12 100644
> > --- a/clang/test/CodeGenCXX/ibm128-declarations.cpp
> > +++ b/clang/test/CodeGenCXX/ibm128-declarations.cpp
> > @@ -174,7 +174,5 @@ int main(void) {
> >  // CHECK:   ret void
> >  // CHECK: }
> >
> > -// CHECK: [[GF_TYPE:!.*]] = !DIBasicType(name: "__ibm128", size: 128,
> > encoding: DW_ATE_float)
> > -// CHECK: = distinct !DIGlobalVariable(name: "gf",
> > -// CHECK-SAME: type: [[GF_TYPE]],
> > -// CHECK-SAME: isDefinition: true)
> > +// CHECK: !6 = distinct !DIGlobalVariable(name: "gf", scope: !2, file:
> > !7, line: {{[0-9]+}}, type: !8, isLocal: false, isDefinition: true)
> > +// CHECK: !8 = !DIBasicType(name: "__ibm128", size: 128, encoding:
> > DW_ATE_float)
> >
> > diff  --git a/clang/test/CodeGenCXX/standalone-debug-attribute.cpp
> > b/clang/test/CodeGenCXX/standalone-debug-attribute.cpp
> > index f7920dcad9f9c..a814e6f425ed6 100644
> > --- a/clang/test/CodeGenCXX/standalone-debug-attribute.cpp
> > +++ b/clang/test/CodeGenCXX/standalone-debug-attribute.cpp
> > @@ -1,5 +1,6 @@
> > -// RUN: %clang_cc1 -DSETATTR=0 -triple x86_64-unknown-linux-gnu -emit-
> > llvm -debug-info-kind=limited %s -o - | FileCheck %s --check-prefix=DEBUG
> > -// RUN: %clang_cc1 -DSETATTR=1 -triple x86_64-unknown-linux-gnu -emit-
> > llvm -debug-info-kind=limited %s -o - | FileCheck %s --check-
> > prefix=WITHATTR
> > +// RUN: %clang_cc1 -DSETATTR=0 -triple x86_64-unknown-linux-gnu -emit-
> > llvm -debug-info-kind=constructor %s -o - | FileCheck %s --check-
> > prefix=DEBUG
> > +// RUN: %clang_cc1 -DSETATTR=1 -triple x86_64-unknown-linux-gnu -emit-
> > llvm -debug-info-kind=constructor %s -o - | FileCheck %s --check-
> > prefix=WITHATTR
> > +// Use -debug-info-kind=constructor because it includes all the
> > optimizations.
> >
> >  #if SETATTR
> >  #define STANDALONEDEBUGATTR __attribute__((standalone_debug))
> >
> > diff  --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-
> > options.c
> > index 939b2e9c178d7..a2e350a0a8355 100644
> > --- a/clang/test/Driver/cl-options.c
> > +++ b/clang/test/Driver/cl-options.c
> > @@ -540,11 +540,11 @@
> >
> >  // RUN: %clang_cl /Zi /c -### -- %s 2>&1 | FileCheck -check-prefix=Zi %s
> >  // Zi: "-gcodeview"
> > -// Zi: "-debug-info-kind=limited"
> > +// Zi: "-debug-info-kind=constructor"
> >
> >  // RUN: %clang_cl /Z7 /c -### -- %s 2>&1 | FileCheck -check-prefix=Z7 %s
> >  // Z7: "-gcodeview"
> > -// Z7: "-debug-info-kind=limited"
> > +// Z7: "-debug-info-kind=constructor"
> >
> >  // RUN: %clang_cl -gline-tables-only /c -### -- %s 2>&1 | FileCheck -
> > check-prefix=ZGMLT %s
> >  // ZGMLT: "-gcodeview"
> > @@ -569,7 +569,7 @@
> >  // which made it "win". This test could not detect that bug.
> >  // RUN: %clang_cl /Z7 -gdwarf /c -### -- %s 2>&1 | FileCheck -check-
> > prefix=Z7_gdwarf %s
> >  // Z7_gdwarf: "-gcodeview"
> > -// Z7_gdwarf: "-debug-info-kind=limited"
> > +// Z7_gdwarf: "-debug-info-kind=constructor"
> >  // Z7_gdwarf: "-dwarf-version=
> >
> >  // RUN: %clang_cl -fmsc-version=1800 -TP -### -- %s 2>&1 | FileCheck -
> > check-prefix=CXX11 %s
> >
> > diff  --git a/clang/test/Driver/clang-g-opts.c b/clang/test/Driver/clang-
> > g-opts.c
> > index d2e0d440209e1..d982b1070cae1 100644
> > --- a/clang/test/Driver/clang-g-opts.c
> > +++ b/clang/test/Driver/clang-g-opts.c
> > @@ -31,7 +31,7 @@
> >  // RUN:             | FileCheck --check-prefix=CHECK-WITH-G-DWARF2 %s
> >
> >  // CHECK-WITHOUT-G-NOT: -debug-info-kind
> > -// CHECK-WITH-G: "-debug-info-kind=limited"
> > +// CHECK-WITH-G: "-debug-info-kind=constructor"
> >  // CHECK-WITH-G: "-dwarf-version=5"
> >  // CHECK-WITH-G-DWARF2: "-dwarf-version=2"
> >
> >
> > diff  --git a/clang/test/Driver/cuda-dwarf-2.cu b/clang/test/Driver/cuda-
> > dwarf-2.cu
> > index 6a3dcc39ee6f5..eda9599fe79d4 100644
> > --- a/clang/test/Driver/cuda-dwarf-2.cu
> > +++ b/clang/test/Driver/cuda-dwarf-2.cu
> > @@ -48,7 +48,7 @@
> >
> >  // HAS_DEBUG-NOT: warning: debug
> >  // HAS_DEBUG: "-fcuda-is-device"
> > -// HAS_DEBUG-SAME: "-debug-info-kind={{limited|line-tables-only}}"
> > +// HAS_DEBUG-SAME: "-debug-info-kind={{constructor|line-tables-only}}"
> >  // HAS_DEBUG-SAME: "-dwarf-version=2"
> >  // HAS_DEBUG: ptxas
> >  // HAS_DEBUG-SAME: "-g"
> >
> > diff  --git a/clang/test/Driver/debug-options-as.c
> > b/clang/test/Driver/debug-options-as.c
> > index 000090062d7d2..87268e8c5deaf 100644
> > --- a/clang/test/Driver/debug-options-as.c
> > +++ b/clang/test/Driver/debug-options-as.c
> > @@ -23,7 +23,7 @@
> >  // RUN:   | FileCheck %s
> >  //
> >  // CHECK: "-cc1as"
> > -// CHECK: "-debug-info-kind=limited"
> > +// CHECK: "-debug-info-kind=constructor"
> >
> >  // Check to make sure clang with -g on a .s file gets passed -dwarf-
> > debug-producer.
> >  // rdar://12955296
> >
> > diff  --git a/clang/test/Driver/debug-options.c b/clang/test/Driver/debug-
> > options.c
> > index e946a0bb290d4..04004716aa501 100644
> > --- a/clang/test/Driver/debug-options.c
> > +++ b/clang/test/Driver/debug-options.c
> > @@ -313,18 +313,18 @@
> >  // GLIO_ONLY_DWARF2: "-dwarf-version=2"
> >  //
> >  // G_ONLY: "-cc1"
> > -// G_ONLY: "-debug-info-kind=limited"
> > +// G_ONLY: "-debug-info-kind=constructor"
> >  //
> >  // These tests assert that "-gline-tables-only" "-g" uses the latter,
> >  // but otherwise not caring about the DebugInfoKind.
> >  // G_ONLY_DWARF2: "-cc1"
> > -// G_ONLY_DWARF2: "-debug-info-kind={{standalone|limited}}"
> > +// G_ONLY_DWARF2: "-debug-info-kind={{standalone|constructor}}"
> >  // G_ONLY_DWARF2: "-dwarf-version=2"
> >  //
> >  // G_STANDALONE: "-cc1"
> >  // G_STANDALONE: "-debug-info-kind=standalone"
> >  // G_LIMITED: "-cc1"
> > -// G_LIMITED: "-debug-info-kind=limited"
> > +// G_LIMITED: "-debug-info-kind=constructor"
> >  // G_DWARF2: "-dwarf-version=2"
> >  // G_DWARF4-DAG: "-dwarf-version=4"
> >  // G_DWARF5-DAG: "-dwarf-version=5"
> > @@ -383,7 +383,7 @@
> >  // NOCI-DAG: "-gno-column-info"
> >  //
> >  // GEXTREFS: "-dwarf-ext-refs" "-fmodule-format=obj"
> > -// GEXTREFS: "-debug-info-kind={{standalone|limited}}"
> > +// GEXTREFS: "-debug-info-kind={{standalone|constructor}}"
> >
> >  // RUN: not %clang -cc1 -debug-info-kind=watkind 2>&1 | FileCheck -check-
> > prefix=BADSTRING1 %s
> >  // BADSTRING1: error: invalid value 'watkind' in '-debug-info-
> > kind=watkind'
> > @@ -414,7 +414,7 @@
> >  // RUN:        | FileCheck -check-prefix=NO_DEBUG_UNUSED_TYPES %s
> >  // RUN: %clang -### -fno-eliminate-unused-debug-types -g1 -c %s 2>&1 \
> >  // RUN:        | FileCheck -check-prefix=NO_DEBUG_UNUSED_TYPES %s
> > -// NO_DEBUG_UNUSED_TYPES: "-debug-info-kind={{limited|line-tables-
> > only|standalone}}"
> > +// NO_DEBUG_UNUSED_TYPES: "-debug-info-kind={{constructor|line-tables-
> > only|standalone}}"
> >  // NO_DEBUG_UNUSED_TYPES-NOT: "-debug-info-kind=unused-types"
> >  //
> >  // RUN: %clang -### -c -gdwarf-5 -gdwarf64 -target x86_64 %s 2>&1 |
> > FileCheck -check-prefix=GDWARF64_ON %s
> >
> > diff  --git a/clang/test/Driver/integrated-as.s
> > b/clang/test/Driver/integrated-as.s
> > index 0194a3d5a4382..05999cfe002b5 100644
> > --- a/clang/test/Driver/integrated-as.s
> > +++ b/clang/test/Driver/integrated-as.s
> > @@ -27,19 +27,19 @@
> >  // XA_INCLUDE2: "-Ifoo_dir"
> >
> >  // RUN: %clang -### -target x86_64--- -c -integrated-as %s -gdwarf-4 -
> > gdwarf-2 2>&1 | FileCheck --check-prefix=DWARF2 %s
> > -// DWARF2: "-debug-info-kind=limited" "-dwarf-version=2"
> > +// DWARF2: "-debug-info-kind=constructor" "-dwarf-version=2"
> >
> >  // RUN: %clang -### -target x86_64--- -c -integrated-as %s -gdwarf-3 2>&1
> > | FileCheck --check-prefix=DWARF3 %s
> > -// DWARF3: "-debug-info-kind=limited" "-dwarf-version=3"
> > +// DWARF3: "-debug-info-kind=constructor" "-dwarf-version=3"
> >
> >  // RUN: %clang -### -target x86_64--- -c -integrated-as %s -gdwarf-4 2>&1
> > | FileCheck --check-prefix=DWARF4 %s
> > -// DWARF4: "-debug-info-kind=limited" "-dwarf-version=4"
> > +// DWARF4: "-debug-info-kind=constructor" "-dwarf-version=4"
> >
> >  // RUN: %clang -### -target x86_64--- -c -integrated-as %s -Xassembler -
> > gdwarf-2 2>&1 | FileCheck --check-prefix=DWARF2XASSEMBLER %s
> > -// DWARF2XASSEMBLER: "-debug-info-kind=limited" "-dwarf-version=2"
> > +// DWARF2XASSEMBLER: "-debug-info-kind=constructor" "-dwarf-version=2"
> >
> >  // RUN: %clang -### -target x86_64--- -c -integrated-as %s -Wa,-gdwarf-2
> > 2>&1 | FileCheck --check-prefix=DWARF2WA %s
> > -// DWARF2WA: "-debug-info-kind=limited" "-dwarf-version=2"
> > +// DWARF2WA: "-debug-info-kind=constructor" "-dwarf-version=2"
> >
> >  // A dwarf version number that driver can't parse is just stuffed in.
> >  // RUN: %clang -### -target x86_64--- -c -integrated-as %s -Wa,-gdwarf-
> > huh 2>&1 | FileCheck --check-prefix=BOGODWARF %s
> >
> > diff  --git a/clang/test/Driver/myriad-toolchain.c
> > b/clang/test/Driver/myriad-toolchain.c
> > index 4768624381740..f680420804256 100644
> > --- a/clang/test/Driver/myriad-toolchain.c
> > +++ b/clang/test/Driver/myriad-toolchain.c
> > @@ -83,7 +83,7 @@
> >  // NOSTDLIB-NOT: "-lc"
> >
> >  // RUN: %clang -### -c -g %s --target=sparc-myriad 2>&1 | FileCheck -
> > check-prefix=G_SPARC %s
> > -// G_SPARC: "-debug-info-kind=limited" "-dwarf-version=2"
> > +// G_SPARC: "-debug-info-kind=constructor" "-dwarf-version=2"
> >
> >  // RUN: %clang -### -c %s --target=sparc-myriad-rtems -fuse-init-array
> > 2>&1 \
> >  // RUN: | FileCheck -check-prefix=USE-INIT-ARRAY %s
> >
> > diff  --git a/clang/test/Driver/openmp-offload-gpu.c
> > b/clang/test/Driver/openmp-offload-gpu.c
> > index 0837cc728e7d5..92020b82cd2ce 100644
> > --- a/clang/test/Driver/openmp-offload-gpu.c
> > +++ b/clang/test/Driver/openmp-offload-gpu.c
> > @@ -258,7 +258,7 @@
> >
> >  // HAS_DEBUG-NOT: warning: debug
> >  // HAS_DEBUG: "-triple" "nvptx64-nvidia-cuda"
> > -// HAS_DEBUG-SAME: "-debug-info-kind={{limited|line-tables-only}}"
> > +// HAS_DEBUG-SAME: "-debug-info-kind={{constructor|line-tables-only}}"
> >  // HAS_DEBUG-SAME: "-dwarf-version=2"
> >  // HAS_DEBUG-SAME: "-fopenmp-is-device"
> >  // HAS_DEBUG: ptxas
> >
> > diff  --git a/clang/test/Driver/split-debug.c b/clang/test/Driver/split-
> > debug.c
> > index 00173836bc23d..94db20b554046 100644
> > --- a/clang/test/Driver/split-debug.c
> > +++ b/clang/test/Driver/split-debug.c
> > @@ -9,7 +9,7 @@
> >
> >  // INLINE:     "-fsplit-dwarf-inlining"
> >  // NOINLINE-NOT: "-fsplit-dwarf-inlining"
> > -// SPLIT:      "-debug-info-kind=limited"
> > +// SPLIT:      "-debug-info-kind=constructor"
> >  // SPLIT-SAME: "-ggnu-pubnames"
> >  // SPLIT-SAME: "-split-dwarf-file" "split-debug.dwo" "-split-dwarf-
> > output" "split-debug.dwo"
> >
> > @@ -38,14 +38,14 @@
> >  // RUN: %clang -### -c -target x86_64 -gsplit-dwarf=single -g -gno-split-
> > dwarf %s 2>&1 | FileCheck %s --check-prefix=NOSPLIT
> >  // RUN: %clang -### -c -target x86_64 -gno-split-dwarf -g -gsplit-dwarf
> > %s 2>&1 | FileCheck %s --check-prefixes=NOINLINE,SPLIT
> >
> > -// NOSPLIT:     "-debug-info-kind=limited"
> > +// NOSPLIT:     "-debug-info-kind=constructor"
> >  // NOSPLIT-NOT: "-ggnu-pubnames"
> >  // NOSPLIT-NOT: "-split-dwarf
> >
> >  /// Test -gsplit-dwarf=single.
> >  // RUN: %clang -### -c -target x86_64 -gsplit-dwarf=single -g %s 2>&1 |
> > FileCheck %s --check-prefix=SINGLE
> >
> > -// SINGLE: "-debug-info-kind=limited"
> > +// SINGLE: "-debug-info-kind=constructor"
> >  // SINGLE: "-split-dwarf-file" "split-debug.o"
> >  // SINGLE-NOT: "-split-dwarf-output"
> >
> > @@ -62,7 +62,7 @@
> >
> >  // RUN: %clang -### -c -target x86_64 -gsplit-dwarf=split -g -gno-
> > pubnames %s 2>&1 | FileCheck %s --check-prefixes=NOPUBNAMES
> >  // RUN: %clang -### -c -target x86_64 -gsplit-dwarf=split -g -gno-gnu-
> > pubnames %s 2>&1 | FileCheck %s --check-prefixes=NOPUBNAMES
> > -// NOPUBNAMES:      "-debug-info-kind=limited"
> > +// NOPUBNAMES:      "-debug-info-kind=constructor"
> >  // NOPUBNAMES-NOT:  "-ggnu-pubnames"
> >  // NOPUBNAMES-SAME: "-split-dwarf-file" "split-debug.dwo" "-split-dwarf-
> > output" "split-debug.dwo"
> >
> >
> > diff  --git a/clang/test/OpenMP/debug_private.c
> > b/clang/test/OpenMP/debug_private.c
> > index f5d026bc88427..9aca85b76f473 100644
> > --- a/clang/test/OpenMP/debug_private.c
> > +++ b/clang/test/OpenMP/debug_private.c
> > @@ -3,6 +3,7 @@
> >
> >  // REQUIRES: x86_64-linux
> >
> > +// RUN: %clang_cc1 -no-opaque-pointers -debug-info-kind=constructor -x c
> > -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - |
> > FileCheck %s
> >  // RUN: %clang_cc1 -no-opaque-pointers -debug-info-kind=line-directives-
> > only -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o -
> > | FileCheck %s --check-prefix=NEG
> >  // RUN: %clang_cc1 -no-opaque-pointers -debug-info-kind=line-tables-only
> > -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - |
> > FileCheck %s --check-prefix=NEG
> >  // RUN: %clang_cc1 -no-opaque-pointers -debug-info-kind=limited -x c -
> > verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck
> > %s
> >
> > diff  --git a/clang/test/OpenMP/debug_task_shared.c
> > b/clang/test/OpenMP/debug_task_shared.c
> > index 663e5a2b827f4..b05177a835094 100644
> > --- a/clang/test/OpenMP/debug_task_shared.c
> > +++ b/clang/test/OpenMP/debug_task_shared.c
> > @@ -3,7 +3,8 @@
> >
> >  // REQUIRES: x86_64-linux
> >
> > -// RUN: %clang_cc1 -no-opaque-pointers -debug-info-kind=limited -x c -
> > verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck
> > %s --check-prefix=NEG
> > +// RUN: %clang_cc1 -no-opaque-pointers -debug-info-kind=constructor -
> > DSHARED -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o
> > - | FileCheck %s --check-prefix=CHECK
> > +// RUN: %clang_cc1 -no-opaque-pointers -debug-info-kind=constructor -x c
> > -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - |
> > FileCheck %s --check-prefix=NEG
> >  // RUN: %clang_cc1 -no-opaque-pointers -debug-info-kind=line-directives-
> > only -DSHARED -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm
> > %s -o - | FileCheck %s --check-prefix=NEG
> >  // RUN: %clang_cc1 -no-opaque-pointers -debug-info-kind=line-tables-only
> > -DSHARED -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -
> > o - | FileCheck %s --check-prefix=NEG
> >  // RUN: %clang_cc1 -no-opaque-pointers -debug-info-kind=limited -DSHARED
> > -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - |
> > FileCheck %s --check-prefix=CHECK
> >
> > diff  --git a/clang/test/OpenMP/debug_threadprivate_copyin.c
> > b/clang/test/OpenMP/debug_threadprivate_copyin.c
> > index ca93abe57ece9..bb0b76d5242a4 100644
> > --- a/clang/test/OpenMP/debug_threadprivate_copyin.c
> > +++ b/clang/test/OpenMP/debug_threadprivate_copyin.c
> > @@ -3,7 +3,7 @@
> >
> >  // REQUIRES: x86_64-linux
> >
> > -// RUN: %clang_cc1 -debug-info-kind=limited -x c -verify -triple x86_64-
> > pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s
> > +// RUN: %clang_cc1 -debug-info-kind=constructor -x c -verify -triple
> > x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s
> >  // expected-no-diagnostics
> >
> >  // CHECK: define internal void @.omp_outlined._debug__(
> >
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at lists.llvm.org
> > https://urldefense.com/v3/__https://lists.llvm.org/cgi-
> > bin/mailman/listinfo/cfe-
> > commits__;!!JmoZiZGBv3RvKRSx!7pmjZG0ponrxAVY0dOSOTgWfvxMgERh3TNpn2zRGr7NTu
> > ooxwQKHzTroRX39LtKaKCXGoQDn3Ri4BOhJymrw1xjBrro$


More information about the cfe-commits mailing list