1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// REQUIRES: x86-registered-target 2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// Play around with backend reporting: 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// _REGULAR_: Regular behavior, no warning switch enabled. 4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// _PROMOTE_: Promote warning to error. 5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// _IGNORE_: Drop backend warning. 6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: not %clang_cc1 %s -mllvm -warn-stack-size=0 -no-integrated-as -S -o - -triple=i386-apple-darwin 2> %t.err 8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: FileCheck < %t.err %s --check-prefix=REGULAR --check-prefix=ASM 9ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// RUN: not %clang_cc1 %s -mllvm -warn-stack-size=0 -no-integrated-as -S -o - -triple=i386-apple-darwin -Werror=frame-larger-than= 2> %t.err 10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: FileCheck < %t.err %s --check-prefix=PROMOTE --check-prefix=ASM 11ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// RUN: not %clang_cc1 %s -mllvm -warn-stack-size=0 -no-integrated-as -S -o - -triple=i386-apple-darwin -Wno-frame-larger-than= 2> %t.err 12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: FileCheck < %t.err %s --check-prefix=IGNORE --check-prefix=ASM 13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 %s -S -o - -triple=i386-apple-darwin -verify -no-integrated-as 15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesextern void doIt(char *); 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 18ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// REGULAR: warning: stack frame size of {{[0-9]+}} bytes in function 'stackSizeWarning' 19ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// PROMOTE: error: stack frame size of {{[0-9]+}} bytes in function 'stackSizeWarning' 20ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// IGNORE-NOT: stack frame size of {{[0-9]+}} bytes in function 'stackSizeWarning' 21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid stackSizeWarning() { 22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines char buffer[80]; 23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines doIt(buffer); 24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// ASM: inline assembly requires more registers than available 27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid inlineAsmError(int x0, int x1, int x2, int x3, int x4, 28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines int x5, int x6, int x7, int x8, int x9) { 29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines __asm__("hello world": : "r" (x0),"r" (x1),"r" (x2),"r" (x3), // expected-error + {{inline assembly requires more registers than available}} 30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines "r" (x4),"r" (x5),"r" (x6),"r" (x7),"r" (x8),"r" (x9)); 31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 32