jansvoboda11 added a comment.

Got rid of `{Warnings,Remarks}AsWritten` entirely.



================
Comment at: clang/lib/Frontend/CompilerInvocation.cpp:745
+
+    A->render(Args, Rendered);
   }
----------------
dexonsmith wrote:
> It's not obvious why this renders the args instead of calling 
> `A->getAsString()` to get the literal command-line argument and putting it 
> directly in DiagnosticsAsWritten. If that'll work, I suggest switching to 
> that, since it's a bit more straightforward; if there's some reason you can't 
> do that, please leave a comment explaining why.
I removed `DiagnosticsAsWritten` completely.

Previously, the code looped over `A->getValues()`, which gave me the impression 
it handles a flag that might indeed have multiple values (e.g. 
`-Wsomething=a,b,c`). If the code only stored `{a,b,c}` into `Diagnostics`, 
`GenerateDiagnosticArgs` could never reconstruct the original argument.

However, after looking closely at all `-W` and `-R` options, this never happens 
and `A->getValues()` always has exactly one element. I've refactored the code 
and clarified the comment for the branch above.


================
Comment at: clang/lib/Frontend/CompilerInvocation.cpp:2230-2240
+  for (const auto &Warning : Opts.WarningsAsWritten) {
+    // This option also maps to UndefPrefixes that generates it automatically.
+    if (StringRef(Warning).startswith("-Wundef-prefix="))
+      continue;
+    // TODO: Consider ignoring '-Wno-rewrite-macros' that maps to
+    // NoRewriteMacros.
+    Args.push_back(SA(Warning));
----------------
dexonsmith wrote:
> Does this mean that if some client is programmatically modifying the 
> `Warnings` array (which is what `CompilerInstance` reads) they need to also 
> update `WarningsAsWritten` array identically to get command-line generation 
> to work?
> 
> If so, then this is a bit non-obvious / error-prone. Maybe these can 
> encapsulated together:
> ```
> struct DiagnosticArg {
>   std::string Name;
>   std::string AsWritten;
> };
> std::vector<DiagnosticArg> Warnings;
> std::vector<DiagnosticArg> Remarks;
> ```
I double-checked and managed to get rid of this entirely, see the other comment.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D96274

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

Reply via email to