Skip to content

Commit 5080ac4

Browse files
committed
Print non-std frames to stdout in backtrace-api test
1 parent 362e34a commit 5080ac4

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

tests/run-pass/backtrace-api.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,26 @@ struct MiriFrame {
1414
colno: u32
1515
}
1616

17+
fn func_a() -> Box<[*mut ()]> { func_b::<u8>() }
18+
fn func_b<T>() -> Box<[*mut ()]> { func_c() }
19+
fn func_c() -> Box<[*mut ()]> { unsafe { miri_get_backtrace() } }
20+
1721
fn main() {
18-
let frames = unsafe { miri_get_backtrace() };
22+
let mut seen_main = false;
23+
let frames = func_a();
1924
for frame in frames.into_iter() {
2025
let miri_frame = unsafe { miri_resolve_frame(*frame, 0) };
2126
let name = String::from_utf8(miri_frame.name.into()).unwrap();
2227
let filename = String::from_utf8(miri_frame.filename.into()).unwrap();
23-
eprintln!("{}:{}:{} ({})", filename, miri_frame.lineno, miri_frame.colno, name);
28+
29+
// Print every frame to stderr.
30+
let out = format!("{}:{}:{} ({})", filename, miri_frame.lineno, miri_frame.colno, name);
31+
eprintln!("{}", out);
32+
// Print the 'main' frame (and everything before it) to stdout, skipping
33+
// the printing of internal (and possibly fragile) libstd frames.
34+
if !seen_main {
35+
println!("{}", out);
36+
seen_main = name == "main";
37+
}
2438
}
2539
}

tests/run-pass/backtrace-api.stderr

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
$DIR/backtrace-api.rs:18:27 (main)
1+
$DIR/backtrace-api.rs:19:42 (func_c)
2+
$DIR/backtrace-api.rs:18:36 (func_b::<u8>)
3+
$DIR/backtrace-api.rs:17:33 (func_a)
4+
$DIR/backtrace-api.rs:23:18 (main)
25
RUSTLIB/src/rust/library/core/src/ops/function.rs:LL:COL (<fn() as std::ops::FnOnce<()>>::call_once - shim(fn()))
36
RUSTLIB/src/rust/library/std/src/sys_common/backtrace.rs:LL:COL (std::sys_common::backtrace::__rust_begin_short_backtrace::<fn(), ()>)
47
RUSTLIB/src/rust/library/std/src/rt.rs:LL:COL (std::rt::lang_start::<()>::{{closure}}#0)

tests/run-pass/backtrace-api.stdout

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
$DIR/backtrace-api.rs:19:42 (func_c)
2+
$DIR/backtrace-api.rs:18:36 (func_b::<u8>)
3+
$DIR/backtrace-api.rs:17:33 (func_a)
4+
$DIR/backtrace-api.rs:23:18 (main)

0 commit comments

Comments
 (0)