1// REQUIRES: x86-registered-target
2// RUN: %clang_cc1 %s -triple i386-apple-darwin10 -verify -fasm-blocks
3// Disabling gnu inline assembly should have no effect on this testcase
4// RUN: %clang_cc1 %s -triple i386-apple-darwin10 -verify -fasm-blocks -fno-gnu-inline-asm
5
6#define M __asm int 0x2c
7#define M2 int
8
9void t1(void) { M }
10void t2(void) { __asm int 0x2c }
11void t3(void) { __asm M2 0x2c }
12void t4(void) { __asm mov eax, fs:[0x10] }
13void t5() {
14  __asm {
15    int 0x2c ; } asm comments are fun! }{
16  }
17  __asm {}
18}
19int t6() {
20  __asm int 3 ; } comments for single-line asm
21  __asm {}
22
23  __asm int 4
24  return 10;
25}
26void t7() {
27  __asm {
28    push ebx
29    mov ebx, 0x07
30    pop ebx
31  }
32}
33void t8() {
34  __asm nop __asm nop __asm nop
35}
36void t9() {
37  __asm nop __asm nop ; __asm nop
38}
39void t10() {
40  __asm {
41    mov eax, 0
42    __asm {
43      mov eax, 1
44      {
45        mov eax, 2
46      }
47    }
48  }
49}
50void t11() {
51  do { __asm mov eax, 0 __asm { __asm mov edx, 1 } } while(0);
52}
53void t12() {
54  __asm jmp label // expected-error {{use of undeclared label 'label'}}
55}
56void t13() {
57  __asm m{o}v eax, ebx // expected-error {{expected identifier}} expected-error {{use of undeclared label '{o}v eax, ebx'}}
58}
59
60int t_fail() { // expected-note {{to match this}}
61  __asm
62  __asm { // expected-error 3 {{expected}} expected-note {{to match this}}
63