diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-06-13 02:06:28 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-06-13 02:06:28 +0000 |
commit | 8fa638ae6fdad381c8b50c4374b786f57f98bf53 (patch) | |
tree | f9c74dc1e01c775f1491abd7abc2cac7e3d51327 /clang/test/CodeGenCXX/value-init.cpp | |
parent | 92b931d519d46b84453ca2278ce95abad855b37e (diff) | |
download | bcm5719-llvm-8fa638ae6fdad381c8b50c4374b786f57f98bf53.tar.gz bcm5719-llvm-8fa638ae6fdad381c8b50c4374b786f57f98bf53.zip |
Fix crash emitting transparent list initializer for a large aggregate.
llvm-svn: 334565
Diffstat (limited to 'clang/test/CodeGenCXX/value-init.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/value-init.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/clang/test/CodeGenCXX/value-init.cpp b/clang/test/CodeGenCXX/value-init.cpp index 348cbf78157..8d76fc53461 100644 --- a/clang/test/CodeGenCXX/value-init.cpp +++ b/clang/test/CodeGenCXX/value-init.cpp @@ -1,4 +1,5 @@ -// RUN: %clang_cc1 -std=c++98 %s -triple x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -std=c++98 %s -triple x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-CXX98 +// RUN: %clang_cc1 -std=c++17 %s -triple x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-CXX17 struct A { virtual ~A(); @@ -114,13 +115,15 @@ void f() { // CHECK: call void @llvm.memset.p0i8.i64 // CHECK-NOT: call void @llvm.memset.p0i8.i64 - // CHECK: call void @_ZN6PR98015Test2C1Ev + // CHECK-CXX98: call void @_ZN6PR98015Test2C1Ev + // CHECK-CXX17: call void @_ZN6PR98014TestC1Ev // CHECK-NOT: call void @_ZN6PR98015Test2C1Ev Test2 empty2[3] = {}; // CHECK: call void @llvm.memset.p0i8.i64 // CHECK-NOT: call void @llvm.memset.p0i8.i64 - // CHECK: call void @_ZN6PR98015Test3C1Ev + // CHECK-CXX98: call void @_ZN6PR98015Test3C1Ev + // CHECK-CXX17: call void @_ZN6PR98014TestC2Ev // CHECK-NOT: call void @llvm.memset.p0i8.i64 // CHECK-NOT: call void @_ZN6PR98015Test3C1Ev Test3 empty3[3] = {}; @@ -222,7 +225,7 @@ namespace test6 { // CHECK: [[CUR:%.*]] = phi [20 x [[A]]]* [ [[BEGIN]], {{%.*}} ], [ [[NEXT:%.*]], {{%.*}} ] // Inner loop. - // CHECK-NEXT: [[IBEGIN:%.*]] = getelementptr inbounds [20 x [[A]]], [20 x [[A]]]* [[CUR]], i32 0, i32 0 + // CHECK-NEXT: [[IBEGIN:%.*]] = getelementptr inbounds [20 x [[A]]], [20 x [[A]]]* [[CUR]], i{{32|64}} 0, i{{32|64}} 0 // CHECK-NEXT: [[IEND:%.*]] = getelementptr inbounds [[A]], [[A]]* [[IBEGIN]], i64 20 // CHECK-NEXT: br label // CHECK: [[ICUR:%.*]] = phi [[A]]* [ [[IBEGIN]], {{%.*}} ], [ [[INEXT:%.*]], {{%.*}} ] @@ -327,3 +330,12 @@ int explicitly_defaulted() { // CHECK: call void @llvm.memset.p0i8.i64 // CHECK-NEXT: call void @_ZN8zeroinit2X2IiEC2Ev // CHECK-NEXT: ret void + +#if __cplusplus >= 201103L +namespace transparent_init_list { + struct optional_assign_base {}; + struct optional_data_dtor_base { char dummy_[24]; }; + struct optional : optional_data_dtor_base, optional_assign_base {}; + optional f(optional a) { return {optional(a)}; } +} +#endif |