diff --git a/llvm/lib/CodeGen/AsmPrinter/EHStreamer.cpp b/llvm/lib/CodeGen/AsmPrinter/EHStreamer.cpp --- a/llvm/lib/CodeGen/AsmPrinter/EHStreamer.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/EHStreamer.cpp @@ -269,8 +269,7 @@ // create a call-site entry with no landing pad for the region between the // try-ranges. if (SawPotentiallyThrowing && Asm->MAI->usesCFIForEH()) { - CallSiteEntry Site = { LastLabel, BeginLabel, nullptr, 0 }; - CallSites.push_back(Site); + CallSites.push_back({Asm->getFunctionBegin(), BeginLabel, nullptr, 0}); PreviousIsInvoke = false; } @@ -319,8 +318,9 @@ // function may throw, create a call-site entry with no landing pad for the // region following the try-range. if (SawPotentiallyThrowing && !IsSJLJ) { - CallSiteEntry Site = { LastLabel, nullptr, nullptr, 0 }; - CallSites.push_back(Site); + if (LastLabel == nullptr) + LastLabel = Asm->getFunctionBegin(); + CallSites.push_back({LastLabel, Asm->getFunctionEnd(), nullptr, 0}); } } @@ -514,22 +514,15 @@ MCSymbol *EHFuncBeginSym = Asm->getFunctionBegin(); - MCSymbol *BeginLabel = S.BeginLabel; - if (!BeginLabel) - BeginLabel = EHFuncBeginSym; - MCSymbol *EndLabel = S.EndLabel; - if (!EndLabel) - EndLabel = Asm->getFunctionEnd(); - // Offset of the call site relative to the start of the procedure. if (VerboseAsm) Asm->OutStreamer->AddComment(">> Call Site " + Twine(++Entry) + " <<"); - Asm->emitCallSiteOffset(BeginLabel, EHFuncBeginSym, CallSiteEncoding); + Asm->emitCallSiteOffset(S.BeginLabel, EHFuncBeginSym, CallSiteEncoding); if (VerboseAsm) Asm->OutStreamer->AddComment(Twine(" Call between ") + - BeginLabel->getName() + " and " + - EndLabel->getName()); - Asm->emitCallSiteOffset(EndLabel, BeginLabel, CallSiteEncoding); + S.BeginLabel->getName() + " and " + + S.EndLabel->getName()); + Asm->emitCallSiteOffset(S.EndLabel, S.BeginLabel, CallSiteEncoding); // Offset of the landing pad relative to the start of the procedure. if (!S.LPad) {