diff --git a/tests/run-pass/backtrace-api.rs b/tests/run-pass/backtrace-api.rs index 231b718cd3eb..73a3f6242d5b 100644 --- a/tests/run-pass/backtrace-api.rs +++ b/tests/run-pass/backtrace-api.rs @@ -14,12 +14,26 @@ struct MiriFrame { colno: u32 } +fn func_a() -> Box<[*mut ()]> { func_b::() } +fn func_b() -> 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"; + } } } diff --git a/tests/run-pass/backtrace-api.stderr b/tests/run-pass/backtrace-api.stderr index 042ca843d0e1..b96def8093a4 100644 --- a/tests/run-pass/backtrace-api.stderr +++ b/tests/run-pass/backtrace-api.stderr @@ -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::) +$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 (>::call_once - shim(fn())) RUSTLIB/src/rust/library/std/src/sys_common/backtrace.rs:LL:COL (std::sys_common::backtrace::__rust_begin_short_backtrace::) 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 index 000000000000..0d8aaa7a3261 --- /dev/null +++ b/tests/run-pass/backtrace-api.stdout @@ -0,0 +1,4 @@ +$DIR/backtrace-api.rs:19:42 (func_c) +$DIR/backtrace-api.rs:18:36 (func_b::) +$DIR/backtrace-api.rs:17:33 (func_a) +$DIR/backtrace-api.rs:23:18 (main)