summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGen/x86-64-inline-asm.c
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2019-03-06 10:26:19 +0000
committerHans Wennborg <hans@hanshq.net>2019-03-06 10:26:19 +0000
commitdd1ea8abb791d274ae574a478937aa0e77cc405f (patch)
treeb1245fa18b95148a743b90909794e1b763b8c701 /clang/test/CodeGen/x86-64-inline-asm.c
parent2a0f2c5ef3330846149598220467d9f3c6e8b99c (diff)
downloadbcm5719-llvm-dd1ea8abb791d274ae574a478937aa0e77cc405f.tar.gz
bcm5719-llvm-dd1ea8abb791d274ae574a478937aa0e77cc405f.zip
Inline asm constraints: allow ICE-like pointers for the "n" constraint (PR40890)
Apparently GCC allows this, and there's code relying on it (see bug). The idea is to allow expression that would have been allowed if they were cast to int. So I based the code on how such a cast would be done (the CK_PointerToIntegral case in IntExprEvaluator::VisitCastExpr()). Differential Revision: https://reviews.llvm.org/D58821 llvm-svn: 355491
Diffstat (limited to 'clang/test/CodeGen/x86-64-inline-asm.c')
-rw-r--r--clang/test/CodeGen/x86-64-inline-asm.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/clang/test/CodeGen/x86-64-inline-asm.c b/clang/test/CodeGen/x86-64-inline-asm.c
index bb46eda633b..79c1bd95f38 100644
--- a/clang/test/CodeGen/x86-64-inline-asm.c
+++ b/clang/test/CodeGen/x86-64-inline-asm.c
@@ -1,6 +1,7 @@
// REQUIRES: x86-registered-target
// RUN: %clang_cc1 -triple x86_64 %s -S -o /dev/null -DWARN -verify
// RUN: %clang_cc1 -triple x86_64 %s -S -o /dev/null -Werror -verify
+// RUN: %clang_cc1 -triple x86_64-linux-gnu %s -S -o - | FileCheck %s
void f() {
asm("movaps %xmm3, (%esi, 2)");
// expected-note@1 {{instantiated into assembly here}}
@@ -15,3 +16,17 @@ static unsigned var[1] = {};
void g(void) { asm volatile("movd %%xmm0, %0"
:
: "m"(var)); }
+
+void pr40890(void) {
+ struct s {
+ int a, b;
+ } s;
+ __asm__ __volatile__("\n#define S_A abcd%0\n" : : "n"(&((struct s*)0)->a));
+ __asm__ __volatile__("\n#define S_B abcd%0\n" : : "n"(&((struct s*)0)->b));
+ __asm__ __volatile__("\n#define BEEF abcd%0\n" : : "n"((int*)0xdeadbeeeeeef));
+
+// CHECK-LABEL: pr40890
+// CHECK: #define S_A abcd$0
+// CHECK: #define S_B abcd$4
+// CHECK: #define BEEF abcd$244837814038255
+}
OpenPOWER on IntegriCloud