Index: lld/trunk/COFF/PDB.cpp =================================================================== --- lld/trunk/COFF/PDB.cpp +++ lld/trunk/COFF/PDB.cpp @@ -1735,20 +1735,26 @@ if (!findLineTable(C, Addr, CVStrTab, Checksums, Lines, OffsetInLinetable)) return {"", 0}; - uint32_t NameIndex; - uint32_t LineNumber; + Optional NameIndex; + Optional LineNumber; for (LineColumnEntry &Entry : Lines) { for (const LineNumberEntry &LN : Entry.LineNumbers) { + LineInfo LI(LN.Flags); if (LN.Offset > OffsetInLinetable) { + if (!NameIndex) { + NameIndex = Entry.NameIndex; + LineNumber = LI.getStartLine(); + } StringRef Filename = - ExitOnErr(getFileName(CVStrTab, Checksums, NameIndex)); - return {Filename, LineNumber}; + ExitOnErr(getFileName(CVStrTab, Checksums, *NameIndex)); + return {Filename, *LineNumber}; } - LineInfo LI(LN.Flags); NameIndex = Entry.NameIndex; LineNumber = LI.getStartLine(); } } - StringRef Filename = ExitOnErr(getFileName(CVStrTab, Checksums, NameIndex)); - return {Filename, LineNumber}; + if (!NameIndex) + return {"", 0}; + StringRef Filename = ExitOnErr(getFileName(CVStrTab, Checksums, *NameIndex)); + return {Filename, *LineNumber}; } Index: lld/trunk/test/COFF/line-error.yaml =================================================================== --- lld/trunk/test/COFF/line-error.yaml +++ lld/trunk/test/COFF/line-error.yaml @@ -0,0 +1,160 @@ +# RUN: yaml2obj %s -o %t.obj +# RUN: not lld-link %t.obj /subsystem:console 2>&1 | FileCheck %s + +# CHECK: lld-link: error: undefined symbol: function +# CHECK-NEXT: >>> referenced by {{.*}}line-error.yaml.tmp.obj:(caller1) +# CHECK-NEXT: >>> referenced by E:\file.cpp:1935 +# CHECK-NEXT: >>> {{.*}}line-error.yaml.tmp.obj:(caller22) + +--- !COFF +header: + Machine: IMAGE_FILE_MACHINE_AMD64 + Characteristics: [ ] +sections: + - Name: .text + Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] + Alignment: 16 + SectionData: 488B0500000000488B51284881C2D80000004889C148FF2500000000 + Relocations: + - VirtualAddress: 3 + SymbolName: function + Type: IMAGE_REL_AMD64_REL32 + - Name: .text + Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] + Alignment: 16 + SectionData: 488B0500000000488B51084881C2D80000004889C148FF2500000000 + Relocations: + - VirtualAddress: 3 + SymbolName: function + Type: IMAGE_REL_AMD64_REL32 + - Name: '.debug$S' + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] + Alignment: 4 + Subsections: + - !FileChecksums + Checksums: + - FileName: 'E:\file.cpp' + Kind: MD5 + Checksum: D72EDEF8B8E50C364A330F9CB3CD904B + - !StringTable + Strings: + - 'E:\file.cpp' + - Name: '.debug$S' + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] + Alignment: 4 + Subsections: + - !Lines + CodeSize: 28 + Flags: [ ] + RelocOffset: 0 + RelocSegment: 0 + Blocks: [] + Relocations: + - VirtualAddress: 12 + SymbolName: caller1 + Type: IMAGE_REL_AMD64_SECREL + - Name: '.debug$S' + Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ] + Alignment: 4 + Subsections: + - !Lines + CodeSize: 28 + Flags: [ ] + RelocOffset: 0 + RelocSegment: 0 + Blocks: + - FileName: 'E:\file.cpp' + Lines: + - Offset: 11 + LineStart: 1935 + IsStatement: false + EndDelta: 0 + Columns: [] + Relocations: + - VirtualAddress: 12 + SymbolName: caller22 + Type: IMAGE_REL_AMD64_SECREL +symbols: + - Name: .text + Value: 0 + SectionNumber: 1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 28 + NumberOfRelocations: 2 + NumberOfLinenumbers: 0 + CheckSum: 2430089736 + Number: 1 + Selection: IMAGE_COMDAT_SELECT_NODUPLICATES + - Name: caller1 + Value: 0 + SectionNumber: 1 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_FUNCTION + StorageClass: IMAGE_SYM_CLASS_EXTERNAL + - Name: .text + Value: 0 + SectionNumber: 2 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 28 + NumberOfRelocations: 2 + NumberOfLinenumbers: 0 + CheckSum: 3449717304 + Number: 2 + Selection: IMAGE_COMDAT_SELECT_NODUPLICATES + - Name: caller22 + Value: 0 + SectionNumber: 2 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_FUNCTION + StorageClass: IMAGE_SYM_CLASS_EXTERNAL + - Name: '.debug$S' + Value: 0 + SectionNumber: 3 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 767204 + NumberOfRelocations: 0 + NumberOfLinenumbers: 0 + CheckSum: 4280093374 + Number: 3 + - Name: '.debug$S' + Value: 0 + SectionNumber: 4 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 296 + NumberOfRelocations: 1 + NumberOfLinenumbers: 0 + CheckSum: 1957793731 + Number: 1 + Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE + - Name: '.debug$S' + Value: 0 + SectionNumber: 5 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_STATIC + SectionDefinition: + Length: 276 + NumberOfRelocations: 1 + NumberOfLinenumbers: 0 + CheckSum: 1957793731 + Number: 2 + Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE + - Name: function + Value: 0 + SectionNumber: 0 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_EXTERNAL +...