// RUN: %clang_cc1 -std=c++11 -S -triple armv7-none-eabi -emit-llvm -o - %s | FileCheck %s

namespace reference {
  struct A {
    int i1, i2;
  };

  void single_init() {
    // No superfluous instructions allowed here, they could be
    // hiding extra temporaries.

    // CHECK: store i32 1, i32*
    // CHECK-NEXT: store i32* %{{.*}}, i32**
    const int &cri2a = 1;

    // CHECK-NEXT: store i32 1, i32*
    // CHECK-NEXT: store i32* %{{.*}}, i32**
    const int &cri1a = {1};

    // CHECK-NEXT: store i32 1, i32*
    int i = 1;
    // CHECK-NEXT: store i32* %{{.*}}, i32**
    int &ri1a = {i};

    // CHECK-NEXT: bitcast
    // CHECK-NEXT: memcpy
    A a{1, 2};
    // CHECK-NEXT: store %{{.*}}* %{{.*}}, %{{.*}}** %
    A &ra1a = {a};

    using T = A&;
    // CHECK-NEXT: store %{{.*}}* %{{.*}}, %{{.*}}** %
    A &ra1b = T{a};

    // CHECK-NEXT: ret
  }

  void reference_to_aggregate(int i) {
    // CHECK: getelementptr {{.*}}, i32 0, i32 0
    // CHECK-NEXT: store i32 1
    // CHECK-NEXT: getelementptr {{.*}}, i32 0, i32 1
    // CHECK-NEXT: %[[I1:.*]] = load i32, i32*
    // CHECK-NEXT: store i32 %[[I1]]
    // CHECK-NEXT: store %{{.*}}* %{{.*}}, %{{.*}}** %{{.*}}, align
    const A &ra1{1, i};

    // CHECK-NEXT: getelementptr inbounds [3 x i32], [3 x i32]* %{{.*}}, i{{32|64}} 0, i{{32|64}} 0
    // CHECK-NEXT: store i32 1
    // CHECK-NEXT: getelementptr inbounds i32, i32* %{{.*}}, i{{32|64}} 1
    // CHECK-NEXT: store i32 2
    // CHECK-NEXT: getelementptr inbounds i32, i32* %{{.*}}, i{{32|64}} 1
    // CHECK-NEXT: %[[I2:.*]] = load i32, i32*
    // CHECK-NEXT: store i32 %[[I2]]
    // CHECK-NEXT: store [3 x i32]* %{{.*}}, [3 x i32]** %{{.*}}, align
    const int (&arrayRef)[] = {1, 2, i};

    // CHECK: store %{{.*}}* @{{.*}}, %{{.*}}** %{{.*}}, align
    const A &constra1{1, 2};

    // CHECK-NEXT: store [3 x i32]* @{{.*}}, [3 x i32]** %{{.*}}, align
    const int (&constarrayRef)[] = {1, 2, 3};

    // CHECK-NEXT: ret
  }

  struct B {
    B();
    ~B();
  };

  void single_init_temp_cleanup()
  {
    // Ensure lifetime extension.

    // CHECK: call %"struct.reference::B"* @_ZN9reference1BC1Ev
    // CHECK-NEXT: store %{{.*}}* %{{.*}}, %{{.*}}** %
    const B &rb{ B() };
    // CHECK: call %"struct.reference::B"* @_ZN9reference1BD1Ev
  }

}

namespace PR23165 {
struct AbstractClass {
  virtual void foo() const = 0;
};

struct ChildClass : public AbstractClass {
  virtual void foo() const {}
};

void helper(const AbstractClass &param) {
  param.foo();
}

void foo() {
// CHECK-LABEL: @_ZN7PR231653fooEv
// CHECK: call {{.*}} @_ZN7PR2316510ChildClassC1Ev
// CHECK: call void @_ZN7PR231656helperERKNS_13AbstractClassE
  helper(ChildClass());
}

struct S { struct T { int a; } t; mutable int b; };
void f() {
// CHECK-LABEL: _ZN7PR231651fEv
// CHECK: alloca
// CHECK: alloca
// CHECK: store
  const S::T &r = S().t;
}
}
