mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 11:02:59 +02:00
Disable tail calls if there is an swifterror argument
ISel does not handle them correctly yet i.e we crash trying to emit tail call code. radar://28407842 llvm-svn: 282088
This commit is contained in:
parent
90550420f2
commit
f027af8c85
@ -5833,6 +5833,11 @@ void SelectionDAGBuilder::LowerCallTo(ImmutableCallSite CS, SDValue Callee,
|
||||
if (isTailCall && !isInTailCallPosition(CS, DAG.getTarget()))
|
||||
isTailCall = false;
|
||||
|
||||
// Disable tail calls if there is an swifterror argument. Targets have not
|
||||
// been updated to support tail calls.
|
||||
if (TLI.supportSwiftError() && SwiftErrorVal)
|
||||
isTailCall = false;
|
||||
|
||||
TargetLowering::CallLoweringInfo CLI(DAG);
|
||||
CLI.setDebugLoc(getCurSDLoc())
|
||||
.setChain(getRoot())
|
||||
|
@ -383,3 +383,15 @@ handler:
|
||||
call void @free(i8* %tmp)
|
||||
ret float 1.0
|
||||
}
|
||||
|
||||
; Check that we don't blow up on tail calling swifterror argument functions.
|
||||
define float @tailcallswifterror(%swift_error** swifterror %error_ptr_ref) {
|
||||
entry:
|
||||
%0 = tail call float @tailcallswifterror(%swift_error** swifterror %error_ptr_ref)
|
||||
ret float %0
|
||||
}
|
||||
define swiftcc float @tailcallswifterror_swiftcc(%swift_error** swifterror %error_ptr_ref) {
|
||||
entry:
|
||||
%0 = tail call swiftcc float @tailcallswifterror_swiftcc(%swift_error** swifterror %error_ptr_ref)
|
||||
ret float %0
|
||||
}
|
||||
|
@ -379,3 +379,15 @@ handler:
|
||||
call void @free(i8* %tmp)
|
||||
ret float 1.0
|
||||
}
|
||||
|
||||
; Check that we don't blow up on tail calling swifterror argument functions.
|
||||
define float @tailcallswifterror(%swift_error** swifterror %error_ptr_ref) {
|
||||
entry:
|
||||
%0 = tail call float @tailcallswifterror(%swift_error** swifterror %error_ptr_ref)
|
||||
ret float %0
|
||||
}
|
||||
define swiftcc float @tailcallswifterror_swiftcc(%swift_error** swifterror %error_ptr_ref) {
|
||||
entry:
|
||||
%0 = tail call swiftcc float @tailcallswifterror_swiftcc(%swift_error** swifterror %error_ptr_ref)
|
||||
ret float %0
|
||||
}
|
||||
|
@ -466,3 +466,15 @@ gen_error:
|
||||
normal:
|
||||
ret float 0.0
|
||||
}
|
||||
|
||||
; Check that we don't blow up on tail calling swifterror argument functions.
|
||||
define float @tailcallswifterror(%swift_error** swifterror %error_ptr_ref) {
|
||||
entry:
|
||||
%0 = tail call float @tailcallswifterror(%swift_error** swifterror %error_ptr_ref)
|
||||
ret float %0
|
||||
}
|
||||
define swiftcc float @tailcallswifterror_swiftcc(%swift_error** swifterror %error_ptr_ref) {
|
||||
entry:
|
||||
%0 = tail call swiftcc float @tailcallswifterror_swiftcc(%swift_error** swifterror %error_ptr_ref)
|
||||
ret float %0
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user