[PATCH] D102782: Add support for Warning Flag "-Wstack-usage="

Arthur O'Dwyer via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jun 9 08:34:40 PDT 2021


Quuxplusone added inline comments.


================
Comment at: clang/docs/ReleaseNotes.rst:79-80
 
+- ``-Wstack-usage=<byte-size>`` warn if stack usage of user functions might
+  exceed <byte-size>.
+
----------------
Does this mean:
- Warn if the size of any single function's stack frame (including temporaries and local variables, but not parameters or return addresses) exceeds <byte-size>.
- Warn if the size of any single function's stack frame (including parameters and return addresses) exceeds <byte-size>.
- Warn if the total stack usage of the longest visible call chain in this translation unit might exceed <byte-size>.
?



================
Comment at: clang/test/Frontend/backend-stack-usage-diagnostic.c:19-23
+// WARN: warning: stack frame size of {{[0-9]+}} bytes in function 'test_square'
+// IGNORE-NOT:  stack frame size of {{[0-9]+}} bytes in function 'test_square'
+int test_square(int num) {
+  return num * num;
+}
----------------
This function has no "stack frame" in the usual sense of the word, because it's just
```
        movl    %edi, %eax
        imull   %edi, %eax
        ret
```
So am I correct to infer that the `-Wstack-usage=` option includes the size of the return address in its computations? So the stack usage of this function would be computed as "8 bytes" because the `callq` instruction pushes 8 bytes on the stack?
This seems eminently reasonable to me, but non-obvious, and should get some user-facing documentation.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D102782



More information about the cfe-commits mailing list