1*fb8d02b1SAlp Toker // REQUIRES: x86-registered-target 2*fb8d02b1SAlp Toker // RUN: %clang -target i386-apple-darwin -std=c++11 -fblocks -Wframe-larger-than=70 -Xclang -verify -o /dev/null -c %s 3*fb8d02b1SAlp Toker 4*fb8d02b1SAlp Toker // Test that: 5*fb8d02b1SAlp Toker // * The driver passes the option through to the backend. 6*fb8d02b1SAlp Toker // * The frontend diagnostic handler 'demangles' and resolves the correct function definition. 7*fb8d02b1SAlp Toker 8*fb8d02b1SAlp Toker // TODO: Support rich backend diagnostics for Objective-C methods. 9*fb8d02b1SAlp Toker 10*fb8d02b1SAlp Toker extern void doIt(char *); 11*fb8d02b1SAlp Toker 12*fb8d02b1SAlp Toker void frameSizeWarning(int, int) {} 13*fb8d02b1SAlp Toker 14*fb8d02b1SAlp Toker void frameSizeWarning(); 15*fb8d02b1SAlp Toker 16*fb8d02b1SAlp Toker void frameSizeWarning() { // expected-warning-re {{stack frame size of {{[0-9]+}} bytes in function 'frameSizeWarning'}} 17*fb8d02b1SAlp Toker char buffer[80]; 18*fb8d02b1SAlp Toker doIt(buffer); 19*fb8d02b1SAlp Toker } 20*fb8d02b1SAlp Toker 21*fb8d02b1SAlp Toker void frameSizeWarning(); 22*fb8d02b1SAlp Toker 23*fb8d02b1SAlp Toker void frameSizeWarning(int) {} 24*fb8d02b1SAlp Toker 25*fb8d02b1SAlp Toker void frameSizeLocalClassWarning() { 26*fb8d02b1SAlp Toker struct S { 27*fb8d02b1SAlp Toker S() { // expected-warning-re {{stack frame size of {{[0-9]+}} bytes in function 'frameSizeLocalClassWarning()::S::S'}} 28*fb8d02b1SAlp Toker char buffer[80]; 29*fb8d02b1SAlp Toker doIt(buffer); 30*fb8d02b1SAlp Toker } 31*fb8d02b1SAlp Toker }; 32*fb8d02b1SAlp Toker S(); 33*fb8d02b1SAlp Toker } 34*fb8d02b1SAlp Toker 35*fb8d02b1SAlp Toker void frameSizeLambdaWarning() { 36*fb8d02b1SAlp Toker auto fn = 37*fb8d02b1SAlp Toker []() { // expected-warning-re {{stack frame size of {{[0-9]+}} bytes in lambda expression}} 38*fb8d02b1SAlp Toker char buffer[80]; 39*fb8d02b1SAlp Toker doIt(buffer); 40*fb8d02b1SAlp Toker }; 41*fb8d02b1SAlp Toker fn(); 42*fb8d02b1SAlp Toker } 43*fb8d02b1SAlp Toker 44*fb8d02b1SAlp Toker void frameSizeBlocksWarning() { 45*fb8d02b1SAlp Toker auto fn = 46*fb8d02b1SAlp Toker ^() { // expected-warning-re {{stack frame size of {{[0-9]+}} bytes in block literal}} 47*fb8d02b1SAlp Toker char buffer[80]; 48*fb8d02b1SAlp Toker doIt(buffer); 49*fb8d02b1SAlp Toker }; 50*fb8d02b1SAlp Toker fn(); 51*fb8d02b1SAlp Toker } 52