xref: /minix3/external/bsd/llvm/dist/clang/test/CXX/expr/p10-0x.cpp (revision 433d6423c39e34ec4b79c950597bb2d236f886be)
1 // RUN: %clang_cc1 -emit-llvm -triple x86_64-pc-linux-gnu %s -o - -std=c++11 | FileCheck %s
2 
3 volatile int g1;
4 struct S {
5   volatile int a;
6 } g2;
7 
8 volatile int& refcall();
9 
10 // CHECK: define void @_Z2f1PViPV1S
11 void 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
42 void f2(volatile int *x) {
43   // We shouldn't perform the load in these cases.
44   refcall();
45   1 ? refcall() : *x;
46 }
47