diff --git a/llvm/lib/Target/X86/X86AsmPrinter.cpp b/llvm/lib/Target/X86/X86AsmPrinter.cpp --- a/llvm/lib/Target/X86/X86AsmPrinter.cpp +++ b/llvm/lib/Target/X86/X86AsmPrinter.cpp @@ -441,7 +441,11 @@ if (Subtarget->hardenSlsRet() || Subtarget->hardenSlsIJmp()) { auto I = MBB.getLastNonDebugInstr(); if (I != MBB.end()) { - if ((Subtarget->hardenSlsRet() && isSimpleReturn(*I)) || + if ((Subtarget->hardenSlsRet() && + (isSimpleReturn(*I) || + (I->getOpcode() == X86::TAILJMPd && I->getOperand(0).isSymbol() && + !strcmp(I->getOperand(0).getSymbolName(), + "__x86_return_thunk")))) || (Subtarget->hardenSlsIJmp() && isIndirectBranchOrTailCall(*I))) { MCInst TmpInst; TmpInst.setOpcode(X86::INT3);