dblaikie added inline comments.

================
Comment at: clang/lib/CodeGen/CodeGenModule.cpp:5565
+    if (CGDebugInfo *DI = getModuleDebugInfo())
+      if (getCodeGenOpts().DebugUnusedTypes) {
+        QualType QT = getContext().getTypedefType(cast<TypedefNameDecl>(D));
----------------
nickdesaulniers wrote:
> dblaikie wrote:
> > Rather than testing DebugUnusedType for every call - might be best to add a 
> > "EmitUnusedType" function that tests the flag and does the emission? (same 
> > way EmitExplicitCastType already checks for a certain level of debug info 
> > before emitting)
> It can be; what I don't like about that approach is that we have to determine 
> the `QualType` here to pass in, at which point such function might just 
> return without doing anything. (ie. we have to do slightly more work in the 
> case where the debugging of unused types was *not* requested).  But that's a 
> minor nit and we can live with it?
I don't believe getting the QualType from a TypeDecl is an expensive 
operation/enough to try to avoid it here. If it is I'd rather have a 
"EmitUnusedType(TypeDecl*)" function, and then the conditional QualType 
retrieval could be in there, written once rather than several times. 


================
Comment at: clang/lib/Frontend/CompilerInvocation.cpp:768
   Opts.DebugFwdTemplateParams = Args.hasArg(OPT_debug_forward_template_params);
+  Opts.DebugUnusedTypes = Args.hasArg(OPT_eliminate_unused_debug_types_fno);
   Opts.EmbedSource = Args.hasArg(OPT_gembed_source);
----------------
dblaikie wrote:
> nickdesaulniers wrote:
> > nickdesaulniers wrote:
> > > dblaikie wrote:
> > > > Could this be rolled into the debug-info-kind? (a kind beyond 
> > > > "standalone")
> > > That sounds like a good idea.  Looking at the definition of 
> > > `DebugInfoKind` 
> > > (llvm/llvm-project/clang/include/clang/Basic/DebugInfoOptions.h), it 
> > > seems that `DebugInfoKind` is an `enum` that defines a "level" of debug 
> > > info to emit? Looking at the guard in `CGDebugInfo::EmitExplicitCastType` 
> > > (llvm/llvm-project/clang/lib/CodeGen/CGDebugInfo.cpp), it calls 
> > > `CodeGenOptions::hasReducedDebugInfo()` which does a comparison against a 
> > > certain level.  That seems to indicate the order of the enumerations is 
> > > important.  Do you have a suggestion what order I should add the new enum?
> > > 
> > > I'm guessing after `LimitedDebugInfo` or `DebugInfoConstructor`, but 
> > > before `FullDebugInfo`? (I find the name of the method 
> > > `hasReducedDebugInfo` confusing in that regard).
> > Ok, so I have a diff that implements this approach.  I feel like I should 
> > maybe publish it as a child commit to this one, to be able to more easily 
> > discuss it?
> > 
> > Two problems I run into:
> > 1. as alluded to in my previous response in this thread, `DebugInfoKind` is 
> > an enum that specifies a level.  It tends to "drag" other debug flags in 
> > based on the ordering.  Looking at extending the `switch` in 
> > `CGDebugInfo::CreateCompileUnit` (clang/lib/CodeGen/CGDebugInfo.cpp), it's 
> > not at all clear to me which we existing case should we choose?
> > 2. we want the flag `-fno-eliminate-unused-debug-types` to match GCC for 
> > compatibility.  We can additionally add a new debug info kind like 
> > `"standalone"` (clang/lib/Frontend/CompilerInvocation.cpp), but it's not 
> > clear how the two flags together should interact.
> > 
> > The suggestion for a new debug info kind feels like a recommendation to add 
> > a new "level" of debug info, but `-fno-eliminate-unused-debug-types` feels 
> > like it should be mutually exclusive of debug info kind? (I guess GCC does 
> > *require* `-g` with `-fno-eliminate-unused-debug-types`)
> > 
> > @dblaikie maybe you have more recommendations on this?
> This value would probably go "after" "full" (full isn't full enough, as 
> you've found - you need a mode that's even "fullerer")
> 
> Perhaps renaming "Full" to "Referenced" and then introducing this new kind as 
> the new "Full" or maybe under a somewhat different name to avoid ambiguity. 
> 
> Any suggestions on a less confusing name for "hasReducedDebugInfo"? (I think 
> it was basically "Has less than full debug info"... but, yep, it doesn't do 
> that at all - it's "HasTypeAndVariableDebugInfo" by the looks of it/by the 
> comment)
> Ok, so I have a diff that implements this approach. I feel like I should 
> maybe publish it as a child commit to this one, to be able to more easily 
> discuss it?
> 
> Two problems I run into:
> 
> 1. as alluded to in my previous response in this thread, DebugInfoKind is an 
> enum that specifies a level. It tends to "drag" other debug flags in based on 
> the ordering. Looking at extending the switch in 
> CGDebugInfo::CreateCompileUnit (clang/lib/CodeGen/CGDebugInfo.cpp), it's not 
> at all clear to me which we existing case should we choose?
> 2. we want the flag -fno-eliminate-unused-debug-types to match GCC for 
> compatibility. We can additionally add a new debug info kind like 
> "standalone" (clang/lib/Frontend/CompilerInvocation.cpp), but it's not clear 
> how the two flags together should interact.

I'm not suggesting adding a new driver-level flag for this, but implementing 
the GCC flag name in terms of the debug-info-kind. Probably by having 
"-fno-eliminate-unused-debug-types" override "-fstandalone-debug" - whichever 
comes later wins. Because they are part of a progression. Though admittedly 
that might get a smidge confusing about exactly whit no/yes versions of these 
two flags override each other - but I think that's inevitable confusion with 
the nature of these flags.

What does GCC do for its -f[no-]emit-class-debug-always (which is somewhat 
similar to -fstandalone-debug) V -f[no-]eliminate-unused-debug-types? I'm not 
sure we'll want to emulate the behavior exxactly, but it's probably a good 
place to start to see if there's an existing model that looks OK here.

> The suggestion for a new debug info kind feels like a recommendation to add a 
> new "level" of debug info, but -fno-eliminate-unused-debug-types feels like 
> it should be mutually exclusive of debug info kind? (I guess GCC does 
> *require* -g with -fno-eliminate-unused-debug-types)

Sorry, I'm not following here - perhaps you could explain in different words? 
At the driver/user level, "debug info kind" doesn't exist - there's flags like 
"-g", "-gmlt", "-fstandalone-debug", etc. That are mapped to debug-info-kind on 
the -cc1 command line. I'm suggesting "-fno-eliminate-unused-debug-types" is 
another of those driver flags that is taken into account when mapping down to 
the cc1 "debug info kind".


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D80242/new/

https://reviews.llvm.org/D80242



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to