]> git.lizzy.rs Git - rust.git/blobdiff - tests/run-pass/backtrace-api.rs
Add an `fn_ptr` field to `MiriFrame`
[rust.git] / tests / run-pass / backtrace-api.rs
index eaf29abfd9f48d16d864367ea8b68e0cfc0f0d1e..19169060038e07d5aee763e8febdd61e9790def5 100644 (file)
@@ -2,20 +2,6 @@
 // normalize-stderr-test "RUSTLIB/(.*):\d+:\d+ "-> "RUSTLIB/$1:LL:COL "
 // normalize-stderr-test "::<.*>" -> ""
 
-extern "Rust" {
-    fn miri_get_backtrace(flags: u64) -> Box<[*mut ()]>;
-    fn miri_resolve_frame(ptr: *mut (), flags: u64) -> MiriFrame;
-}
-
-#[derive(Debug)]
-#[repr(C)]
-struct MiriFrame {
-    name: Box<[u8]>,
-    filename: Box<[u8]>,
-    lineno: u32,
-    colno: u32
-}
-
 #[inline(never)] fn func_a() -> Box<[*mut ()]> { func_b::<u8>() }
 #[inline(never)] fn func_b<T>() -> Box<[*mut ()]> { func_c() }
 
@@ -34,6 +20,10 @@ fn main() {
         let name = String::from_utf8(miri_frame.name.into()).unwrap();
         let filename = String::from_utf8(miri_frame.filename.into()).unwrap();
 
+        if name == "func_a" {
+            assert_eq!(func_a as *mut (), miri_frame.fn_ptr);
+        }
+
         // Print every frame to stderr.
         let out = format!("{}:{}:{} ({})", filename, miri_frame.lineno, miri_frame.colno, name);
         eprintln!("{}", out);
@@ -45,3 +35,22 @@ fn main() {
         }
     }
 }
+
+// This goes at the bottom of the file so that we can change it
+// without disturbing line numbers of the functions in the backtrace.
+
+extern "Rust" {
+    fn miri_get_backtrace(flags: u64) -> Box<[*mut ()]>;
+    fn miri_resolve_frame(ptr: *mut (), flags: u64) -> MiriFrame;
+}
+
+#[derive(Debug)]
+#[repr(C)]
+struct MiriFrame {
+    name: Box<[u8]>,
+    filename: Box<[u8]>,
+    lineno: u32,
+    colno: u32,
+    fn_ptr: *mut (),
+}
+