[CodeView] Initialize column-end to zero
authorDavid Majnemer <david.majnemer@gmail.com>
Tue, 12 Jan 2016 21:58:20 +0000 (21:58 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Tue, 12 Jan 2016 21:58:20 +0000 (21:58 +0000)
CodeView, unlike DWARF, can associate code with a range of columns.
However, LLVM can only represent a single column position internally.

We used to claim that the end column and start column were the same
which yielded less than satisfactory results: we would stop printing at
the _beginning_ of the source expression!  Instead, mark the column-end
as 'zero' to indicate that we don't have one (as per the documentation
for IDiaLineNumber::get_lineNumberEnd).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@257528 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp
test/DebugInfo/COFF/multifunction.ll

index c2c0f84e5c925da0b53885d3517eade13cb90659..52116ce1e22bca2c4cdac27c6d3677d318e07ea2 100644 (file)
@@ -283,7 +283,7 @@ void WinCodeViewLineTables::emitDebugInfoForFunction(const Function *GV) {
          ColSegI != ColSegEnd; ++ColSegI) {
       unsigned ColumnNumber = InstrInfo[FI.Instrs[ColSegI]].ColumnNumber;
       Asm->EmitInt16(ColumnNumber); // Start column
-      Asm->EmitInt16(ColumnNumber); // End column
+      Asm->EmitInt16(0);            // End column
     }
     Asm->OutStreamer->EmitLabel(FileSegmentEnd);
   };
index 4c044fa9c4fa01b7692990e90e26c4b8a93f056b..a25b5ed0dddda7a1b16dc8274a0cc1d105f00fb1 100644 (file)
@@ -90,9 +90,9 @@
 ; X86-NEXT: .long [[X_RETURN]]-_x
 ; X86-NEXT: .long   5
 ; X86-NEXT: .short 42
-; X86-NEXT: .short 42
-; X86-NEXT: .short 43
+; X86-NEXT: .short 0
 ; X86-NEXT: .short 43
+; X86-NEXT: .short 0
 ; X86-NEXT: [[FILE_SEGMENT_END]]:
 ; X86-NEXT: [[F2_END]]:
 ; Symbol subsection for y
 ; X86-NEXT: .long [[Y_RETURN]]-_y
 ; X86-NEXT: .long   9
 ; X86-NEXT: .short 52
-; X86-NEXT: .short 52
-; X86-NEXT: .short 53
+; X86-NEXT: .short 0
 ; X86-NEXT: .short 53
+; X86-NEXT: .short 0
 ; X86-NEXT: [[FILE_SEGMENT_END]]:
 ; X86-NEXT: [[F2_END]]:
 ; Symbol subsection for f
 ; X86-NEXT: .long [[F_RETURN]]-_f
 ; X86-NEXT: .long   15
 ; X86-NEXT: .short 62
-; X86-NEXT: .short 62
-; X86-NEXT: .short 63
+; X86-NEXT: .short 0
 ; X86-NEXT: .short 63
+; X86-NEXT: .short 0
 ; X86-NEXT: .short 72
-; X86-NEXT: .short 72
-; X86-NEXT: .short 73
+; X86-NEXT: .short 0
 ; X86-NEXT: .short 73
+; X86-NEXT: .short 0
 ; X86-NEXT: [[FILE_SEGMENT_END]]:
 ; X86-NEXT: [[F2_END]]:
 ; File index to string table offset subsection
 ; OBJ32-NEXT:     +0x0: 4
 ; OBJ32-NEXT:     +0x5: 5
 ; OBJ32-NEXT:     ColStart: 42
-; OBJ32-NEXT:     ColEnd: 42
+; OBJ32-NEXT:     ColEnd: 0
 ; OBJ32-NEXT:     ColStart: 43
-; OBJ32-NEXT:     ColEnd: 43
+; OBJ32-NEXT:     ColEnd: 0
 ; OBJ32-NEXT:   ]
 ; OBJ32-NEXT: ]
 ; OBJ32-NEXT: FunctionLineTable [
 ; OBJ32-NEXT:     +0x0: 8
 ; OBJ32-NEXT:     +0x5: 9
 ; OBJ32-NEXT:     ColStart: 52
-; OBJ32-NEXT:     ColEnd: 52
+; OBJ32-NEXT:     ColEnd: 0
 ; OBJ32-NEXT:     ColStart: 53
-; OBJ32-NEXT:     ColEnd: 53
+; OBJ32-NEXT:     ColEnd: 0
 ; OBJ32-NEXT:   ]
 ; OBJ32-NEXT: ]
 ; OBJ32-NEXT: FunctionLineTable [
 ; OBJ32-NEXT:     +0xA: 14
 ; OBJ32-NEXT:     +0xF: 15
 ; OBJ32-NEXT:     ColStart: 62
-; OBJ32-NEXT:     ColEnd: 62
+; OBJ32-NEXT:     ColEnd: 0
 ; OBJ32-NEXT:     ColStart: 63
-; OBJ32-NEXT:     ColEnd: 63
+; OBJ32-NEXT:     ColEnd: 0
 ; OBJ32-NEXT:     ColStart: 72
-; OBJ32-NEXT:     ColEnd: 72
+; OBJ32-NEXT:     ColEnd: 0
 ; OBJ32-NEXT:     ColStart: 73
-; OBJ32-NEXT:     ColEnd: 73
+; OBJ32-NEXT:     ColEnd: 0
 ; OBJ32-NEXT:   ]
 ; OBJ32-NEXT: ]
 
 ; X64-NEXT: .short 0
 ; X64-NEXT: .short 0
 ; X64-NEXT: .short 42
-; X64-NEXT: .short 42
-; X64-NEXT: .short 43
+; X64-NEXT: .short 0
 ; X64-NEXT: .short 43
+; X64-NEXT: .short 0
 ; X64-NEXT: [[FILE_SEGMENT_END]]:
 ; X64-NEXT: [[F2_END]]:
 ; Symbol subsection for y
 ; X64-NEXT: .short 0
 ; X64-NEXT: .short 0
 ; X64-NEXT: .short 52
-; X64-NEXT: .short 52
-; X64-NEXT: .short 53
+; X64-NEXT: .short 0
 ; X64-NEXT: .short 53
+; X64-NEXT: .short 0
 ; X64-NEXT: [[FILE_SEGMENT_END]]:
 ; X64-NEXT: [[F2_END]]:
 ; Symbol subsection for f
 ; X64-NEXT: .short 0
 ; X64-NEXT: .short 0
 ; X64-NEXT: .short 62
-; X64-NEXT: .short 62
-; X64-NEXT: .short 63
+; X64-NEXT: .short 0
 ; X64-NEXT: .short 63
+; X64-NEXT: .short 0
 ; X64-NEXT: .short 72
-; X64-NEXT: .short 72
-; X64-NEXT: .short 73
+; X64-NEXT: .short 0
 ; X64-NEXT: .short 73
+; X64-NEXT: .short 0
 ; X64-NEXT: [[FILE_SEGMENT_END]]:
 ; X64-NEXT: [[F2_END]]:
 ; File index to string table offset subsection
 ; OBJ64-NEXT:     ColStart: 0
 ; OBJ64-NEXT:     ColEnd: 0
 ; OBJ64-NEXT:     ColStart: 42
-; OBJ64-NEXT:     ColEnd: 42
+; OBJ64-NEXT:     ColEnd: 0
 ; OBJ64-NEXT:     ColStart: 43
-; OBJ64-NEXT:     ColEnd: 43
+; OBJ64-NEXT:     ColEnd: 0
 ; OBJ64-NEXT:   ]
 ; OBJ64-NEXT: ]
 ; OBJ64-NEXT: FunctionLineTable [
 ; OBJ64-NEXT:     ColStart: 0
 ; OBJ64-NEXT:     ColEnd: 0
 ; OBJ64-NEXT:     ColStart: 52
-; OBJ64-NEXT:     ColEnd: 52
+; OBJ64-NEXT:     ColEnd: 0
 ; OBJ64-NEXT:     ColStart: 53
-; OBJ64-NEXT:     ColEnd: 53
+; OBJ64-NEXT:     ColEnd: 0
 ; OBJ64-NEXT:   ]
 ; OBJ64-NEXT: ]
 ; OBJ64-NEXT: FunctionLineTable [
 ; OBJ64-NEXT:     ColStart: 0
 ; OBJ64-NEXT:     ColEnd: 0
 ; OBJ64-NEXT:     ColStart: 62
-; OBJ64-NEXT:     ColEnd: 62
+; OBJ64-NEXT:     ColEnd: 0
 ; OBJ64-NEXT:     ColStart: 63
-; OBJ64-NEXT:     ColEnd: 63
+; OBJ64-NEXT:     ColEnd: 0
 ; OBJ64-NEXT:     ColStart: 72
-; OBJ64-NEXT:     ColEnd: 72
+; OBJ64-NEXT:     ColEnd: 0
 ; OBJ64-NEXT:     ColStart: 73
-; OBJ64-NEXT:     ColEnd: 73
+; OBJ64-NEXT:     ColEnd: 0
 ; OBJ64-NEXT:   ]
 ; OBJ64-NEXT: ]