diff options
Diffstat (limited to 'test/CodeGenCXX/cxx0x-initializer-references.cpp')
| -rw-r--r-- | test/CodeGenCXX/cxx0x-initializer-references.cpp | 54 | 
1 files changed, 46 insertions, 8 deletions
| diff --git a/test/CodeGenCXX/cxx0x-initializer-references.cpp b/test/CodeGenCXX/cxx0x-initializer-references.cpp index 10586c11a7a7..318c8ea0d770 100644 --- a/test/CodeGenCXX/cxx0x-initializer-references.cpp +++ b/test/CodeGenCXX/cxx0x-initializer-references.cpp @@ -35,22 +35,30 @@ namespace reference {      // CHECK-NEXT: ret    } -  void reference_to_aggregate() { +  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: store i32 2 +    // CHECK-NEXT: %[[I1:.*]] = load i32, i32* +    // CHECK-NEXT: store i32 %[[I1]]      // CHECK-NEXT: store %{{.*}}* %{{.*}}, %{{.*}}** %{{.*}}, align -    const A &ra1{1, 2}; +    const A &ra1{1, i}; -    // CHECK-NEXT: getelementptr inbounds [3 x i32]* %{{.*}}, i{{32|64}} 0, i{{32|64}} 0 +    // 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* %{{.*}}, i{{32|64}} 1 +    // CHECK-NEXT: getelementptr inbounds i32, i32* %{{.*}}, i{{32|64}} 1      // CHECK-NEXT: store i32 2 -    // CHECK-NEXT: getelementptr inbounds i32* %{{.*}}, i{{32|64}} 1 -    // CHECK-NEXT: store i32 3 +    // 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, 3}; +    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    } @@ -71,3 +79,33 @@ namespace reference {    }  } + +namespace PR23165 { +struct AbstractClass { +  virtual void foo() const = 0; +}; + +struct ChildClass : public AbstractClass { +  virtual void foo() const {} +}; + +void helper(const AbstractClass ¶m) { +  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; +} +} | 
