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