43 lines · c
1// RUN: %clang_cc1 -fsyntax-only -verify %s2 3#if !__has_extension(gnu_asm)4#error Extension 'gnu_asm' should be available by default5#endif6 7void f1(void) {8 // PR7673: Some versions of GCC support an empty clobbers section.9 asm ("ret" : : :);10}11 12void f2(void) {13 asm("foo" : "=r" (a)); // expected-error {{use of undeclared identifier 'a'}}14 asm("foo" : : "r" (b)); // expected-error {{use of undeclared identifier 'b'}} 15 16 [[]] asm("");17 [[gnu::deprecated]] asm(""); // expected-warning {{'gnu::deprecated' attribute ignored}}18}19 20void a(void) __asm__(""); // expected-error {{cannot use an empty string literal in 'asm'}}21void a(void) {22 __asm__(""); // ok23}24 25__asm ; // expected-error {{expected '(' after 'asm'}}26 27// Don't crash on wide string literals in 'asm'.28int foo asm (L"bar"); // expected-error {{cannot use wide string literal in 'asm'}}29 30asm() // expected-error {{expected string literal in 'asm'}}31// expected-error@-1 {{expected ';' after top-level asm block}}32 33asm(; // expected-error {{expected string literal in 'asm'}}34 35asm("") // expected-error {{expected ';' after top-level asm block}}36 37// Unterminated asm strings at the end of the file were causing us to crash, so38// this needs to be last.39// expected-warning@+3 {{missing terminating '"' character}}40// expected-error@+2 {{expected string literal in 'asm'}}41// expected-error@+1 {{expected ';' after top-level asm block}}42asm("43