llvm-project
79 строк · 1.8 Кб
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 2ch }
11void t3(void) { __asm M2 2ch }
12void t4(void) { __asm mov eax, fs:[10h] }
13void t5(void) {
14__asm {
15int 0x2c ; } asm comments are fun! }{
16}
17__asm {}
18}
19int t6(void) {
20__asm int 3 ; } comments for single-line asm
21__asm {}
22
23__asm int 4
24return 10;
25}
26void t7(void) {
27__asm {
28push ebx
29mov ebx, 07h
30pop ebx
31}
32}
33void t8(void) {
34__asm nop __asm nop __asm nop
35}
36void t9(void) {
37__asm nop __asm nop ; __asm nop
38}
39void t10(void) {
40__asm {
41mov eax, 0
42__asm {
43mov eax, 1
44{
45mov eax, 2
46}
47}
48}
49}
50void t11(void) {
51do { __asm mov eax, 0 __asm { __asm mov edx, 1 } } while(0);
52}
53void t12(void) {
54__asm jmp label // expected-error {{use of undeclared label 'label'}}
55}
56void t13(void) {
57__asm m{o}v eax, ebx // expected-error {{unknown token in expression}}
58}
59
60void t14(void) {
61enum { A = 1, B };
62__asm mov eax, offset A // expected-error {{offset operator cannot yet handle constants}}
63}
64
65// GH57791
66typedef struct S {
67unsigned bf1:1; // expected-note {{bit-field is declared here}}
68unsigned bf2:1; // expected-note {{bit-field is declared here}}
69} S;
70void t15(S s) {
71__asm {
72mov eax, s.bf1 // expected-error {{an inline asm block cannot have an operand which is a bit-field}}
73mov s.bf2, eax // expected-error {{an inline asm block cannot have an operand which is a bit-field}}
74}
75}
76
77int t_fail(void) { // expected-note {{to match this}}
78__asm
79__asm { // expected-error 3 {{expected}} expected-note {{to match this}}
80