| // 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, ptr @_ZN6PR53921A1aE | |
| a1.a = 10; | |
| // CHECK: store i32 20, ptr @_ZN6PR53921A1aE | |
| A().a = 20; | |
| } | |
| } | |
| struct A { | |
| A(); | |
| ~A(); | |
| enum E { Foo }; | |
| }; | |
| A *g(); | |
| void f(A *a) { | |
| A::E e1 = a->Foo; | |
| // CHECK: call noundef ptr @_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: getelementptr | |
| // CHECK-NEXT: call void @_ZN5test41B3fooEv | |
| c_ptr->B::foo(); | |
| // CHECK: load {{.*}} @_ZN5test45c_ptrE | |
| // CHECK-NEXT: getelementptr | |
| // CHECK-NEXT: getelementptr | |
| // CHECK-NEXT: store i32 5 | |
| c_ptr->B::x = 5; | |
| // CHECK: load {{.*}} @_ZN5test45c_ptrE | |
| // CHECK-NEXT: getelementptr | |
| // CHECK-NEXT: getelementptr | |
| // CHECK-NEXT: load i32, ptr | |
| return c_ptr->B::x; | |
| } | |
| } |