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;
f()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
f(A * a)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 };
f()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: define i32 @_ZN5test44testEv()
test()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*
84 return c_ptr->B::x;
85 }
86 }
87