Auto merge of #1304 - RalfJung:backtrace-sep, r=RalfJung
add empty line before backtrace, to separate it from help text I think this improves how things look, and makes it easier to see the help text (it currently kind of drowns next to the backtrace). Before: ``` error: unsupported operation: Miri does not support threading --> /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/sys/unix/thread.rs:68:19 | 68 | let ret = libc::pthread_create(&mut native, &attr, thread_start, &*p as *const _ as *mut _); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Miri does not support threading | = help: this is likely not a bug in the program; it indicates that the program performed an operation that the interpreter does not support = note: inside `std::sys::unix:🧵:Thread::new` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/sys/unix/thread.rs:68:19 = note: inside `std:🧵:Builder::spawn_unchecked::<[closure@tests/compile-fail/thread-spawn.rs:6:19: 6:24], ()>` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/thread/mod.rs:492:26 = note: inside `std:🧵:Builder::spawn::<[closure@tests/compile-fail/thread-spawn.rs:6:19: 6:24], ()>` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/thread/mod.rs:386:18 = note: inside `std:🧵:spawn::<[closure@tests/compile-fail/thread-spawn.rs:6:19: 6:24], ()>` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/thread/mod.rs:619:5 note: inside `main` at tests/compile-fail/thread-spawn.rs:6:5 --> tests/compile-fail/thread-spawn.rs:6:5 | 6 | thread::spawn(|| {}); | ^^^^^^^^^^^^^^^^^^^^ = note: inside closure at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/rt.rs:67:34 = note: inside closure at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/rt.rs:52:73 = note: inside `std::sys_common::backtrace::__rust_begin_short_backtrace::<[closure@DefId(1:6030 ~ std[2f86]::rt[0]::lang_start_internal[0]::{{closure}}[0]::{{closure}}[0]) 0:&dyn std::ops::Fn() -> i32 + std::marker::Sync + std::panic::RefUnwindSafe], i32>` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/sys_common/backtrace.rs:130:5 = note: inside closure at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/rt.rs:52:13 = note: inside `std::panicking::try::do_call::<[closure@DefId(1:6029 ~ std[2f86]::rt[0]::lang_start_internal[0]::{{closure}}[0]) 0:&&dyn std::ops::Fn() -> i32 + std::marker::Sync + std::panic::RefUnwindSafe], i32>` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/panicking.rs:331:40 = note: inside `std::panicking::try::<i32, [closure@DefId(1:6029 ~ std[2f86]::rt[0]::lang_start_internal[0]::{{closure}}[0]) 0:&&dyn std::ops::Fn() -> i32 + std::marker::Sync + std::panic::RefUnwindSafe]>` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/panicking.rs:274:15 = note: inside `std::panic::catch_unwind::<[closure@DefId(1:6029 ~ std[2f86]::rt[0]::lang_start_internal[0]::{{closure}}[0]) 0:&&dyn std::ops::Fn() -> i32 + std::marker::Sync + std::panic::RefUnwindSafe], i32>` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/panic.rs:394:14 = note: inside `std::rt::lang_start_internal` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/rt.rs:51:25 = note: inside `std::rt::lang_start::<()>` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/rt.rs:67:5 ``` After: ``` error: unsupported operation: Miri does not support threading --> /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/sys/unix/thread.rs:68:19 | 68 | let ret = libc::pthread_create(&mut native, &attr, thread_start, &*p as *const _ as *mut _); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Miri does not support threading | = help: this is likely not a bug in the program; it indicates that the program performed an operation that the interpreter does not support = note: inside `std::sys::unix:🧵:Thread::new` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/sys/unix/thread.rs:68:19 = note: inside `std:🧵:Builder::spawn_unchecked::<[closure@tests/compile-fail/thread-spawn.rs:6:19: 6:24], ()>` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/thread/mod.rs:492:26 = note: inside `std:🧵:Builder::spawn::<[closure@tests/compile-fail/thread-spawn.rs:6:19: 6:24], ()>` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/thread/mod.rs:386:18 = note: inside `std:🧵:spawn::<[closure@tests/compile-fail/thread-spawn.rs:6:19: 6:24], ()>` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/thread/mod.rs:619:5 note: inside `main` at tests/compile-fail/thread-spawn.rs:6:5 --> tests/compile-fail/thread-spawn.rs:6:5 | 6 | thread::spawn(|| {}); | ^^^^^^^^^^^^^^^^^^^^ = note: inside closure at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/rt.rs:67:34 = note: inside closure at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/rt.rs:52:73 = note: inside `std::sys_common::backtrace::__rust_begin_short_backtrace::<[closure@DefId(1:6030 ~ std[2f86]::rt[0]::lang_start_internal[0]::{{closure}}[0]::{{closure}}[0]) 0:&dyn std::ops::Fn() -> i32 + std::marker::Sync + std::panic::RefUnwindSafe], i32>` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/sys_common/backtrace.rs:130:5 = note: inside closure at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/rt.rs:52:13 = note: inside `std::panicking::try::do_call::<[closure@DefId(1:6029 ~ std[2f86]::rt[0]::lang_start_internal[0]::{{closure}}[0]) 0:&&dyn std::ops::Fn() -> i32 + std::marker::Sync + std::panic::RefUnwindSafe], i32>` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/panicking.rs:331:40 = note: inside `std::panicking::try::<i32, [closure@DefId(1:6029 ~ std[2f86]::rt[0]::lang_start_internal[0]::{{closure}}[0]) 0:&&dyn std::ops::Fn() -> i32 + std::marker::Sync + std::panic::RefUnwindSafe]>` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/panicking.rs:274:15 = note: inside `std::panic::catch_unwind::<[closure@DefId(1:6029 ~ std[2f86]::rt[0]::lang_start_internal[0]::{{closure}}[0]) 0:&&dyn std::ops::Fn() -> i32 + std::marker::Sync + std::panic::RefUnwindSafe], i32>` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/panic.rs:394:14 = note: inside `std::rt::lang_start_internal` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/rt.rs:51:25 = note: inside `std::rt::lang_start::<()>` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/libstd/rt.rs:67:5 ``` What do you think?
This commit is contained in:
commit
2e82a8dc9e
@ -106,7 +106,7 @@ pub fn report_error<'tcx, 'mir>(
|
||||
|
||||
e.print_backtrace();
|
||||
let msg = e.to_string();
|
||||
report_msg(ecx, &format!("{}: {}", title, msg), msg, &helps, true)
|
||||
report_msg(ecx, &format!("{}: {}", title, msg), msg, helps, true)
|
||||
}
|
||||
|
||||
/// Report an error or note (depending on the `error` argument) at the current frame's current statement.
|
||||
@ -115,7 +115,7 @@ fn report_msg<'tcx, 'mir>(
|
||||
ecx: &InterpCx<'mir, 'tcx, Evaluator<'tcx>>,
|
||||
title: &str,
|
||||
span_msg: String,
|
||||
helps: &[String],
|
||||
mut helps: Vec<String>,
|
||||
error: bool,
|
||||
) -> Option<i64> {
|
||||
let span = if let Some(frame) = ecx.stack().last() {
|
||||
@ -129,8 +129,12 @@ fn report_msg<'tcx, 'mir>(
|
||||
ecx.tcx.sess.diagnostic().span_note_diag(span, title)
|
||||
};
|
||||
err.span_label(span, span_msg);
|
||||
for help in helps {
|
||||
err.help(help);
|
||||
if !helps.is_empty() {
|
||||
// Add visual separator before backtrace.
|
||||
helps.last_mut().unwrap().push_str("\n");
|
||||
for help in helps {
|
||||
err.help(&help);
|
||||
}
|
||||
}
|
||||
// Add backtrace
|
||||
let frames = ecx.generate_stacktrace();
|
||||
@ -182,7 +186,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
|
||||
CreatedAlloc(AllocId(id)) =>
|
||||
format!("created allocation with id {}", id),
|
||||
};
|
||||
report_msg(this, "tracking was triggered", msg, &[], false);
|
||||
report_msg(this, "tracking was triggered", msg, vec![], false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -186,8 +186,7 @@ pub fn create_ecx<'mir, 'tcx: 'mir>(
|
||||
/// Returns `Some(return_code)` if program executed completed.
|
||||
/// Returns `None` if an evaluation error occured.
|
||||
pub fn eval_main<'tcx>(tcx: TyCtxt<'tcx>, main_id: DefId, config: MiriConfig) -> Option<i64> {
|
||||
// FIXME: on Windows, locks and TLS dtor management allocate and leave that memory in `static`s.
|
||||
// So we need https://github.com/rust-lang/miri/issues/940 to fix the leaks there.
|
||||
// FIXME: on Windows, we ignore leaks (https://github.com/rust-lang/miri/issues/1302).
|
||||
let ignore_leaks = config.ignore_leaks || tcx.sess.target.target.target_os == "windows";
|
||||
|
||||
let (mut ecx, ret_place) = match create_ecx(tcx, main_id, config) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user