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