Index: lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp =================================================================== --- lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -1163,9 +1163,10 @@ auto Pers = classifyEHPersonality(FuncInfo.Fn->getPersonalityFn()); bool IsMSVCCXX = Pers == EHPersonality::MSVC_CXX; bool IsSEH = isAsynchronousEHPersonality(Pers); + bool IsCoreCLR = Pers == EHPersonality::CoreCLR; MachineBasicBlock *CatchPadMBB = FuncInfo.MBB; - // In MSVC C++, catchblocks are funclets and need prologues. - if (IsMSVCCXX) + // In MSVC C++ and CoreCLR, catchblocks are funclets and need prologues. + if (IsMSVCCXX || IsCoreCLR) CatchPadMBB->setIsEHFuncletEntry(); MachineBasicBlock *NormalDestMBB = FuncInfo.MBBMap[I.getNormalDest()]; Index: lib/CodeGen/WinEHPrepare.cpp =================================================================== --- lib/CodeGen/WinEHPrepare.cpp +++ lib/CodeGen/WinEHPrepare.cpp @@ -2928,11 +2928,11 @@ // Preds of the endpad should get the parent state. PredState = ParentState; } else if (const CatchPadInst *Catch = dyn_cast(Pad)) { - const BasicBlock *Handler = Catch->getNormalDest(); + const BasicBlock *PadBlock = Catch->getParent(); uint32_t TypeToken = static_cast( cast(Catch->getArgOperand(0))->getZExtValue()); int NewState = addClrEHHandler(FuncInfo, ParentState, - ClrHandlerType::Catch, TypeToken, Handler); + ClrHandlerType::Catch, TypeToken, PadBlock); FuncInfo.EHPadStateMap[Catch] = NewState; // Preds of the catch get its state PredState = NewState;