diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2013-04-18 13:23:23 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2013-04-18 13:23:23 +0000 |
commit | 7ee3b9c0e4bcfec216d87b8e1127f8dc8312b827 (patch) | |
tree | 49c0e2c8b95e65cfcbad9e70f31d004e28b8ef88 /clang/test/Sema/asm.c | |
parent | 1a6cfb46e5a8aea721dd637528113e5b52764105 (diff) | |
download | bcm5719-llvm-7ee3b9c0e4bcfec216d87b8e1127f8dc8312b827.tar.gz bcm5719-llvm-7ee3b9c0e4bcfec216d87b8e1127f8dc8312b827.zip |
Reject asm output constraints that consist of modifiers only.
Fixes PR15759.
llvm-svn: 179756
Diffstat (limited to 'clang/test/Sema/asm.c')
-rw-r--r-- | clang/test/Sema/asm.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/clang/test/Sema/asm.c b/clang/test/Sema/asm.c index 2c600854bf8..c81f16a3875 100644 --- a/clang/test/Sema/asm.c +++ b/clang/test/Sema/asm.c @@ -130,3 +130,19 @@ void test14(struct S *s) { __asm("": : "a"(*s)); // expected-error {{dereference of pointer to incomplete type 'struct S'}} __asm("": "=a" (*s) :); // expected-error {{dereference of pointer to incomplete type 'struct S'}} } + +// PR15759. +double test15() { + double ret = 0; + __asm("0.0":"="(ret)); // expected-error {{invalid output constraint '=' in asm}} + __asm("0.0":"=&"(ret)); // expected-error {{invalid output constraint '=&' in asm}} + __asm("0.0":"+?"(ret)); // expected-error {{invalid output constraint '+?' in asm}} + __asm("0.0":"+!"(ret)); // expected-error {{invalid output constraint '+!' in asm}} + __asm("0.0":"+#"(ret)); // expected-error {{invalid output constraint '+#' in asm}} + __asm("0.0":"+*"(ret)); // expected-error {{invalid output constraint '+*' in asm}} + __asm("0.0":"=%"(ret)); // expected-error {{invalid output constraint '=%' in asm}} + __asm("0.0":"=,="(ret)); // expected-error {{invalid output constraint '=,=' in asm}} + __asm("0.0":"=,g"(ret)); // no-error + __asm("0.0":"=g"(ret)); // no-error + return ret; +} |