}
// Add backtrace
let frames = ecx.generate_stacktrace(None);
- // We iterate with indices because we need to look at the next frame (the caller).
- for idx in 0..frames.len() {
- let frame_info = &frames[idx];
- let call_site_is_local = frames
- .get(idx + 1)
- .map_or(false, |caller_info| caller_info.instance.def_id().is_local());
- if call_site_is_local {
- err.span_note(frame_info.call_site, &frame_info.to_string());
+ for (idx, frame_info) in frames.iter().enumerate() {
+ let is_local = frame_info.instance.def_id().is_local();
+ // No span for non-local frames and the first frame (which is the error site).
+ if is_local && idx > 0 {
+ err.span_note(frame_info.span, &frame_info.to_string());
} else {
err.note(&frame_info.to_string());
}
enum Void {}
fn f(v: Void) -> ! {
- match v {} //~ ERROR entering unreachable code
+ match v {} //~ ERROR entering unreachable code
}
fn main() {
let v: Void = unsafe {
std::mem::transmute::<(), Void>(())
};
- f(v); //~ inside call to `f`
+ f(v); //~ inside `main`
}