mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-23 21:13:02 +02:00
e4209346fe
We forgot to append the terminatepad's arguments which resulted in us treating the old terminatepad as an argument to the new terminatepad causing us to crash immediately. Instead, add the old terminatepad's arguments to the new terminatepad. This fixes PR25155. llvm-svn: 250234
55 lines
1.7 KiB
LLVM
55 lines
1.7 KiB
LLVM
; RUN: opt < %s -inline -S | FileCheck %s
|
|
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-pc-windows-msvc18.0.0"
|
|
|
|
define void @f() personality i32 (...)* @__CxxFrameHandler3 {
|
|
entry:
|
|
invoke void @g()
|
|
to label %try.cont unwind label %catch.dispatch
|
|
|
|
catch.dispatch: ; preds = %entry
|
|
%0 = catchpad [i8* null, i32 64, i8* null]
|
|
to label %catch unwind label %catchendblock
|
|
|
|
catch: ; preds = %catch.dispatch
|
|
invoke void @dtor()
|
|
to label %invoke.cont.1 unwind label %catchendblock
|
|
|
|
invoke.cont.1: ; preds = %catch
|
|
catchret %0 to label %try.cont
|
|
|
|
try.cont: ; preds = %entry, %invoke.cont.1
|
|
ret void
|
|
|
|
catchendblock: ; preds = %catch, %catch.dispatch
|
|
catchendpad unwind to caller
|
|
}
|
|
|
|
; CHECK-LABEL: define void @f(
|
|
|
|
; CHECK: invoke void @g()
|
|
; CHECK: to label %dtor.exit unwind label %terminate.i
|
|
|
|
; CHECK: terminate.i:
|
|
; CHECK-NEXT: terminatepad [void ()* @terminate] unwind label %catchendblock
|
|
|
|
; CHECK: catchendblock:
|
|
; CHECK-NEXT: catchendpad unwind to caller
|
|
|
|
declare i32 @__CxxFrameHandler3(...)
|
|
|
|
define internal void @dtor() personality i32 (...)* @__CxxFrameHandler3 {
|
|
entry:
|
|
invoke void @g()
|
|
to label %invoke.cont unwind label %terminate
|
|
|
|
invoke.cont: ; preds = %entry
|
|
ret void
|
|
|
|
terminate: ; preds = %entry
|
|
terminatepad [void ()* @terminate] unwind to caller
|
|
}
|
|
|
|
declare void @g()
|
|
declare void @terminate()
|