// 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;
  }
}
