]> git.lizzy.rs Git - rust.git/commitdiff
Print non-std frames to stdout in `backtrace-api` test
authorAaron Hill <aa1ronham@gmail.com>
Thu, 24 Sep 2020 19:05:50 +0000 (15:05 -0400)
committerAaron Hill <aa1ronham@gmail.com>
Mon, 28 Sep 2020 17:44:45 +0000 (13:44 -0400)
tests/run-pass/backtrace-api.rs
tests/run-pass/backtrace-api.stderr
tests/run-pass/backtrace-api.stdout [new file with mode: 0644]

index 231b718cd3eb949460f11a77f21c1b22723e0b6b..73a3f6242d5b89903d650f9d8a425d0088c522f2 100644 (file)
@@ -14,12 +14,26 @@ struct MiriFrame {
     colno: u32
 }
 
+fn func_a() -> Box<[*mut ()]> { func_b::<u8>() }
+fn func_b<T>() -> Box<[*mut ()]> { func_c() }
+fn func_c() -> Box<[*mut ()]> { unsafe { miri_get_backtrace() } }
+
 fn main() {
-    let frames = unsafe { miri_get_backtrace() };
+    let mut seen_main = false;
+    let frames = func_a();
     for frame in frames.into_iter() {
         let miri_frame = unsafe { miri_resolve_frame(*frame, 0) };
         let name = String::from_utf8(miri_frame.name.into()).unwrap();
         let filename = String::from_utf8(miri_frame.filename.into()).unwrap();
-        eprintln!("{}:{}:{} ({})", filename, miri_frame.lineno, miri_frame.colno, name);
+
+        // Print every frame to stderr.
+        let out = format!("{}:{}:{} ({})", filename, miri_frame.lineno, miri_frame.colno, name);
+        eprintln!("{}", out);
+        // Print the 'main' frame (and everything before it) to stdout, skipping
+        // the printing of internal (and possibly fragile) libstd frames.
+        if !seen_main {
+            println!("{}", out);
+            seen_main = name == "main";
+        }
     }
 }
index 042ca843d0e12447ed0354b48178b0f7abc11355..b96def8093a4449798a1a4f29d552d10f4de4e6f 100644 (file)
@@ -1,4 +1,7 @@
-$DIR/backtrace-api.rs:18:27 (main)
+$DIR/backtrace-api.rs:19:42 (func_c)
+$DIR/backtrace-api.rs:18:36 (func_b::<u8>)
+$DIR/backtrace-api.rs:17:33 (func_a)
+$DIR/backtrace-api.rs:23:18 (main)
 RUSTLIB/src/rust/library/core/src/ops/function.rs:LL:COL (<fn() as std::ops::FnOnce<()>>::call_once - shim(fn()))
 RUSTLIB/src/rust/library/std/src/sys_common/backtrace.rs:LL:COL (std::sys_common::backtrace::__rust_begin_short_backtrace::<fn(), ()>)
 RUSTLIB/src/rust/library/std/src/rt.rs:LL:COL (std::rt::lang_start::<()>::{{closure}}#0)
diff --git a/tests/run-pass/backtrace-api.stdout b/tests/run-pass/backtrace-api.stdout
new file mode 100644 (file)
index 0000000..0d8aaa7
--- /dev/null
@@ -0,0 +1,4 @@
+$DIR/backtrace-api.rs:19:42 (func_c)
+$DIR/backtrace-api.rs:18:36 (func_b::<u8>)
+$DIR/backtrace-api.rs:17:33 (func_a)
+$DIR/backtrace-api.rs:23:18 (main)