diff options
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/WinException.cpp')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/WinException.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/WinException.cpp b/llvm/lib/CodeGen/AsmPrinter/WinException.cpp index 56a8b844ca5..a5172fdd7d7 100644 --- a/llvm/lib/CodeGen/AsmPrinter/WinException.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/WinException.cpp @@ -902,7 +902,10 @@ void WinException::emitExceptHandlerTable(const MachineFunction *MF) { for (SEHUnwindMapEntry &UME : FuncInfo.SEHUnwindMap) { MCSymbol *ExceptOrFinally = UME.Handler.get<MachineBasicBlock *>()->getSymbol(); - OS.EmitIntValue(UME.ToState, 4); // ToState + // -1 is usually the base state for "unwind to caller", but for + // _except_handler4 it's -2. Do that replacement here if necessary. + int ToState = UME.ToState == -1 ? BaseState : UME.ToState; + OS.EmitIntValue(ToState, 4); // ToState OS.EmitValue(create32bitRef(UME.Filter), 4); // Filter OS.EmitValue(create32bitRef(ExceptOrFinally), 4); // Except/Finally } |