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