xref: /aosp_15_r20/external/clang/test/Parser/asm.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s
2*67e74705SXin Li 
f1()3*67e74705SXin Li void f1() {
4*67e74705SXin Li   // PR7673: Some versions of GCC support an empty clobbers section.
5*67e74705SXin Li   asm ("ret" : : :);
6*67e74705SXin Li }
7*67e74705SXin Li 
f2()8*67e74705SXin Li void f2() {
9*67e74705SXin Li   asm("foo" : "=r" (a)); // expected-error {{use of undeclared identifier 'a'}}
10*67e74705SXin Li   asm("foo" : : "r" (b)); // expected-error {{use of undeclared identifier 'b'}}
11*67e74705SXin Li 
12*67e74705SXin Li   asm const (""); // expected-warning {{ignored const qualifier on asm}}
13*67e74705SXin Li   asm volatile ("");
14*67e74705SXin Li   asm restrict (""); // expected-warning {{ignored restrict qualifier on asm}}
15*67e74705SXin Li   // FIXME: Once GCC supports _Atomic, check whether it allows this.
16*67e74705SXin Li   asm _Atomic (""); // expected-warning {{ignored _Atomic qualifier on asm}}
17*67e74705SXin Li }
18*67e74705SXin Li 
19*67e74705SXin Li 
20*67e74705SXin Li // rdar://5952468
21*67e74705SXin Li __asm ; // expected-error {{expected '(' after 'asm'}}
22*67e74705SXin Li 
23*67e74705SXin Li // <rdar://problem/10465079> - Don't crash on wide string literals in 'asm'.
24*67e74705SXin Li int foo asm (L"bar"); // expected-error {{cannot use wide string literal in 'asm'}}
25*67e74705SXin Li 
26*67e74705SXin Li asm() // expected-error {{expected string literal in 'asm'}}
27*67e74705SXin Li // expected-error@-1 {{expected ';' after top-level asm block}}
28*67e74705SXin Li 
29*67e74705SXin Li asm(; // expected-error {{expected string literal in 'asm'}}
30*67e74705SXin Li 
31*67e74705SXin Li asm("") // expected-error {{expected ';' after top-level asm block}}
32*67e74705SXin Li 
33*67e74705SXin Li // Unterminated asm strings at the end of the file were causing us to crash, so
34*67e74705SXin Li // this needs to be last. rdar://15624081
35*67e74705SXin Li // expected-warning@+3 {{missing terminating '"' character}}
36*67e74705SXin Li // expected-error@+2 {{expected string literal in 'asm'}}
37*67e74705SXin Li // expected-error@+1 {{expected ';' after top-level asm block}}
38*67e74705SXin Li asm("
39