1*67e74705SXin Li // RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin10 | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li // PR5392 4*67e74705SXin Li namespace PR5392 { 5*67e74705SXin Li struct A 6*67e74705SXin Li { 7*67e74705SXin Li static int a; 8*67e74705SXin Li }; 9*67e74705SXin Li 10*67e74705SXin Li A a1; f()11*67e74705SXin Livoid f() 12*67e74705SXin Li { 13*67e74705SXin Li // CHECK: store i32 10, i32* @_ZN6PR53921A1aE 14*67e74705SXin Li a1.a = 10; 15*67e74705SXin Li // CHECK: store i32 20, i32* @_ZN6PR53921A1aE 16*67e74705SXin Li A().a = 20; 17*67e74705SXin Li } 18*67e74705SXin Li 19*67e74705SXin Li } 20*67e74705SXin Li 21*67e74705SXin Li struct A { 22*67e74705SXin Li A(); 23*67e74705SXin Li ~A(); 24*67e74705SXin Li enum E { Foo }; 25*67e74705SXin Li }; 26*67e74705SXin Li 27*67e74705SXin Li A *g(); 28*67e74705SXin Li f(A * a)29*67e74705SXin Livoid f(A *a) { 30*67e74705SXin Li A::E e1 = a->Foo; 31*67e74705SXin Li 32*67e74705SXin Li // CHECK: call %struct.A* @_Z1gv() 33*67e74705SXin Li A::E e2 = g()->Foo; 34*67e74705SXin Li // CHECK: call void @_ZN1AC1Ev( 35*67e74705SXin Li // CHECK: call void @_ZN1AD1Ev( 36*67e74705SXin Li A::E e3 = A().Foo; 37*67e74705SXin Li } 38*67e74705SXin Li 39*67e74705SXin Li namespace test3 { 40*67e74705SXin Li struct A { 41*67e74705SXin Li static int foo(); 42*67e74705SXin Li }; f()43*67e74705SXin Liint f() { 44*67e74705SXin Li return A().foo(); 45*67e74705SXin Li } 46*67e74705SXin Li } 47*67e74705SXin Li 48*67e74705SXin Li namespace test4 { 49*67e74705SXin Li struct A { 50*67e74705SXin Li int x; 51*67e74705SXin Li }; 52*67e74705SXin Li struct B { 53*67e74705SXin Li int x; 54*67e74705SXin Li void foo(); 55*67e74705SXin Li }; 56*67e74705SXin Li struct C : A, B { 57*67e74705SXin Li }; 58*67e74705SXin Li 59*67e74705SXin Li extern C *c_ptr; 60*67e74705SXin Li 61*67e74705SXin Li // CHECK-LABEL: define i32 @_ZN5test44testEv() test()62*67e74705SXin Li int test() { 63*67e74705SXin Li // CHECK: load {{.*}} @_ZN5test45c_ptrE 64*67e74705SXin Li // CHECK-NEXT: bitcast 65*67e74705SXin Li // CHECK-NEXT: getelementptr 66*67e74705SXin Li // CHECK-NEXT: bitcast 67*67e74705SXin Li // CHECK-NEXT: call void @_ZN5test41B3fooEv 68*67e74705SXin Li c_ptr->B::foo(); 69*67e74705SXin Li 70*67e74705SXin Li // CHECK: load {{.*}} @_ZN5test45c_ptrE 71*67e74705SXin Li // CHECK-NEXT: bitcast 72*67e74705SXin Li // CHECK-NEXT: getelementptr 73*67e74705SXin Li // CHECK-NEXT: bitcast 74*67e74705SXin Li // CHECK-NEXT: getelementptr 75*67e74705SXin Li // CHECK-NEXT: store i32 5 76*67e74705SXin Li c_ptr->B::x = 5; 77*67e74705SXin Li 78*67e74705SXin Li // CHECK: load {{.*}} @_ZN5test45c_ptrE 79*67e74705SXin Li // CHECK-NEXT: bitcast 80*67e74705SXin Li // CHECK-NEXT: getelementptr 81*67e74705SXin Li // CHECK-NEXT: bitcast 82*67e74705SXin Li // CHECK-NEXT: getelementptr 83*67e74705SXin Li // CHECK-NEXT: load i32, i32* 84*67e74705SXin Li return c_ptr->B::x; 85*67e74705SXin Li } 86*67e74705SXin Li } 87