56 lines · cpp
1// RUN: %clang_cc1 -emit-llvm -triple x86_64-pc-linux-gnu %s -o - -std=c++11 | FileCheck %s2 3volatile int g1;4struct S {5 volatile int a;6} g2;7 8volatile int& refcall();9 10// CHECK: define{{.*}} void @_Z2f1PViPV1S11void f1(volatile int *x, volatile S* s) {12 // We should perform the load in these cases.13 // CHECK: load volatile i32, ptr14 (*x);15 // CHECK: load volatile i32, ptr16 __extension__ g1;17 // CHECK: load volatile i32, ptr18 s->a;19 // CHECK: load volatile i32, ptr20 g2.a;21 // CHECK: load volatile i32, ptr22 s->*(&S::a);23 // CHECK: load volatile i32, ptr24 // CHECK: load volatile i32, ptr25 x[0], 1 ? x[0] : *x;26 27 // CHECK: load volatile i32, ptr28 // CHECK: load volatile i32, ptr29 // CHECK: load volatile i32, ptr30 *x ?: *x;31 32 // CHECK: load volatile i32, ptr33 ({ *x; });34 35 // CHECK-NOT: load volatile36 // CHECK: ret37}38 39// CHECK: define{{.*}} void @_Z2f2PVi40// CHECK-NOT: load volatile41// CHECK: ret42void f2(volatile int *x) {43 // We shouldn't perform the load in these cases.44 refcall();45 1 ? refcall() : *x;46}47 48// CHECK: define{{.*}} void @_Z2f3v()49// CHECK-NOT: load50// CHECK-NOT: memcpy51 52void f3(void) {53 volatile char a[10];54 a;55}56