diff options
author | Bill Wendling <isanbard@gmail.com> | 2013-12-07 23:53:50 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2013-12-07 23:53:50 +0000 |
commit | c12b43ab249ade0bab324560bc2f70cefc6f3ec1 (patch) | |
tree | 5654b93a347eb4613c6fcf1a696842c1e9617d65 /test | |
parent | 8e3eec5fed242ef730b4ea023051650420e9c443 (diff) | |
download | clang-c12b43ab249ade0bab324560bc2f70cefc6f3ec1.tar.gz |
Merging r196488:
------------------------------------------------------------------------
r196488 | rsmith | 2013-12-05 00:30:59 -0800 (Thu, 05 Dec 2013) | 4 lines
PR17983: Fix crasher bug in C++1y mode when performing a non-global array
delete on a class which has no array cookie and has no class-specific operator
new.
------------------------------------------------------------------------
git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_34@196670 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGenCXX/cxx1y-sized-deallocation.cpp | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/test/CodeGenCXX/cxx1y-sized-deallocation.cpp b/test/CodeGenCXX/cxx1y-sized-deallocation.cpp index 642e1e07f6..7fd3ece3e0 100644 --- a/test/CodeGenCXX/cxx1y-sized-deallocation.cpp +++ b/test/CodeGenCXX/cxx1y-sized-deallocation.cpp @@ -30,6 +30,8 @@ template<typename T> void del() { ::delete get<T*>(); ::delete[] get<T*>(); + delete get<T*>(); + delete[] get<T*>(); } template void del<A>(); @@ -44,6 +46,9 @@ D::D() {} // CHECK-LABEL: define weak_odr void @_Z3delIiEvv() // CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 4) // CHECK: call void @_ZdaPv(i8* %{{[^ ]*}}) +// +// CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 4) +// CHECK: call void @_ZdaPv(i8* %{{[^ ]*}}) // CHECK-LABEL: define linkonce void @_ZdlPvm(i8* // CHECK: call void @_ZdlPv(i8* %0) @@ -51,12 +56,20 @@ D::D() {} // CHECK-LABEL: define weak_odr void @_Z3delI1BEvv() // CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 4) // CHECK: call void @_ZdaPv(i8* %{{[^ ]*}}) +// +// CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 4) +// CHECK: call void @_ZdaPv(i8* %{{[^ ]*}}) // CHECK-LABEL: define weak_odr void @_Z3delI1CEvv() // CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 1) // CHECK: mul i64 1, %{{[^ ]*}} // CHECK: add i64 %{{[^ ]*}}, 8 // CHECK: call void @_ZdaPvm(i8* %{{[^ ]*}}, i64 %{{[^ ]*}}) +// +// CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 1) +// CHECK: mul i64 1, %{{[^ ]*}} +// CHECK: add i64 %{{[^ ]*}}, 8 +// CHECK: call void @_ZdaPvm(i8* %{{[^ ]*}}, i64 %{{[^ ]*}}) // CHECK-LABEL: define linkonce void @_ZdaPvm(i8* // CHECK: call void @_ZdaPv(i8* %0) @@ -66,25 +79,32 @@ D::D() {} // CHECK: mul i64 8, %{{[^ ]*}} // CHECK: add i64 %{{[^ ]*}}, 8 // CHECK: call void @_ZdaPvm(i8* %{{[^ ]*}}, i64 %{{[^ ]*}}) +// +// CHECK-NOT: Zdl +// CHECK: call void %{{.*}} +// CHECK-NOT: Zdl +// CHECK: mul i64 8, %{{[^ ]*}} +// CHECK: add i64 %{{[^ ]*}}, 8 +// CHECK: call void @_ZdaPvm(i8* %{{[^ ]*}}, i64 %{{[^ ]*}}) // CHECK-LABEL: define weak_odr void @_Z3delI1EEvv() // CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 1) // CHECK: call void @_ZdaPv(i8* %{{[^ ]*}}) +// +// CHECK: call void @_ZN1EdlEPv(i8* %{{[^ ]*}}) +// CHECK: call void @_ZN1EdaEPv(i8* %{{[^ ]*}}) // CHECK-LABEL: define weak_odr void @_Z3delI1FEvv() // CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 1) // CHECK: mul i64 1, %{{[^ ]*}} // CHECK: add i64 %{{[^ ]*}}, 8 // CHECK: call void @_ZdaPvm(i8* %{{[^ ]*}}, i64 %{{[^ ]*}}) +// +// CHECK: call void @_ZN1FdlEPvm(i8* %{{[^ ]*}}, i64 1) +// CHECK: mul i64 1, %{{[^ ]*}} +// CHECK: add i64 %{{[^ ]*}}, 8 +// CHECK: call void @_ZN1FdaEPvm(i8* %{{[^ ]*}}, i64 %{{[^ ]*}}) -// CHECK-LABEL: define void @_Z10member_delv() -// CHECK-NOT: Zdl -// CHECK: call void %{{[^ ]*}}(%{{[^ ]*}}* % -// CHECK-NOT: Zdl -// CHECK: } -void member_del() { - delete get<D*>(); -} // CHECK-LABEL: define linkonce_odr void @_ZN1DD0Ev(%{{[^ ]*}}* %this) // CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 8) |