1fb8d02b1SAlp Toker // REQUIRES: x86-registered-target 21f79297eSAlex Lorenz // 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 31f79297eSAlex Lorenz // 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 4fb8d02b1SAlp Toker 5fb8d02b1SAlp Toker // Test that: 6fb8d02b1SAlp Toker // * The driver passes the option through to the backend. 7fb8d02b1SAlp Toker // * The frontend diagnostic handler 'demangles' and resolves the correct function definition. 8fb8d02b1SAlp Toker 9e81b42fdSAlp Toker // Test that link invocations don't emit an "argument unused during compilation" diagnostic. 10e81b42fdSAlp Toker // RUN: touch %t.o 1100c5343dSZachary Turner // RUN: %clang -Werror -Wno-msvc-not-found -Wno-liblto -Wframe-larger-than=0 %t.o -### 2>&1 | not grep ' error: ' 12e81b42fdSAlp Toker 13fb8d02b1SAlp Toker // TODO: Support rich backend diagnostics for Objective-C methods. 14fb8d02b1SAlp Toker 151e58f3aaSAlp Toker // Backend diagnostics aren't suppressed in system headers because such results 161e58f3aaSAlp Toker // are significant and actionable. 171e58f3aaSAlp Toker #ifdef IS_HEADER 181e58f3aaSAlp Toker 191e58f3aaSAlp Toker #ifdef IS_SYSHEADER 201e58f3aaSAlp Toker #pragma clang system_header 211e58f3aaSAlp Toker #endif 221e58f3aaSAlp Toker 23fb8d02b1SAlp Toker extern void doIt(char *); 24fb8d02b1SAlp Toker frameSizeWarning(int,int)25fb8d02b1SAlp Tokervoid frameSizeWarning(int, int) {} 26fb8d02b1SAlp Toker 27fb8d02b1SAlp Toker void frameSizeWarning(); 28fb8d02b1SAlp Toker frameSizeWarning()29*25682868SArthur Eubanksvoid frameSizeWarning() { // expected-warning-re {{stack frame size ({{[0-9]+}}) exceeds limit ({{[0-9]+}}) in 'frameSizeWarning()'}} 30fb8d02b1SAlp Toker char buffer[80]; 31fb8d02b1SAlp Toker doIt(buffer); 32fb8d02b1SAlp Toker } 33fb8d02b1SAlp Toker 34fb8d02b1SAlp Toker void frameSizeWarning(); 35fb8d02b1SAlp Toker frameSizeWarning(int)36fb8d02b1SAlp Tokervoid frameSizeWarning(int) {} 37fb8d02b1SAlp Toker 38d0847341SAlp Toker #pragma GCC diagnostic push 396aaf4fa2SRichard Smith #pragma GCC diagnostic ignored "-Wframe-larger-than" frameSizeWarningIgnored()40d0847341SAlp Tokervoid frameSizeWarningIgnored() { 41d0847341SAlp Toker char buffer[80]; 42d0847341SAlp Toker doIt(buffer); 43d0847341SAlp Toker } 44d0847341SAlp Toker #pragma GCC diagnostic pop 45d0847341SAlp Toker frameSizeLocalClassWarning()46fb8d02b1SAlp Tokervoid frameSizeLocalClassWarning() { 47fb8d02b1SAlp Toker struct S { 48*25682868SArthur Eubanks S() { // expected-warning-re {{stack frame size ({{[0-9]+}}) exceeds limit ({{[0-9]+}}) in 'frameSizeLocalClassWarning()::S::S()'}} 49fb8d02b1SAlp Toker char buffer[80]; 50fb8d02b1SAlp Toker doIt(buffer); 51fb8d02b1SAlp Toker } 52fb8d02b1SAlp Toker }; 53fb8d02b1SAlp Toker S(); 54fb8d02b1SAlp Toker } 55fb8d02b1SAlp Toker frameSizeLambdaWarning()56fb8d02b1SAlp Tokervoid frameSizeLambdaWarning() { 57fb8d02b1SAlp Toker auto fn = 58*25682868SArthur Eubanks []() { // expected-warning-re {{stack frame size ({{[0-9]+}}) exceeds limit ({{[0-9]+}}) in 'frameSizeLambdaWarning()::$_0::operator()() const'}} 59fb8d02b1SAlp Toker char buffer[80]; 60fb8d02b1SAlp Toker doIt(buffer); 61fb8d02b1SAlp Toker }; 62fb8d02b1SAlp Toker fn(); 63fb8d02b1SAlp Toker } 64fb8d02b1SAlp Toker frameSizeBlocksWarning()65fb8d02b1SAlp Tokervoid frameSizeBlocksWarning() { 66fb8d02b1SAlp Toker auto fn = 67*25682868SArthur Eubanks ^() { // expected-warning-re {{stack frame size ({{[0-9]+}}) exceeds limit ({{[0-9]+}}) in 'invocation function for block in frameSizeBlocksWarning()'}} 68fb8d02b1SAlp Toker char buffer[80]; 69fb8d02b1SAlp Toker doIt(buffer); 70fb8d02b1SAlp Toker }; 71fb8d02b1SAlp Toker fn(); 72fb8d02b1SAlp Toker } 731e58f3aaSAlp Toker 741e58f3aaSAlp Toker #else 751e58f3aaSAlp Toker 761e58f3aaSAlp Toker #define IS_HEADER 771e58f3aaSAlp Toker #include __FILE__ 781e58f3aaSAlp Toker #endif 79