1 // REQUIRES: x86-registered-target 2 // RUN: %clang -target i386-apple-darwin -std=c++11 -fblocks -Wframe-larger-than=70 -Wno-stdlibcxx-not-found -Xclang -verify -o /dev/null -c %s 3 // RUN: %clang -target i386-apple-darwin -std=c++11 -fblocks -Wframe-larger-than=70 -Wno-stdlibcxx-not-found -Xclang -verify -o /dev/null -c %s -DIS_SYSHEADER 4 5 // Test that: 6 // * The driver passes the option through to the backend. 7 // * The frontend diagnostic handler 'demangles' and resolves the correct function definition. 8 9 // Test that link invocations don't emit an "argument unused during compilation" diagnostic. 10 // RUN: touch %t.o 11 // RUN: %clang -Werror -Wno-msvc-not-found -Wno-liblto -Wframe-larger-than=0 %t.o -### 2>&1 | not grep ' error: ' 12 13 // TODO: Support rich backend diagnostics for Objective-C methods. 14 15 // Backend diagnostics aren't suppressed in system headers because such results 16 // are significant and actionable. 17 #ifdef IS_HEADER 18 19 #ifdef IS_SYSHEADER 20 #pragma clang system_header 21 #endif 22 23 extern void doIt(char *); 24 frameSizeWarning(int,int)25void frameSizeWarning(int, int) {} 26 27 void frameSizeWarning(); 28 frameSizeWarning()29void frameSizeWarning() { // expected-warning-re {{stack frame size ({{[0-9]+}}) exceeds limit ({{[0-9]+}}) in function 'frameSizeWarning'}} 30 char buffer[80]; 31 doIt(buffer); 32 } 33 34 void frameSizeWarning(); 35 frameSizeWarning(int)36void frameSizeWarning(int) {} 37 38 #pragma GCC diagnostic push 39 #pragma GCC diagnostic ignored "-Wframe-larger-than" frameSizeWarningIgnored()40void frameSizeWarningIgnored() { 41 char buffer[80]; 42 doIt(buffer); 43 } 44 #pragma GCC diagnostic pop 45 frameSizeLocalClassWarning()46void frameSizeLocalClassWarning() { 47 struct S { 48 S() { // expected-warning-re {{stack frame size ({{[0-9]+}}) exceeds limit ({{[0-9]+}}) in function 'frameSizeLocalClassWarning()::S::S'}} 49 char buffer[80]; 50 doIt(buffer); 51 } 52 }; 53 S(); 54 } 55 frameSizeLambdaWarning()56void frameSizeLambdaWarning() { 57 auto fn = 58 []() { // expected-warning-re {{stack frame size ({{[0-9]+}}) exceeds limit ({{[0-9]+}}) in lambda expression}} 59 char buffer[80]; 60 doIt(buffer); 61 }; 62 fn(); 63 } 64 frameSizeBlocksWarning()65void frameSizeBlocksWarning() { 66 auto fn = 67 ^() { // expected-warning-re {{stack frame size ({{[0-9]+}}) exceeds limit ({{[0-9]+}}) in block literal}} 68 char buffer[80]; 69 doIt(buffer); 70 }; 71 fn(); 72 } 73 74 #else 75 76 #define IS_HEADER 77 #include __FILE__ 78 #endif 79