summaryrefslogtreecommitdiffstats
path: root/test/CXX/expr/p10-0x.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/CXX/expr/p10-0x.cpp')
-rw-r--r--test/CXX/expr/p10-0x.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/test/CXX/expr/p10-0x.cpp b/test/CXX/expr/p10-0x.cpp
new file mode 100644
index 0000000..564df88
--- /dev/null
+++ b/test/CXX/expr/p10-0x.cpp
@@ -0,0 +1,46 @@
+// RUN: %clang_cc1 -emit-llvm -triple x86_64-pc-linux-gnu %s -o - -std=c++11 | FileCheck %s
+
+volatile int g1;
+struct S {
+ volatile int a;
+} g2;
+
+volatile int& refcall();
+
+// CHECK: define void @_Z2f1PViPV1S
+void f1(volatile int *x, volatile S* s) {
+ // We should perform the load in these cases.
+ // CHECK: load volatile i32*
+ (*x);
+ // CHECK: load volatile i32*
+ __extension__ g1;
+ // CHECK: load volatile i32*
+ s->a;
+ // CHECK: load volatile i32*
+ g2.a;
+ // CHECK: load volatile i32*
+ s->*(&S::a);
+ // CHECK: load volatile i32*
+ // CHECK: load volatile i32*
+ x[0], 1 ? x[0] : *x;
+
+ // CHECK: load volatile i32*
+ // CHECK: load volatile i32*
+ // CHECK: load volatile i32*
+ *x ?: *x;
+
+ // CHECK: load volatile i32*
+ ({ *x; });
+
+ // CHECK-NOT: load volatile
+ // CHECK: ret
+}
+
+// CHECK: define void @_Z2f2PVi
+// CHECK-NOT: load volatile
+// CHECK: ret
+void f2(volatile int *x) {
+ // We shouldn't perform the load in these cases.
+ refcall();
+ 1 ? refcall() : *x;
+}
OpenPOWER on IntegriCloud