From b2cddd27bd1ba25f20cb5608d73053170f2ed83b Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Fri, 29 Nov 2019 11:52:53 +0100 Subject: [PATCH] better span for functions whose frame we push 'manually' --- src/eval.rs | 7 +------ src/helpers.rs | 6 +++++- src/shims/panic.rs | 4 ++-- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/eval.rs b/src/eval.rs index f13ef89ff7fe..33bcfcc7380e 100644 --- a/src/eval.rs +++ b/src/eval.rs @@ -221,12 +221,7 @@ pub fn eval_main<'tcx>(tcx: TyCtxt<'tcx>, main_id: DefId, config: MiriConfig) -> }; e.print_backtrace(); if let Some(frame) = ecx.stack().last() { - let block = &frame.body.basic_blocks()[frame.block.unwrap()]; - let span = if frame.stmt < block.statements.len() { - block.statements[frame.stmt].source_info.span - } else { - block.terminator().source_info.span - }; + let span = frame.current_source_info().unwrap().span; let msg = format!("Miri evaluation error: {}", msg); let mut err = ecx.tcx.sess.struct_span_err(span, msg.as_str()); diff --git a/src/helpers.rs b/src/helpers.rs index 68ce014c3068..7bd29e174194 100644 --- a/src/helpers.rs +++ b/src/helpers.rs @@ -132,9 +132,13 @@ fn call_function( // Push frame. let mir = this.load_mir(f.def, None)?; + let span = this.stack().last() + .and_then(Frame::current_source_info) + .map(|si| si.span) + .unwrap_or(DUMMY_SP); this.push_stack_frame( f, - DUMMY_SP, // There is no call site. + span, mir, dest, stack_pop, diff --git a/src/shims/panic.rs b/src/shims/panic.rs index 7cdd81d935c2..3e82519f86b1 100644 --- a/src/shims/panic.rs +++ b/src/shims/panic.rs @@ -166,7 +166,7 @@ fn assert_panic( // Forward to `panic_bounds_check` lang item. // First arg: Caller location. - let location = this.alloc_caller_location_for_span(span)?; + let location = this.alloc_caller_location_for_span(span); // Second arg: index. let index = this.read_scalar(this.eval_operand(index, None)?)?; // Third arg: len. @@ -190,7 +190,7 @@ fn assert_panic( let msg = this.allocate_str(msg, MiriMemoryKind::Static.into()); // Second arg: Caller location. - let location = this.alloc_caller_location_for_span(span)?; + let location = this.alloc_caller_location_for_span(span); // Call the lang item. let panic = this.tcx.lang_items().panic_fn().unwrap();