-
Justin Bogner authored
When parsing invalid top-level asm statements, we were ignoring the return code of the SkipUntil we used for recovery. This led to crashes when we hit the end of file and tried to continue parsing anyway. This fixes the crash and adds a couple of tests for parsing related problems. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@196961 91177308-0d34-0410-b5e6-96231b3b80d8
Justin Bogner authoredWhen parsing invalid top-level asm statements, we were ignoring the return code of the SkipUntil we used for recovery. This led to crashes when we hit the end of file and tried to continue parsing anyway. This fixes the crash and adds a couple of tests for parsing related problems. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@196961 91177308-0d34-0410-b5e6-96231b3b80d8
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
asm.c 1.42 KiB
// RUN: %clang_cc1 -fsyntax-only -verify %s
void f1() {
// PR7673: Some versions of GCC support an empty clobbers section.
asm ("ret" : : :);
}
void f2() {
asm("foo" : "=r" (a)); // expected-error {{use of undeclared identifier 'a'}}
asm("foo" : : "r" (b)); // expected-error {{use of undeclared identifier 'b'}}
asm const (""); // expected-warning {{ignored const qualifier on asm}}
asm volatile ("");
asm restrict (""); // expected-warning {{ignored restrict qualifier on asm}}
// FIXME: Once GCC supports _Atomic, check whether it allows this.
asm _Atomic (""); // expected-warning {{ignored _Atomic qualifier on asm}}
}
// rdar://5952468
__asm ; // expected-error {{expected '(' after 'asm'}}
// <rdar://problem/10465079> - Don't crash on wide string literals in 'asm'.
int foo asm (L"bar"); // expected-error {{cannot use wide string literal in 'asm'}}
asm() // expected-error {{expected string literal in 'asm'}}
// expected-error@-1 {{expected ';' after top-level asm block}}
asm(; // expected-error {{expected string literal in 'asm'}}
asm("") // expected-error {{expected ';' after top-level asm block}}
// Unterminated asm strings at the end of the file were causing us to crash, so
// this needs to be last. rdar://15624081
// expected-warning@+3 {{missing terminating '"' character}}
// expected-error@+2 {{expected string literal in 'asm'}}
// expected-error@+1 {{expected ';' after top-level asm block}}
asm("