[PATCH] D80391: [Driver] Don't make -gsplit-dwarf imply -g2

David Blaikie via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Dec 7 17:41:29 PST 2020


dblaikie added inline comments.


================
Comment at: clang/lib/Driver/ToolChains/Clang.cpp:3718
+  } else
+    DwarfFission = DwarfFissionKind::None;
 
----------------
MaskRay wrote:
> dblaikie wrote:
> > Rather than undoing the DwarfFission uinitialization, instead could the DwarfFission initialization be rolled into the "if (gN_Group)" condition?
> I could add the OPT_g_Group check to `getDebugFissionKind`, but that would make the effects of -g0 and "no -g at all" into two places. Having the code here makes it closer to "how DebugInfoKind == codegenoptions::NoDebugInfo affects fission" above.
Sorry, I'm not following what you're suggesting/discussing. I wasn't meaning to suggest duplicating the OPT_g_Group check. 

Code something like:

```
if (const Arg *A = Args.getLastArg(options::OPT_g_Group)) {
  DebugInfoKind = codegenoptions::LimitedDebugInfo;

  Arg* SplitDWARFArg;
  DwarfFission = getDebugFissionKind(D, Args, SplitDWARFArg);

  if (DwarfFission != DwarfFissionKind::None &&
      !checkDebugInfoOption(SplitDWARFArg, Args, D, TC)) {
    DwarfFission = DwarfFissionKind::None;
    SplitDWARFInlining = false;
  }

  // If the last option explicitly specified a debug-info level, use it.
  if (checkDebugInfoOption(A, Args, D, TC) &&
      A->getOption().matches(options::OPT_gN_Group)) {
    DebugInfoKind = DebugLevelToInfoKind(*A);
    // For -g0 or -gline-tables-only, drop -gsplit-dwarf. This gets a bit more
    // complicated if you've disabled inline info in the skeleton CUs
    // (SplitDWARFInlining) - then there's value in composing split-dwarf and
    // line-tables-only, so let those compose naturally in that case.
    if (DebugInfoKind == codegenoptions::NoDebugInfo ||
        DebugInfoKind == codegenoptions::DebugDirectivesOnly ||
        (DebugInfoKind == codegenoptions::DebugLineTablesOnly &&
         SplitDWARFInlining))
      DwarfFission = DwarfFissionKind::None;
  }
}
```

This way, hopefully, there wouldn't be a period where DwarfFission is incorrectly set and has to be reverted to "None", making it less likely the incorrect value could be used accidentally


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D80391



More information about the cfe-commits mailing list