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