about summary refs log tree commit diff
path: root/tests/codegen/debuginfo-inline-callsite-location.rs
diff options
context:
space:
mode:
authorDaniel Paoliello <danpao@microsoft.com>2023-08-07 14:24:41 -0700
committerDaniel Paoliello <danpao@microsoft.com>2023-08-11 10:21:52 -0700
commit687bffa49375aa00bacc51f5d9adfb84a9453e17 (patch)
tree84485ddb451524c2189daf67fc59b3d839203812 /tests/codegen/debuginfo-inline-callsite-location.rs
parentfaee636ebfff793ea9dcff17960a611b580e3cd5 (diff)
downloadrust-687bffa49375aa00bacc51f5d9adfb84a9453e17.tar.gz
rust-687bffa49375aa00bacc51f5d9adfb84a9453e17.zip
Use the same DISubprogram for each instance of the same inlined function within the caller
Diffstat (limited to 'tests/codegen/debuginfo-inline-callsite-location.rs')
-rw-r--r--tests/codegen/debuginfo-inline-callsite-location.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/codegen/debuginfo-inline-callsite-location.rs b/tests/codegen/debuginfo-inline-callsite-location.rs
new file mode 100644
index 00000000000..e2ea9dda4a0
--- /dev/null
+++ b/tests/codegen/debuginfo-inline-callsite-location.rs
@@ -0,0 +1,26 @@
+// compile-flags: -g -O
+
+// Check that each inline call site for the same function uses the same "sub-program" so that LLVM
+// can correctly merge the debug info if it merges the inlined code (e.g., for merging of tail
+// calls to panic.
+
+// CHECK:       tail call void @_ZN4core9panicking5panic17h{{([0-9a-z]{16})}}E
+// CHECK-SAME:  !dbg ![[#first_dbg:]]
+// CHECK:       tail call void @_ZN4core9panicking5panic17h{{([0-9a-z]{16})}}E
+// CHECK-SAME:  !dbg ![[#second_dbg:]]
+
+// CHECK:       ![[#func_dbg:]] = distinct !DISubprogram(name: "unwrap<i32>"
+// CHECK:       ![[#first_dbg]] = !DILocation(line: [[#]]
+// CHECK-SAME:  scope: ![[#func_dbg]], inlinedAt: ![[#]])
+// CHECK:       ![[#second_dbg]] = !DILocation(line: [[#]]
+// CHECK-SAME:  scope: ![[#func_dbg]], inlinedAt: ![[#]])
+
+#![crate_type = "lib"]
+
+#[no_mangle]
+extern "C" fn add_numbers(x: &Option<i32>, y: &Option<i32>) -> i32 {
+    let x1 = x.unwrap();
+    let y1 = y.unwrap();
+
+    x1 + y1
+}