<div dir="ltr"><div dir="ltr">On Thu, Sep 23, 2021 at 7:12 AM <<a href="mailto:paul.robinson@sony.com">paul.robinson@sony.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Resending to cfe-commits instead of llvm-commits (doh!).<br>
<br>
> -----Original Message-----<br>
> From: Robinson, Paul<br>
> Sent: Thursday, September 23, 2021 10:05 AM<br>
> To: David Blaikie <<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>>; '<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>'<br>
> <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>><br>
> Cc: Adrian Prantl <<a href="mailto:aprantl@apple.com" target="_blank">aprantl@apple.com</a>>; Jonas Devlieghere<br>
> <<a href="mailto:jdevlieghere@apple.com" target="_blank">jdevlieghere@apple.com</a>><br>
> Subject: RE: [clang] 38c09ea - DebugInfo: Add (initially no-op) -gsimple-<br>
> template-names={simple,mangled}<br>
> <br>
> -gsimple-template-names=mangled seems like a testing feature?<br>
> That would be parseable only by llvm-dwarfdump...<br>
> In which case it seems like it should be a -cc1 option not a<br>
> driver option.<br></blockquote><div><br>Yep, sounds fair - done that in 8ec7d9b8f875368a5f92596332cd05059df6bbd2 <br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
> --paulr<br>
> <br>
> > -----Original Message-----<br>
> > From: cfe-commits <<a href="mailto:cfe-commits-bounces@lists.llvm.org" target="_blank">cfe-commits-bounces@lists.llvm.org</a>> On Behalf Of<br>
> David<br>
> > Blaikie via cfe-commits<br>
> > Sent: Wednesday, September 22, 2021 2:12 PM<br>
> > To: <a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
> > Subject: [clang] 38c09ea - DebugInfo: Add (initially no-op) -gsimple-<br>
> > template-names={simple,mangled}<br>
> ><br>
> ><br>
> > Author: David Blaikie<br>
> > Date: 2021-09-22T11:11:49-07:00<br>
> > New Revision: 38c09ea2d279eddddabe3602e2002f8cdfcc5380<br>
> ><br>
> > URL: <a href="https://urldefense.com/v3/__https://github.com/llvm/llvm-" rel="noreferrer" target="_blank">https://urldefense.com/v3/__https://github.com/llvm/llvm-</a><br>
> ><br>
> project/commit/38c09ea2d279eddddabe3602e2002f8cdfcc5380__;!!JmoZiZGBv3RvKR<br>
> > Sx!sx4rLw3CFwdj-rfDEK1Ah3HnANZSLOpXYFIcie1Oiyili8LKwFHxFk-g0F7-Z2pXAg$<br>
> > DIFF: <a href="https://urldefense.com/v3/__https://github.com/llvm/llvm-" rel="noreferrer" target="_blank">https://urldefense.com/v3/__https://github.com/llvm/llvm-</a><br>
> ><br>
> project/commit/38c09ea2d279eddddabe3602e2002f8cdfcc5380.diff__;!!JmoZiZGBv<br>
> > 3RvKRSx!sx4rLw3CFwdj-rfDEK1Ah3HnANZSLOpXYFIcie1Oiyili8LKwFHxFk-<br>
> > g0F4WQP9bxA$<br>
> ><br>
> > LOG: DebugInfo: Add (initially no-op) -gsimple-template-<br>
> > names={simple,mangled}<br>
> ><br>
> > This is to build the foundation of a new debug info feature to use only<br>
> > the base name of template as its debug info name (eg: "t1" instead of<br>
> > the full "t1<int>"). The intent being that a consumer can still retrieve<br>
> > all that information from the DW_TAG_template_*_parameters.<br>
> ><br>
> > So gno-simple-template-names is business as usual/previously ("t1<int>")<br>
> >    =simple is the simplified name ("t1")<br>
> >    =mangled is a special mode to communicate the full information, but<br>
> >    also indicate that the name should be able to be simplified. The data<br>
> >    is encoded as "_STNt1|<int>" which will be matched with an<br>
> >    llvm-dwarfdump --verify feature to deconstruct this name, rebuild the<br>
> >    original name, and then try to rebuild the simple name via the DWARF<br>
> >    tags - then compare the latter and the former to ensure that all the<br>
> >    data necessary to fully rebuild the name is present.<br>
> ><br>
> > Added:<br>
> ><br>
> ><br>
> > Modified:<br>
> >     clang/include/clang/Basic/CodeGenOptions.def<br>
> >     clang/include/clang/Basic/DebugInfoOptions.h<br>
> >     clang/include/clang/Driver/Options.td<br>
> >     clang/lib/Driver/ToolChains/Clang.cpp<br>
> >     clang/lib/Frontend/CompilerInvocation.cpp<br>
> >     clang/test/Driver/debug-options.c<br>
> ><br>
> > Removed:<br>
> ><br>
> ><br>
> ><br>
> ><br>
> ##########################################################################<br>
> > ######<br>
> > diff  --git a/clang/include/clang/Basic/CodeGenOptions.def<br>
> > b/clang/include/clang/Basic/CodeGenOptions.def<br>
> > index 37900bf3ead1..5d1d4f9dc58e 100644<br>
> > --- a/clang/include/clang/Basic/CodeGenOptions.def<br>
> > +++ b/clang/include/clang/Basic/CodeGenOptions.def<br>
> > @@ -320,6 +320,12 @@ CODEGENOPT(DebugFwdTemplateParams, 1, 0) ///<<br>
> Whether<br>
> > to emit complete<br>
> >                                           ///< template parameter<br>
> > descriptions in<br>
> >                                           ///< forward declarations<br>
> > (versus just<br>
> >                                           ///< including them in the<br>
> > name).<br>
> > +ENUM_CODEGENOPT(DebugSimpleTemplateNames,<br>
> > codegenoptions::DebugTemplateNamesKind, 2,<br>
> > codegenoptions::DebugTemplateNamesKind::Full) ///< Whether to emit<br>
> > template parameters<br>
> > +                                           ///< in the textual names of<br>
> > template<br>
> > +                                      ///< specializations.<br>
> > +                                      ///< Implies DebugFwdTemplateNames to<br>
> > +                                      ///< allow decorated names to be<br>
> > +                                      ///< reconstructed when needed.<br>
> >  CODEGENOPT(EmitLLVMUseLists, 1, 0) ///< Control whether to serialize<br>
> use-<br>
> > lists.<br>
> ><br>
> >  CODEGENOPT(WholeProgramVTables, 1, 0) ///< Whether to apply whole-<br>
> program<br>
> ><br>
> > diff  --git a/clang/include/clang/Basic/DebugInfoOptions.h<br>
> > b/clang/include/clang/Basic/DebugInfoOptions.h<br>
> > index c1259d7797db..a99a2b5903d7 100644<br>
> > --- a/clang/include/clang/Basic/DebugInfoOptions.h<br>
> > +++ b/clang/include/clang/Basic/DebugInfoOptions.h<br>
> > @@ -54,6 +54,12 @@ enum DebugInfoKind {<br>
> >    UnusedTypeInfo,<br>
> >  };<br>
> ><br>
> > +enum class DebugTemplateNamesKind {<br>
> > +  Full,<br>
> > +  Simple,<br>
> > +  Mangled<br>
> > +};<br>
> > +<br>
> >  } // end namespace codegenoptions<br>
> >  } // end namespace clang<br>
> ><br>
> ><br>
> > diff  --git a/clang/include/clang/Driver/Options.td<br>
> > b/clang/include/clang/Driver/Options.td<br>
> > index f0932a0bd1de..13d740cdb0fb 100644<br>
> > --- a/clang/include/clang/Driver/Options.td<br>
> > +++ b/clang/include/clang/Driver/Options.td<br>
> > @@ -2967,6 +2967,15 @@ def gsplit_dwarf_EQ : Joined<["-"], "gsplit-<br>
> > dwarf=">, Group<g_flags_Group>,<br>
> >    HelpText<"Set DWARF fission mode to either 'split' or 'single'">,<br>
> >    Values<"split,single">;<br>
> >  def gno_split_dwarf : Flag<["-"], "gno-split-dwarf">,<br>
> > Group<g_flags_Group>;<br>
> > +def gsimple_template_names : Flag<["-"], "gsimple-template-names">,<br>
> > Group<g_flags_Group>;<br>
> > +def gsimple_template_names_EQ<br>
> > +    : Joined<["-"], "gsimple-template-names=">,<br>
> > +      Group<g_flags_Group>,<br>
> > +      HelpText<"Use simple template names in DWARF, or include the full<br>
> "<br>
> > +               "template name with a modified prefix for validation">,<br>
> > +      Values<"simple,mangled">, Flags<[CC1Option]>;<br>
> > +def gno_simple_template_names : Flag<["-"], "gno-simple-template-<br>
> names">,<br>
> > +                                Group<g_flags_Group>;<br>
> >  def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group<g_flags_Group>,<br>
> > Flags<[CC1Option]>;<br>
> >  def gno_gnu_pubnames : Flag<["-"], "gno-gnu-pubnames">,<br>
> > Group<g_flags_Group>;<br>
> >  def gpubnames : Flag<["-"], "gpubnames">, Group<g_flags_Group>,<br>
> > Flags<[CC1Option]>;<br>
> ><br>
> > diff  --git a/clang/lib/Driver/ToolChains/Clang.cpp<br>
> > b/clang/lib/Driver/ToolChains/Clang.cpp<br>
> > index e6742c6575b9..6c7b8bbcaad7 100644<br>
> > --- a/clang/lib/Driver/ToolChains/Clang.cpp<br>
> > +++ b/clang/lib/Driver/ToolChains/Clang.cpp<br>
> > @@ -4128,6 +4128,29 @@ static void renderDebugOptions(const ToolChain<br>
> &TC,<br>
> > const Driver &D,<br>
> >                                             options::OPT_gpubnames)<br>
> >                              ? "-gpubnames"<br>
> >                              : "-ggnu-pubnames");<br>
> > +  const auto *SimpleTemplateNamesArg =<br>
> > +      Args.getLastArg(options::OPT_gsimple_template_names,<br>
> > options::OPT_gno_simple_template_names,<br>
> > +                      options::OPT_gsimple_template_names_EQ);<br>
> > +  bool ForwardTemplateParams = DebuggerTuning ==<br>
> llvm::DebuggerKind::SCE;<br>
> > +  if (SimpleTemplateNamesArg &&<br>
> > +      checkDebugInfoOption(SimpleTemplateNamesArg, Args, D, TC)) {<br>
> > +    const auto &Opt = SimpleTemplateNamesArg->getOption();<br>
> > +    if (Opt.matches(options::OPT_gsimple_template_names)) {<br>
> > +      ForwardTemplateParams = true;<br>
> > +      CmdArgs.push_back("-gsimple-template-names=simple");<br>
> > +    } else if (Opt.matches(options::OPT_gsimple_template_names_EQ)) {<br>
> > +      ForwardTemplateParams = true;<br>
> > +      StringRef Value = SimpleTemplateNamesArg->getValue();<br>
> > +      if (Value == "simple") {<br>
> > +        CmdArgs.push_back("-gsimple-template-names=simple");<br>
> > +      } else if (Value == "mangled") {<br>
> > +        CmdArgs.push_back("-gsimple-template-names=mangled");<br>
> > +      } else {<br>
> > +        D.Diag(diag::err_drv_unsupported_option_argument)<br>
> > +            << Opt.getName() << SimpleTemplateNamesArg->getValue();<br>
> > +      }<br>
> > +    }<br>
> > +  }<br>
> ><br>
> >    if (Args.hasFlag(options::OPT_fdebug_ranges_base_address,<br>
> >                     options::OPT_fno_debug_ranges_base_address, false))<br>
> {<br>
> > @@ -4174,7 +4197,7 @@ static void renderDebugOptions(const ToolChain<br>
> &TC,<br>
> > const Driver &D,<br>
> ><br>
> >    // Decide how to render forward declarations of template<br>
> > instantiations.<br>
> >    // SCE wants full descriptions, others just get them in the name.<br>
> > -  if (DebuggerTuning == llvm::DebuggerKind::SCE)<br>
> > +  if (ForwardTemplateParams)<br>
> >      CmdArgs.push_back("-debug-forward-template-params");<br>
> ><br>
> >    // Do we need to explicitly import anonymous namespaces into the<br>
> parent<br>
> ><br>
> > diff  --git a/clang/lib/Frontend/CompilerInvocation.cpp<br>
> > b/clang/lib/Frontend/CompilerInvocation.cpp<br>
> > index 10b2e96e8957..2368e6884188 100644<br>
> > --- a/clang/lib/Frontend/CompilerInvocation.cpp<br>
> > +++ b/clang/lib/Frontend/CompilerInvocation.cpp<br>
> > @@ -1411,6 +1411,14 @@ void CompilerInvocation::GenerateCodeGenArgs(<br>
> >                 llvm::DICompileUnit::DebugNameTableKind::Default))<br>
> >      GenerateArg(Args, OPT_gpubnames, SA);<br>
> ><br>
> > +  auto TNK = Opts.getDebugSimpleTemplateNames();<br>
> > +  if (TNK != codegenoptions::DebugTemplateNamesKind::Full) {<br>
> > +    if (TNK == codegenoptions::DebugTemplateNamesKind::Simple)<br>
> > +      GenerateArg(Args, OPT_gsimple_template_names_EQ, "simple", SA);<br>
> > +    if (TNK == codegenoptions::DebugTemplateNamesKind::Mangled)<br>
> > +      GenerateArg(Args, OPT_gsimple_template_names_EQ, "mangled", SA);<br>
> > +<br>
> > +  }<br>
> >    // ProfileInstrumentUsePath is marshalled automatically, no need to<br>
> > generate<br>
> >    // it or PGOUseInstrumentor.<br>
> ><br>
> > @@ -1685,6 +1693,12 @@ bool<br>
> > CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList<br>
> &Args,<br>
> >            : Args.hasArg(OPT_gpubnames)<br>
> >                  ? llvm::DICompileUnit::DebugNameTableKind::Default<br>
> >                  : llvm::DICompileUnit::DebugNameTableKind::None);<br>
> > +  if (const Arg *A = Args.getLastArg(OPT_gsimple_template_names_EQ)) {<br>
> > +    Opts.setDebugSimpleTemplateNames(<br>
> > +        StringRef(A->getValue()) == "simple"<br>
> > +            ? codegenoptions::DebugTemplateNamesKind::Simple<br>
> > +            : codegenoptions::DebugTemplateNamesKind::Mangled);<br>
> > +  }<br>
> ><br>
> >    if (!Opts.ProfileInstrumentUsePath.empty())<br>
> >      setPGOUseInstrumentor(Opts, Opts.ProfileInstrumentUsePath);<br>
> ><br>
> > diff  --git a/clang/test/Driver/debug-options.c<br>
> b/clang/test/Driver/debug-<br>
> > options.c<br>
> > index 4bf2c202dacf..5f652cb49b71 100644<br>
> > --- a/clang/test/Driver/debug-options.c<br>
> > +++ b/clang/test/Driver/debug-options.c<br>
> > @@ -435,3 +435,15 @@<br>
> ><br>
> >  // DIRECTORY-NOT: "-fno-dwarf-directory-asm"<br>
> >  // NODIRECTORY: "-fno-dwarf-directory-asm"<br>
> > +<br>
> > +// RUN: %clang -### -target x86_64 -c -g -gsimple-template-names %s<br>
> 2>&1<br>
> > | FileCheck --check-prefix=SIMPLE_TEMP_NAMES %s<br>
> > +// RUN: %clang -### -target x86_64 -c -g -gsimple-template-names=simple<br>
> > %s 2>&1 | FileCheck --check-prefix=SIMPLE_TEMP_NAMES %s<br>
> > +// SIMPLE_TEMP_NAMES: -gsimple-template-names=simple<br>
> > +// SIMPLE_TEMP_NAMES: -debug-forward-template-params<br>
> > +// RUN: %clang -### -target x86_64 -c -g -gsimple-template-<br>
> names=mangled<br>
> > %s 2>&1 | FileCheck --check-prefix=MANGLED_TEMP_NAMES %s<br>
> > +// MANGLED_TEMP_NAMES: -gsimple-template-names=mangled<br>
> > +// MANGLED_TEMP_NAMES: -debug-forward-template-params<br>
> > +// RUN: %clang -### -target x86_64 -c -g %s 2>&1 | FileCheck --check-<br>
> > prefix=FULL_TEMP_NAMES --implicit-check-not=debug-forward-template-<br>
> params<br>
> > %s<br>
> > +// FULL_TEMP_NAMES-NOT: -gsimple-template-names<br>
> > +// RUN: %clang -### -target x86_64 -c -g -gsimple-template-names=other<br>
> %s<br>
> > 2>&1 | FileCheck --check-prefix=SIMPLE_TEMP_OTHER %s<br>
> > +// SIMPLE_TEMP_OTHER: error: unsupported argument 'other' to option<br>
> > 'gsimple-template-names='<br>
> ><br>
> ><br>
> ><br>
> > _______________________________________________<br>
> > cfe-commits mailing list<br>
> > <a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
> > <a href="https://urldefense.com/v3/__https://lists.llvm.org/cgi-" rel="noreferrer" target="_blank">https://urldefense.com/v3/__https://lists.llvm.org/cgi-</a><br>
> > bin/mailman/listinfo/cfe-commits__;!!JmoZiZGBv3RvKRSx!sx4rLw3CFwdj-<br>
> > rfDEK1Ah3HnANZSLOpXYFIcie1Oiyili8LKwFHxFk-g0F5_mAxhFw$<br>
</blockquote></div></div>