diff options
Diffstat (limited to 'test/CXX/expr/p10-0x.cpp')
-rw-r--r-- | test/CXX/expr/p10-0x.cpp | 46 |
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; +} |