blob: 564df8843a576d320a7e1640cbbaae3d1cf3e78e [file] [log] [blame]
Eli Friedmane26073c2012-05-24 22:04:19 +00001// RUN: %clang_cc1 -emit-llvm -triple x86_64-pc-linux-gnu %s -o - -std=c++11 | FileCheck %s
2
3volatile int g1;
4struct S {
5 volatile int a;
6} g2;
7
8volatile int& refcall();
9
10// CHECK: define void @_Z2f1PViPV1S
11void f1(volatile int *x, volatile S* s) {
12 // We should perform the load in these cases.
13 // CHECK: load volatile i32*
14 (*x);
15 // CHECK: load volatile i32*
16 __extension__ g1;
17 // CHECK: load volatile i32*
18 s->a;
19 // CHECK: load volatile i32*
20 g2.a;
21 // CHECK: load volatile i32*
22 s->*(&S::a);
23 // CHECK: load volatile i32*
24 // CHECK: load volatile i32*
25 x[0], 1 ? x[0] : *x;
26
27 // CHECK: load volatile i32*
28 // CHECK: load volatile i32*
29 // CHECK: load volatile i32*
30 *x ?: *x;
31
32 // CHECK: load volatile i32*
33 ({ *x; });
34
35 // CHECK-NOT: load volatile
36 // CHECK: ret
37}
38
39// CHECK: define void @_Z2f2PVi
40// CHECK-NOT: load volatile
41// CHECK: ret
42void f2(volatile int *x) {
43 // We shouldn't perform the load in these cases.
44 refcall();
45 1 ? refcall() : *x;
46}