Created attachment 11560 [details] Assembler file to reproduce problem If Dwarf exception code is emitted into a COFF file on Windows 64, then the temporary labels used for calculating the difference between function start and landingpad are defined as public. The labels are created in AsmPrinter.cpp as follows (method EmitLabelDifference): // Otherwise, emit with .set (aka assignment). MCSymbol *SetLabel = GetTempSymbol("set", SetCounter++); OutStreamer.EmitAssignment(SetLabel, Diff); OutStreamer.EmitSymbolValue(SetLabel, Size); The resulting .Lset0, .Lset1, ... labels are public despite being a temporary symbol. This also happens with assembler files. Just assemble the attached file and disassemble to check visibility of .LsetN labels.
Additional info: If I set HasSetDirective = false; in class X86MCAsmInfoMicrosoft then the generated assembler changes from .Lset0 = .Ltmp19-.Leh_func_begin4 .long .Lset0 to .long .Ltmp19-.Leh_func_begin4 and the bug does not occur. But I am unsure if this is really the solution or just curing the symptoms.
This was surely caused by r190888, but I hadn't been able to figure out the cause until you pinned this down. Thanks, taking a look now.
Should be fixed by r195053.
Yes, it works for me now. Thanks.