diff options
author | John McCall <rjmccall@apple.com> | 2013-02-12 03:51:46 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2013-02-12 03:51:46 +0000 |
commit | 66b22771fc0a1dba598e50469f2961048e7edd55 (patch) | |
tree | 552ec731b965cb24acd7932a190141468b1689d2 /test | |
parent | 629df0196eb305221d2c8aa9ab72293d05846f0b (diff) |
Call __cxa_begin_catch with the current exception before
calling std::terminate(). rdar://11904428
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@174940 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/CXX/except/except.spec/p9-noexcept.cpp | 5 | ||||
-rw-r--r-- | test/CodeGenCXX/cxx0x-delegating-ctors.cpp | 4 | ||||
-rw-r--r-- | test/CodeGenCXX/exceptions.cpp | 11 | ||||
-rw-r--r-- | test/CodeGenCXX/nrvo.cpp | 5 |
4 files changed, 17 insertions, 8 deletions
diff --git a/test/CXX/except/except.spec/p9-noexcept.cpp b/test/CXX/except/except.spec/p9-noexcept.cpp index 7c8d0ef1fb..0e592ce001 100644 --- a/test/CXX/except/except.spec/p9-noexcept.cpp +++ b/test/CXX/except/except.spec/p9-noexcept.cpp @@ -7,9 +7,10 @@ void target() noexcept // CHECK: invoke void @_Z8externalv() external(); } -// CHECK: landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) +// CHECK: [[T0:%.*]] = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) // CHECK-NEXT: catch i8* null -// CHECK-NEXT: call void @_ZSt9terminatev() noreturn nounwind +// CHECK-NEXT: [[T1:%.*]] = extractvalue { i8*, i32 } [[T0]], 0 +// CHECK-NEXT: call void @__clang_call_terminate(i8* [[T1]]) noreturn nounwind // CHECK-NEXT: unreachable void reverse() noexcept(false) diff --git a/test/CodeGenCXX/cxx0x-delegating-ctors.cpp b/test/CodeGenCXX/cxx0x-delegating-ctors.cpp index de739d0ad8..e909f03204 100644 --- a/test/CodeGenCXX/cxx0x-delegating-ctors.cpp +++ b/test/CodeGenCXX/cxx0x-delegating-ctors.cpp @@ -29,12 +29,12 @@ delegator::delegator(bool) // CHECK: define {{.*}} @_ZN9delegatorC1Ec // CHECK: {{.*}} @_ZN9delegatorC1Eb // CHECK: void @__cxa_throw -// CHECK: void @_ZSt9terminatev +// CHECK: void @__clang_call_terminate // CHECK: {{.*}} @_ZN9delegatorD1Ev // CHECK: define {{.*}} @_ZN9delegatorC2Ec // CHECK: {{.*}} @_ZN9delegatorC2Eb // CHECK: void @__cxa_throw -// CHECK: void @_ZSt9terminatev +// CHECK: void @__clang_call_terminate // CHECK: {{.*}} @_ZN9delegatorD2Ev delegator::delegator(char) : delegator(true) { diff --git a/test/CodeGenCXX/exceptions.cpp b/test/CodeGenCXX/exceptions.cpp index 06003c0cd6..f9727282c5 100644 --- a/test/CodeGenCXX/exceptions.cpp +++ b/test/CodeGenCXX/exceptions.cpp @@ -69,6 +69,13 @@ namespace test1 { return new A(B().x); } + // rdar://11904428 + // Terminate landing pads should call __cxa_begin_catch first. + // CHECK: define linkonce_odr hidden void @__clang_call_terminate(i8*) noinline noreturn nounwind + // CHECK-NEXT: [[T0:%.*]] = call i8* @__cxa_begin_catch(i8* %0) nounwind + // CHECK-NEXT: call void @_ZSt9terminatev() noreturn nounwind + // CHECK-NEXT: unreachable + A *d() { // CHECK: define [[A:%.*]]* @_ZN5test11dEv() // CHECK: [[ACTIVE:%.*]] = alloca i1 @@ -157,7 +164,7 @@ namespace test2 { // CHECK-NEXT: invoke void @_ZN5test21AC1Ei([[A]]* [[CAST]], i32 5) // CHECK: ret [[A]]* [[CAST]] // CHECK: invoke void @_ZN5test21AdlEPvm(i8* [[NEW]], i64 8) - // CHECK: call void @_ZSt9terminatev() + // CHECK: call void @__clang_call_terminate(i8* {{%.*}}) noreturn nounwind return new A(5); } } @@ -183,7 +190,7 @@ namespace test3 { // CHECK-NEXT: invoke void @_ZN5test31AC1Ei([[A]]* [[CAST]], i32 5) // CHECK: ret [[A]]* [[CAST]] // CHECK: invoke void @_ZN5test31AdlEPvS1_d(i8* [[NEW]], i8* [[FOO]], double [[BAR]]) - // CHECK: call void @_ZSt9terminatev() + // CHECK: call void @__clang_call_terminate(i8* {{%.*}}) noreturn nounwind return new(foo(),bar()) A(5); } diff --git a/test/CodeGenCXX/nrvo.cpp b/test/CodeGenCXX/nrvo.cpp index 8ff7dd7d09..3d4b6f9740 100644 --- a/test/CodeGenCXX/nrvo.cpp +++ b/test/CodeGenCXX/nrvo.cpp @@ -100,9 +100,10 @@ X test2(bool B) { // CHECK-EH: resume { i8*, i32 } // %terminate.lpad: terminate landing pad. - // CHECK-EH: landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) + // CHECK-EH: [[T0:%.*]] = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) // CHECK-EH-NEXT: catch i8* null - // CHECK-EH-NEXT: call void @_ZSt9terminatev() + // CHECK-EH-NEXT: [[T1:%.*]] = extractvalue { i8*, i32 } [[T0]], 0 + // CHECK-EH-NEXT: call void @__clang_call_terminate(i8* [[T1]]) noreturn nounwind // CHECK-EH-NEXT: unreachable } |