Home | History | Annotate | Download | only in CodeGenCXX
      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