summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2015-06-10 18:14:07 +0000
committerReid Kleckner <reid@kleckner.net>2015-06-10 18:14:07 +0000
commitc87a6faba162797b9187c1e717c2ff3b7daea9b6 (patch)
tree8dbabe39b1e56d831c112d80b63e162180f7c5a9
parent88c3c6799748a14a7decb48a31d4f99a72af1527 (diff)
downloadbcm5719-llvm-c87a6faba162797b9187c1e717c2ff3b7daea9b6.tar.gz
bcm5719-llvm-c87a6faba162797b9187c1e717c2ff3b7daea9b6.zip
[WinEH] _except_handlerN uses 0 instead of 1 to indicate catch-all
Our usage of 1 was a holdover from __C_specific_handler. llvm-svn: 239482
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/WinException.cpp10
-rw-r--r--llvm/test/CodeGen/X86/seh-catch-all.ll2
-rw-r--r--llvm/test/CodeGen/X86/win32-eh.ll4
3 files changed, 7 insertions, 9 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/WinException.cpp b/llvm/lib/CodeGen/AsmPrinter/WinException.cpp
index 2bd9af55c30..40d6bab8b6d 100644
--- a/llvm/lib/CodeGen/AsmPrinter/WinException.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/WinException.cpp
@@ -612,12 +612,10 @@ void WinException::emitExceptHandlerTable(const MachineFunction *MF) {
"gaps in the SEH scope table");
for (const SEHHandler &Handler : LPInfo->SEHHandlers) {
// Emit the filter or finally function pointer, if present. Otherwise,
- // emit '1' to indicate a catch-all.
- const MCExpr *FilterOrFinally;
- if (const Function *F = Handler.FilterOrFinally)
- FilterOrFinally = create32bitRef(Asm->getSymbol(F));
- else
- FilterOrFinally = MCConstantExpr::create(1, Asm->OutContext);
+ // emit '0' to indicate a catch-all.
+ const Function *F = Handler.FilterOrFinally;
+ const MCExpr *FilterOrFinally =
+ create32bitRef(F ? Asm->getSymbol(F) : nullptr);
// Compute the recovery address, which is a block address or null.
const BlockAddress *BA = Handler.RecoverBA;
diff --git a/llvm/test/CodeGen/X86/seh-catch-all.ll b/llvm/test/CodeGen/X86/seh-catch-all.ll
index d02584a26d4..5586f95dba0 100644
--- a/llvm/test/CodeGen/X86/seh-catch-all.ll
+++ b/llvm/test/CodeGen/X86/seh-catch-all.ll
@@ -67,5 +67,5 @@ eh.resume:
; X86: .section .xdata,"dr"
; X86-NEXT: L__ehtable$main
; X86-NEXT: .long -1
-; X86-NEXT: .long 1
+; X86-NEXT: .long 0
; X86-NEXT: .long Ltmp{{[0-9]+}}
diff --git a/llvm/test/CodeGen/X86/win32-eh.ll b/llvm/test/CodeGen/X86/win32-eh.ll
index 3abaa49653b..6d816d7770c 100644
--- a/llvm/test/CodeGen/X86/win32-eh.ll
+++ b/llvm/test/CodeGen/X86/win32-eh.ll
@@ -37,7 +37,7 @@ catchall:
; CHECK: .section .xdata,"dr"
; CHECK-LABEL: L__ehtable$use_except_handler3:
; CHECK-NEXT: .long -1
-; CHECK-NEXT: .long 1
+; CHECK-NEXT: .long 0
; CHECK-NEXT: .long Ltmp{{[0-9]+}}
define void @use_except_handler4() {
@@ -77,7 +77,7 @@ catchall:
; CHECK-NEXT: .long 9999
; CHECK-NEXT: .long 0
; CHECK-NEXT: .long -2
-; CHECK-NEXT: .long 1
+; CHECK-NEXT: .long 0
; CHECK-NEXT: .long Ltmp{{[0-9]+}}
define void @use_CxxFrameHandler3() {
OpenPOWER on IntegriCloud