diff options
Diffstat (limited to 'clang/test')
4 files changed, 46 insertions, 20 deletions
diff --git a/clang/test/CodeGenCXX/compound-literals.cpp b/clang/test/CodeGenCXX/compound-literals.cpp index 2b77d2490aa..2bbeefbe934 100644 --- a/clang/test/CodeGenCXX/compound-literals.cpp +++ b/clang/test/CodeGenCXX/compound-literals.cpp @@ -28,7 +28,7 @@ int f() { // CHECK-LABEL: define i32 @_Z1gv() int g() { - // CHECK: store [2 x i32]* %{{[a-z0-9.]+}}, [2 x i32]** [[V:%[a-z0-9.]+]] + // CHECK: store [2 x i32]* @{{.*}}, [2 x i32]** [[V:%[a-z0-9.]+]] const int (&v)[2] = (int [2]) {1,2}; // CHECK: [[A:%[a-z0-9.]+]] = load [2 x i32]*, [2 x i32]** [[V]] diff --git a/clang/test/CodeGenCXX/cxx0x-initializer-array.cpp b/clang/test/CodeGenCXX/cxx0x-initializer-array.cpp index 49bc86fadc7..de10aee67f1 100644 --- a/clang/test/CodeGenCXX/cxx0x-initializer-array.cpp +++ b/clang/test/CodeGenCXX/cxx0x-initializer-array.cpp @@ -42,10 +42,11 @@ namespace ValueInitArrayOfMemPtr { // CHECK: call void @llvm.memcpy.p0i8.p0i8.i32(i8* %{{.*}}, i8* bitcast ([3 x i32]* @[[THREE_NULL_MEMPTRS]] to i8*), i32 12, i32 4, i1 false) } - // CHECK-LABEL: define void @_ZN22ValueInitArrayOfMemPtr1gEv - void g() { + // Test dynamic initialization. + // CHECK-LABEL: define void @_ZN22ValueInitArrayOfMemPtr1gEMNS_1SEi + void g(p ptr) { // CHECK: store i32 -1, - f(a{}); + f(a{ptr}); } } diff --git a/clang/test/CodeGenCXX/cxx0x-initializer-references.cpp b/clang/test/CodeGenCXX/cxx0x-initializer-references.cpp index 23d244bc567..d4a8f20f357 100644 --- a/clang/test/CodeGenCXX/cxx0x-initializer-references.cpp +++ b/clang/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], [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: store i32 3 + // 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 } diff --git a/clang/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp b/clang/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp index d68ba7c7537..f079311e7e8 100644 --- a/clang/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp +++ b/clang/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp @@ -72,6 +72,9 @@ namespace thread_local_global_array { // CHECK: @[[PARTLY_CONSTANT_SECOND:_ZGRN15partly_constant2ilE.*]] = internal global [2 x i32] zeroinitializer, align 4 // CHECK: @[[PARTLY_CONSTANT_THIRD:_ZGRN15partly_constant2ilE.*]] = internal constant [4 x i32] [i32 5, i32 6, i32 7, i32 8], align 4 +// CHECK: @[[REFTMP1:.*]] = private constant [2 x i32] [i32 42, i32 43], comdat($_ZN7PR204451fILi0EEEvv), align 4 +// CHECK: @[[REFTMP2:.*]] = private constant [3 x %{{.*}}] [%{{.*}} { i32 1 }, %{{.*}} { i32 2 }, %{{.*}} { i32 3 }], align 4 + // CHECK: appending global @@ -215,17 +218,16 @@ void fn9() { struct haslist1 { std::initializer_list<int> il; - haslist1(); + haslist1(int i); }; -// CHECK-LABEL: define void @_ZN8haslist1C2Ev -haslist1::haslist1() +// CHECK-LABEL: define void @_ZN8haslist1C2Ei +haslist1::haslist1(int i) // CHECK: alloca [3 x i32] -// CHECK: store i32 1 +// CHECK: store i32 % // CHECK: store i32 2 // CHECK: store i32 3 -// CHECK: store i{{32|64}} 3 - : il{1, 2, 3} + : il{i, 2, 3} { destroyme2 dm2; } @@ -244,16 +246,15 @@ haslist2::haslist2() // CHECK: call void @_ZN10destroyme1D1Ev } -void fn10() { - // CHECK-LABEL: define void @_Z4fn10v +void fn10(int i) { + // CHECK-LABEL: define void @_Z4fn10i // CHECK: alloca [3 x i32] // CHECK: call noalias i8* @_Znw{{[jm]}} - // CHECK: store i32 1 + // CHECK: store i32 % // CHECK: store i32 2 // CHECK: store i32 3 // CHECK: store i32* - // CHECK: store i{{32|64}} 3 - (void) new std::initializer_list<int> {1, 2, 3}; + (void) new std::initializer_list<int> {i, 2, 3}; } void fn11() { @@ -462,6 +463,22 @@ namespace PR20445 { template<int x> void f() { new MyClass({42, 43}); } template void f<0>(); // CHECK-LABEL: define {{.*}} @_ZN7PR204451fILi0EEEvv( + // CHECK: store i32* getelementptr inbounds ([2 x i32]* @[[REFTMP1]], i64 0, i64 0) // CHECK: call void @_ZN7PR204456vectorC1ESt16initializer_listIiE( // CHECK: call void @_ZN7PR204457MyClassC1ERKNS_6vectorE( } + +namespace ConstExpr { + class C { + int x; + public: + constexpr C(int x) : x(x) {} + }; + void f(std::initializer_list<C>); + void g() { +// CHECK-LABEL: _ZN9ConstExpr1gEv +// CHECK: store %"class.ConstExpr::C"* getelementptr inbounds ([3 x %"class.ConstExpr::C"]* @[[REFTMP2]], i64 0, i64 0) +// CHECK: call void @_ZN9ConstExpr1fESt16initializer_listINS_1CEE + f({C(1), C(2), C(3)}); + } +} |