1// 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} 47