1 // REQUIRES: x86-registered-target
2 // Play around with backend reporting:
3 // _REGULAR_: Regular behavior, no warning switch enabled.
4 // _PROMOTE_: Promote warning to error.
5 // _IGNORE_: Drop backend warning.
6 //
7 // RUN: not %clang_cc1 %s -mllvm -warn-stack-size=0 -no-integrated-as -S -o - -triple=i386-apple-darwin 2> %t.err
8 // RUN: FileCheck < %t.err %s --check-prefix=REGULAR --check-prefix=ASM
9 // 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
10 // RUN: FileCheck < %t.err %s --check-prefix=PROMOTE --check-prefix=ASM
11 // 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
12 // RUN: FileCheck < %t.err %s --check-prefix=IGNORE --check-prefix=ASM
13 //
14 // RUN: %clang_cc1 %s -S -o - -triple=i386-apple-darwin -verify -no-integrated-as
15 
16 extern void doIt(char *);
17 
18 // REGULAR: warning: stack frame size of {{[0-9]+}} bytes in function 'stackSizeWarning'
19 // PROMOTE: error: stack frame size of {{[0-9]+}} bytes in function 'stackSizeWarning'
20 // IGNORE-NOT: stack frame size of {{[0-9]+}} bytes in function 'stackSizeWarning'
stackSizeWarning()21 void stackSizeWarning() {
22   char buffer[80];
23   doIt(buffer);
24 }
25 
26 // ASM: inline assembly requires more registers than available
inlineAsmError(int x0,int x1,int x2,int x3,int x4,int x5,int x6,int x7,int x8,int x9)27 void inlineAsmError(int x0, int x1, int x2, int x3, int x4,
28                     int x5, int x6, int x7, int x8, int x9) {
29   __asm__("hello world": : "r" (x0),"r" (x1),"r" (x2),"r" (x3), // expected-error + {{inline assembly requires more registers than available}}
30           "r" (x4),"r" (x5),"r" (x6),"r" (x7),"r" (x8),"r" (x9));
31 }
32