| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- // REQUIRES: x86-registered-target
- // RUN: %clang -target i386-apple-darwin -std=c++11 -fblocks -Wframe-larger-than=70 -Xclang -verify -o /dev/null -c %s
- // RUN: %clang -target i386-apple-darwin -std=c++11 -fblocks -Wframe-larger-than=70 -Xclang -verify -o /dev/null -c %s -DIS_SYSHEADER
- // Test that:
- // * The driver passes the option through to the backend.
- // * The frontend diagnostic handler 'demangles' and resolves the correct function definition.
- // Test that link invocations don't emit an "argument unused during compilation" diagnostic.
- // RUN: touch %t.o
- // RUN: %clang -Werror -Wframe-larger-than=0 %t.o -### 2>&1 | not grep ' error: '
- // TODO: Support rich backend diagnostics for Objective-C methods.
- // Backend diagnostics aren't suppressed in system headers because such results
- // are significant and actionable.
- #ifdef IS_HEADER
- #ifdef IS_SYSHEADER
- #pragma clang system_header
- #endif
- extern void doIt(char *);
- void frameSizeWarning(int, int) {}
- void frameSizeWarning();
- void frameSizeWarning() { // expected-warning-re {{stack frame size of {{[0-9]+}} bytes in function 'frameSizeWarning'}}
- char buffer[80];
- doIt(buffer);
- }
- void frameSizeWarning();
- void frameSizeWarning(int) {}
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wframe-larger-than="
- void frameSizeWarningIgnored() {
- char buffer[80];
- doIt(buffer);
- }
- #pragma GCC diagnostic pop
- #pragma GCC diagnostic push
- #ifndef IS_SYSHEADER
- // expected-warning@+2 {{unknown warning group '-Wframe-larger-than'}}
- #endif
- #pragma GCC diagnostic ignored "-Wframe-larger-than"
- #pragma GCC diagnostic pop
- void frameSizeLocalClassWarning() {
- struct S {
- S() { // expected-warning-re {{stack frame size of {{[0-9]+}} bytes in function 'frameSizeLocalClassWarning()::S::S'}}
- char buffer[80];
- doIt(buffer);
- }
- };
- S();
- }
- void frameSizeLambdaWarning() {
- auto fn =
- []() { // expected-warning-re {{stack frame size of {{[0-9]+}} bytes in lambda expression}}
- char buffer[80];
- doIt(buffer);
- };
- fn();
- }
- void frameSizeBlocksWarning() {
- auto fn =
- ^() { // expected-warning-re {{stack frame size of {{[0-9]+}} bytes in block literal}}
- char buffer[80];
- doIt(buffer);
- };
- fn();
- }
- #else
- #define IS_HEADER
- #include __FILE__
- #endif
|