[PATCH] D103928: [IR] make -warn-frame-size into a module attr

Richard Smith - zygoloid via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 9 16:29:42 PDT 2021


rsmith added inline comments.


================
Comment at: clang/include/clang/Driver/Options.td:2575-2581
 // These "special" warning flags are effectively processed as f_Group flags by the driver:
 // Just silence warnings about -Wlarger-than for now.
 def Wlarger_than_EQ : Joined<["-"], "Wlarger-than=">, Group<clang_ignored_f_Group>;
 def Wlarger_than_ : Joined<["-"], "Wlarger-than-">, Alias<Wlarger_than_EQ>;
-def Wframe_larger_than_EQ : Joined<["-"], "Wframe-larger-than=">, Group<f_Group>, Flags<[NoXarchOption]>;
+def Wframe_larger_than_EQ : Joined<["-"], "Wframe-larger-than=">,
+  Group<f_Group>, Flags<[NoXarchOption,CC1Option]>,
+  MarshallingInfoInt<CodeGenOpts<"WarnStackSize">, "UINT_MAX">;
----------------
nickdesaulniers wrote:
> @rsmith I wasn't super sure about this hunk of the diff.  Should I not be reusing the same flag between the Frontend and the Driver? (The Driver comes after the Frontend, IIUC? Is that right?)
(The driver comes before the frontend: the driver is the user-facing GCC-compatible `clang` binary, and the frontend is the `-cc1` interface.)

What we do in other cases is to translate the driver-level (user-facing) warning flag into multiple frontend flags:

* The driver-level flag `-Wwrite-strings` (in C) gets mapped into the frontend-level flags `-Wwrite-strings -fconst-strings`, where `-Wwrite-strings` only controls whether the warning is shown, and `-fconst-strings` only controls whether string literals have type `char[N]` or `const char[N]`.
* The driver-level flag `-Wdeprecated` (in C++) gets mapped into the frontend-level flags `-Wdeprecated -fdeprecated-macro`, where `-Wdeprecated` only controls whether the warning is shown, and `-fdeprecated-macro` only controls whether `__DEPRECATED` is implicitly defined by the preprocessor.

So I think the expected strategy here would probably be that the driver-level flag `-Wframe-larger-than=N` would get mapped into the frontend-level flags `-Wframe-larger-than -fsomething=N`, where `-Wframe-larger-than` only controls whether the warning is shown, and `-fsomething=N` sets the level of stack usage at which the backend triggers the warning.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D103928



More information about the llvm-commits mailing list