Index: lld/trunk/COFF/Writer.cpp =================================================================== --- lld/trunk/COFF/Writer.cpp +++ lld/trunk/COFF/Writer.cpp @@ -787,11 +787,9 @@ if (!File->SEHCompat) return; for (Symbol *B : File->SEHandlers) { - // Make sure the handler is still live. Assume all handlers are regular - // symbols. - auto *D = dyn_cast(B); - if (D && D->getChunk()->isLive()) - Handlers.insert(D); + // Make sure the handler is still live. + if (B->isLive()) + Handlers.insert(cast(B)); } } Index: lld/trunk/test/COFF/safeseh-md.s =================================================================== --- lld/trunk/test/COFF/safeseh-md.s +++ lld/trunk/test/COFF/safeseh-md.s @@ -0,0 +1,34 @@ +# RUN: llvm-mc -triple i686-windows-msvc %s -filetype=obj -o %t.obj +# RUN: lld-link %t.obj %S/Inputs/except_handler3.lib -safeseh -out:%t.exe -opt:noref -entry:main +# RUN: llvm-readobj -coff-load-config %t.exe | FileCheck %s + +# CHECK: SEHTable [ +# CHECK-NEXT: 0x +# CHECK-NEXT: ] + + .def @feat.00; + .scl 3; + .type 0; + .endef + .globl @feat.00 +@feat.00 = 1 + + .def _main; + .scl 2; + .type 32; + .endef + .section .text,"xr",one_only,_main + .globl _main +_main: + movl $42, %eax + ret + +.safeseh __except_handler3 + + .section .rdata,"dr" +.globl __load_config_used +__load_config_used: + .long 72 + .fill 60, 1, 0 + .long ___safe_se_handler_table + .long ___safe_se_handler_count