[clang] Handle __declspec() attributes in using
[llvm-project.git] / clang / test / Parser / ms-inline-asm.c
blobb5cb5ba4ee5c407a9f044174e4fff28203c16096
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
6 #define M __asm int 0x2c
7 #define M2 int
9 void t1(void) { M }
10 void t2(void) { __asm int 2ch }
11 void t3(void) { __asm M2 2ch }
12 void t4(void) { __asm mov eax, fs:[10h] }
13 void t5(void) {
14 __asm {
15 int 0x2c ; } asm comments are fun! }{
17 __asm {}
19 int t6(void) {
20 __asm int 3 ; } comments for single-line asm
21 __asm {}
23 __asm int 4
24 return 10;
26 void t7(void) {
27 __asm {
28 push ebx
29 mov ebx, 07h
30 pop ebx
33 void t8(void) {
34 __asm nop __asm nop __asm nop
36 void t9(void) {
37 __asm nop __asm nop ; __asm nop
39 void t10(void) {
40 __asm {
41 mov eax, 0
42 __asm {
43 mov eax, 1
45 mov eax, 2
50 void t11(void) {
51 do { __asm mov eax, 0 __asm { __asm mov edx, 1 } } while(0);
53 void t12(void) {
54 __asm jmp label // expected-error {{use of undeclared label 'label'}}
56 void t13(void) {
57 __asm m{o}v eax, ebx // expected-error {{unknown token in expression}}
60 void t14(void) {
61 enum { A = 1, B };
62 __asm mov eax, offset A // expected-error {{offset operator cannot yet handle constants}}
65 // GH57791
66 typedef struct S {
67 unsigned bf1:1; // expected-note {{bit-field is declared here}}
68 unsigned bf2:1; // expected-note {{bit-field is declared here}}
69 } S;
70 void t15(S s) {
71 __asm {
72 mov eax, s.bf1 // expected-error {{an inline asm block cannot have an operand which is a bit-field}}
73 mov s.bf2, eax // expected-error {{an inline asm block cannot have an operand which is a bit-field}}
77 int t_fail(void) { // expected-note {{to match this}}
78 __asm
79 __asm { // expected-error 3 {{expected}} expected-note {{to match this}}