]> git.lizzy.rs Git - rust.git/commitdiff
Emit 1-based column numbers in debuginfo
authorTomasz Miąsko <tomasz.miasko@gmail.com>
Fri, 21 Feb 2020 00:00:00 +0000 (00:00 +0000)
committerTomasz Miąsko <tomasz.miasko@gmail.com>
Wed, 26 Feb 2020 20:45:34 +0000 (21:45 +0100)
The debuginfo column numbers are 1-based. The value 0 indicates that no
column has been specified. Translate 0-based column numbers to 1-based
when emitting debug information.

src/librustc_codegen_llvm/debuginfo/create_scope_map.rs
src/librustc_codegen_llvm/debuginfo/source_loc.rs
src/test/codegen/debug-column.rs [new file with mode: 0644]

index cdb9657e1ff3c3b294b1a57068e3ebc59f8ab86b..de029ce51b321a4ce5d0c7a55fd9ea4a0b66f2c0 100644 (file)
@@ -79,7 +79,8 @@ fn make_mir_scope(
             parent_scope.scope_metadata.unwrap(),
             file_metadata,
             loc.line as c_uint,
-            loc.col.to_usize() as c_uint,
+            // Loc column is 0-based while debug one is 1-based.
+            loc.col.to_usize() as c_uint + 1,
         ))
     };
     debug_context.scopes[scope] = DebugScope {
index 1f871c7d207a41acc5dd160c9f9086f45b7bddcd..ae5d9a7c8d89d99f6b28582333c5e27a4ab0ef74 100644 (file)
@@ -19,7 +19,8 @@ pub fn create_debug_loc(&self, scope: &'ll DIScope, span: Span) -> &'ll Value {
         let col_used = if self.sess().target.target.options.is_like_msvc {
             UNKNOWN_COLUMN_NUMBER
         } else {
-            loc.col.to_usize() as c_uint
+            // Loc column is 0-based while debug one is 1-based.
+            loc.col.to_usize() as c_uint + 1
         };
 
         unsafe {
diff --git a/src/test/codegen/debug-column.rs b/src/test/codegen/debug-column.rs
new file mode 100644 (file)
index 0000000..4a7b417
--- /dev/null
@@ -0,0 +1,16 @@
+// Verify that emitted debuginfo column nubmers are 1-based. Regression test for issue #65437.
+//
+// ignore-windows
+// compile-flags: -C debuginfo=2
+
+fn main() {
+    unsafe {
+        // CHECK: call void @giraffe(), !dbg [[DBG:!.*]]
+        // CHECK: [[DBG]] = !DILocation(line: 10, column: 9
+        giraffe();
+    }
+}
+
+extern {
+    fn giraffe();
+}