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