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 
t1(void)9 void t1(void) { M }
t2(void)10 void t2(void) { __asm int 2ch }
t3(void)11 void t3(void) { __asm M2 2ch }
t4(void)12 void t4(void) { __asm mov eax, fs:[10h] }
t5()13 void t5() {
14   __asm {
15     int 0x2c ; } asm comments are fun! }{
16   }
17   __asm {}
18 }
19 int t6() {
20   __asm int 3 ; } comments for single-line asm
21   __asm {}
22 
23   __asm int 4
24   return 10;
25 }
26 void t7() {
27   __asm {
28     push ebx
29     mov ebx, 07h
30     pop ebx
31   }
32 }
33 void t8() {
34   __asm nop __asm nop __asm nop
35 }
36 void t9() {
37   __asm nop __asm nop ; __asm nop
38 }
39 void t10() {
40   __asm {
41     mov eax, 0
42     __asm {
43       mov eax, 1
44       {
45         mov eax, 2
46       }
47     }
48   }
49 }
50 void t11() {
51   do { __asm mov eax, 0 __asm { __asm mov edx, 1 } } while(0);
52 }
53 void t12() {
54   __asm jmp label // expected-error {{use of undeclared label 'label'}}
55 }
56 void t13() {
57   __asm m{o}v eax, ebx // expected-error {{unknown token in expression}}
58 }
59 
60 void t14() {
61   enum { A = 1, B };
62   __asm mov eax, offset A // expected-error {{offset operator cannot yet handle constants}}
63 }
64 
65 int t_fail() { // expected-note {{to match this}}
66   __asm
67   __asm { // expected-error 3 {{expected}} expected-note {{to match this}}
68