| // 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 |