Skip to content

Commit b78e3b8

Browse files
Use musttail when merging swifttail calls.
Fixes rdar://75899459.
1 parent 45b4048 commit b78e3b8

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

lib/LLVMPasses/LLVMMergeFunctions.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1225,7 +1225,11 @@ void SwiftMergeFunctions::writeThunk(Function *ToFunc, Function *Thunk,
12251225
}
12261226

12271227
CallInst *CI = Builder.CreateCall(ToFunc, Args);
1228-
CI->setTailCall();
1228+
bool isSwiftTailCall =
1229+
ToFunc->getCallingConv() == CallingConv::SwiftTail &&
1230+
Thunk->getCallingConv() == CallingConv::SwiftTail;
1231+
CI->setTailCallKind(
1232+
isSwiftTailCall ? llvm::CallInst::TCK_MustTail : llvm::CallInst::TCK_Tail);
12291233
CI->setCallingConv(ToFunc->getCallingConv());
12301234
CI->setAttributes(ToFunc->getAttributes());
12311235
if (Thunk->getReturnType()->isVoidTy()) {

0 commit comments

Comments
 (0)