| Daniel Dunbar | a572887 | 2009-12-15 20:14:24 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin10 | FileCheck %s | 
| Anders Carlsson | 589f9e3 | 2009-11-07 23:16:50 +0000 | [diff] [blame] | 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 | } | 
| Anders Carlsson | a1b29a7 | 2009-11-23 21:56:41 +0000 | [diff] [blame] | 20 |  | 
 | 21 | struct A { | 
| Anders Carlsson | c102297 | 2009-11-24 16:57:33 +0000 | [diff] [blame] | 22 |   A(); | 
 | 23 |   ~A(); | 
| Anders Carlsson | a1b29a7 | 2009-11-23 21:56:41 +0000 | [diff] [blame] | 24 |   enum E { Foo }; | 
 | 25 | }; | 
 | 26 |  | 
| Anders Carlsson | c102297 | 2009-11-24 16:57:33 +0000 | [diff] [blame] | 27 | A *g(); | 
 | 28 |  | 
| Anders Carlsson | a1b29a7 | 2009-11-23 21:56:41 +0000 | [diff] [blame] | 29 | void f(A *a) { | 
| Anders Carlsson | c102297 | 2009-11-24 16:57:33 +0000 | [diff] [blame] | 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; | 
| Anders Carlsson | a1b29a7 | 2009-11-23 21:56:41 +0000 | [diff] [blame] | 37 | } | 
| Anders Carlsson | c102297 | 2009-11-24 16:57:33 +0000 | [diff] [blame] | 38 |  | 
| Eli Friedman | 9a14630 | 2009-11-26 06:08:14 +0000 | [diff] [blame] | 39 | namespace test3 { | 
 | 40 | struct A { | 
 | 41 |   static int foo(); | 
 | 42 | }; | 
 | 43 | int f() { | 
 | 44 |   return A().foo(); | 
 | 45 | } | 
 | 46 | } | 
| John McCall | 23cba80 | 2010-03-30 23:58:03 +0000 | [diff] [blame] | 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() | 
 | 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 | } |