| // RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin10 | FileCheck %s |
| |
| // PR5392 |
| namespace PR5392 { |
| struct A |
| { |
| static int a; |
| }; |
| |
| A a1; |
| void f() |
| { |
| // CHECK: store i32 10, i32* @_ZN6PR53921A1aE |
| a1.a = 10; |
| // CHECK: store i32 20, i32* @_ZN6PR53921A1aE |
| A().a = 20; |
| } |
| |
| } |
| |
| struct A { |
| A(); |
| ~A(); |
| enum E { Foo }; |
| }; |
| |
| A *g(); |
| |
| void f(A *a) { |
| A::E e1 = a->Foo; |
| |
| // CHECK: call %struct.A* @_Z1gv() |
| A::E e2 = g()->Foo; |
| // CHECK: call void @_ZN1AC1Ev( |
| // CHECK: call void @_ZN1AD1Ev( |
| A::E e3 = A().Foo; |
| } |
| |
| namespace test3 { |
| struct A { |
| static int foo(); |
| }; |
| int f() { |
| return A().foo(); |
| } |
| } |
| |
| namespace test4 { |
| struct A { |
| int x; |
| }; |
| struct B { |
| int x; |
| void foo(); |
| }; |
| struct C : A, B { |
| }; |
| |
| extern C *c_ptr; |
| |
| // CHECK-LABEL: define i32 @_ZN5test44testEv() |
| int test() { |
| // CHECK: load {{.*}} @_ZN5test45c_ptrE |
| // CHECK-NEXT: bitcast |
| // CHECK-NEXT: getelementptr |
| // CHECK-NEXT: bitcast |
| // CHECK-NEXT: call void @_ZN5test41B3fooEv |
| c_ptr->B::foo(); |
| |
| // CHECK: load {{.*}} @_ZN5test45c_ptrE |
| // CHECK-NEXT: bitcast |
| // CHECK-NEXT: getelementptr |
| // CHECK-NEXT: bitcast |
| // CHECK-NEXT: getelementptr |
| // CHECK-NEXT: store i32 5 |
| c_ptr->B::x = 5; |
| |
| // CHECK: load {{.*}} @_ZN5test45c_ptrE |
| // CHECK-NEXT: bitcast |
| // CHECK-NEXT: getelementptr |
| // CHECK-NEXT: bitcast |
| // CHECK-NEXT: getelementptr |
| // CHECK-NEXT: load i32, i32* |
| return c_ptr->B::x; |
| } |
| } |