summaryrefslogtreecommitdiffstats
path: root/test/Sema
diff options
context:
space:
mode:
authorMarina Yatsina <marina.yatsina@intel.com>2017-06-26 15:55:51 +0000
committerMarina Yatsina <marina.yatsina@intel.com>2017-06-26 15:55:51 +0000
commit0adbf0f7a59c7f701fb1aca07d0a57b317374b88 (patch)
treef0a75b6e225e576242097361b42b800da36b1489 /test/Sema
parent5a9269f4b211afe37cae3c9f59d0c8f21db1d1dc (diff)
[inline asm][gcc-compatiblity] "=i" output constraint support
Ignore ‘i’,’n’,’E’,’F’ as output constraints in inline assembly (gcc compatibility) Differential Revision: https://reviews.llvm.org/D31383 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@306297 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Sema')
-rw-r--r--test/Sema/asm.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/test/Sema/asm.c b/test/Sema/asm.c
index e49a1663a8..04b7cb19eb 100644
--- a/test/Sema/asm.c
+++ b/test/Sema/asm.c
@@ -160,6 +160,41 @@ double test15() {
return ret;
}
+void iOutputConstraint(int x){
+ __asm ("nop" : "=ir" (x) : :); // no-error
+ __asm ("nop" : "=ri" (x) : :); // no-error
+ __asm ("nop" : "=ig" (x) : :); // no-error
+ __asm ("nop" : "=im" (x) : :); // no-error
+ __asm ("nop" : "=imr" (x) : :); // no-error
+ __asm ("nop" : "=i" (x) : :); // expected-error{{invalid output constraint '=i' in asm}}
+ __asm ("nop" : "+i" (x) : :); // expected-error{{invalid output constraint '+i' in asm}}
+ __asm ("nop" : "=ii" (x) : :); // expected-error{{invalid output constraint '=ii' in asm}}
+ __asm ("nop" : "=nr" (x) : :); // no-error
+ __asm ("nop" : "=rn" (x) : :); // no-error
+ __asm ("nop" : "=ng" (x) : :); // no-error
+ __asm ("nop" : "=nm" (x) : :); // no-error
+ __asm ("nop" : "=nmr" (x) : :); // no-error
+ __asm ("nop" : "=n" (x) : :); // expected-error{{invalid output constraint '=n' in asm}}
+ __asm ("nop" : "+n" (x) : :); // expected-error{{invalid output constraint '+n' in asm}}
+ __asm ("nop" : "=nn" (x) : :); // expected-error{{invalid output constraint '=nn' in asm}}
+ __asm ("nop" : "=Fr" (x) : :); // no-error
+ __asm ("nop" : "=rF" (x) : :); // no-error
+ __asm ("nop" : "=Fg" (x) : :); // no-error
+ __asm ("nop" : "=Fm" (x) : :); // no-error
+ __asm ("nop" : "=Fmr" (x) : :); // no-error
+ __asm ("nop" : "=F" (x) : :); // expected-error{{invalid output constraint '=F' in asm}}
+ __asm ("nop" : "+F" (x) : :); // expected-error{{invalid output constraint '+F' in asm}}
+ __asm ("nop" : "=FF" (x) : :); // expected-error{{invalid output constraint '=FF' in asm}}
+ __asm ("nop" : "=Er" (x) : :); // no-error
+ __asm ("nop" : "=rE" (x) : :); // no-error
+ __asm ("nop" : "=Eg" (x) : :); // no-error
+ __asm ("nop" : "=Em" (x) : :); // no-error
+ __asm ("nop" : "=Emr" (x) : :); // no-error
+ __asm ("nop" : "=E" (x) : :); // expected-error{{invalid output constraint '=E' in asm}}
+ __asm ("nop" : "+E" (x) : :); // expected-error{{invalid output constraint '+E' in asm}}
+ __asm ("nop" : "=EE" (x) : :); // expected-error{{invalid output constraint '=EE' in asm}}
+}
+
// PR19837
struct foo {
int a;