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