blob: dabb010529a914fa4200a3d2f93fd0aa60343726 [file] [log] [blame]
Daniel Dunbar8fbe78f2009-12-15 20:14:24 +00001// RUN: %clang_cc1 -fsyntax-only -verify %s
Anders Carlsson091a0592007-11-21 23:27:34 +00002
3void f1() {
Chandler Carruth3c31aa32010-07-22 07:11:21 +00004 // PR7673: Some versions of GCC support an empty clobbers section.
5 asm ("ret" : : :);
Anders Carlsson091a0592007-11-21 23:27:34 +00006}
Anders Carlsson2e64d1a2008-02-09 19:57:29 +00007
8void f2() {
9 asm("foo" : "=r" (a)); // expected-error {{use of undeclared identifier 'a'}}
10 asm("foo" : : "r" (b)); // expected-error {{use of undeclared identifier 'b'}}
Richard Smith8e1ac332013-03-28 01:55:44 +000011
12 asm const (""); // expected-warning {{ignored const qualifier on asm}}
13 asm volatile ("");
14 asm restrict (""); // expected-warning {{ignored restrict qualifier on asm}}
15 // FIXME: Once GCC supports _Atomic, check whether it allows this.
16 asm _Atomic (""); // expected-warning {{ignored _Atomic qualifier on asm}}
Anders Carlsson2e64d1a2008-02-09 19:57:29 +000017}
Chris Lattnera120a522008-05-27 23:32:43 +000018
19
20// rdar://5952468
21__asm ; // expected-error {{expected '(' after 'asm'}}
22
Ted Kremenek65cdbf52011-12-02 00:35:46 +000023// <rdar://problem/10465079> - Don't crash on wide string literals in 'asm'.
24int foo asm (L"bar"); // expected-error {{cannot use wide string literal in 'asm'}}
25
Justin Bognerab403f42013-12-10 21:29:48 +000026asm() // expected-error {{expected string literal in 'asm'}}
27// expected-error@-1 {{expected ';' after top-level asm block}}
28
29asm(; // expected-error {{expected string literal in 'asm'}}
30
31asm("") // expected-error {{expected ';' after top-level asm block}}
32
33// Unterminated asm strings at the end of the file were causing us to crash, so
34// this needs to be last. rdar://15624081
35// expected-warning@+3 {{missing terminating '"' character}}
36// expected-error@+2 {{expected string literal in 'asm'}}
37// expected-error@+1 {{expected ';' after top-level asm block}}
38asm("