From 45d5a37787accac8bd4276ea47872a561069109c Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Wed, 11 Mar 2020 20:05:44 +0100 Subject: [PATCH 1/2] rustup+fix --- rust-version | 2 +- src/machine.rs | 3 +-- src/shims/panic.rs | 10 +++------- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/rust-version b/rust-version index fb138448f9..66d096c0a0 100644 --- a/rust-version +++ b/rust-version @@ -1 +1 @@ -303d8aff6092709edd4dbd35b1c88e9aa40bf6d8 +c20d7eecbc0928b57da8fe30b2ef8528e2bdd5be diff --git a/src/machine.rs b/src/machine.rs index f69606e48f..bd5884786c 100644 --- a/src/machine.rs +++ b/src/machine.rs @@ -265,11 +265,10 @@ impl<'mir, 'tcx> Machine<'mir, 'tcx> for Evaluator<'tcx> { #[inline(always)] fn assert_panic( ecx: &mut InterpCx<'mir, 'tcx, Self>, - span: Span, msg: &mir::AssertMessage<'tcx>, unwind: Option, ) -> InterpResult<'tcx> { - ecx.assert_panic(span, msg, unwind) + ecx.assert_panic(msg, unwind) } #[inline(always)] diff --git a/src/shims/panic.rs b/src/shims/panic.rs index 2968bd9b58..d6f563deb0 100644 --- a/src/shims/panic.rs +++ b/src/shims/panic.rs @@ -14,7 +14,6 @@ use rustc::mir; use rustc::ty::{self, layout::LayoutOf}; use rustc_target::spec::PanicStrategy; -use rustc_span::source_map::Span; use crate::*; @@ -176,7 +175,6 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx fn assert_panic( &mut self, - span: Span, msg: &mir::AssertMessage<'tcx>, unwind: Option, ) -> InterpResult<'tcx> { @@ -187,11 +185,9 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx BoundsCheck { ref index, ref len } => { // Forward to `panic_bounds_check` lang item. - // First arg: Caller location. - let location = this.alloc_caller_location_for_span(span); - // Second arg: index. + // First arg: index. let index = this.read_scalar(this.eval_operand(index, None)?)?; - // Third arg: len. + // Second arg: len. let len = this.read_scalar(this.eval_operand(len, None)?)?; // Call the lang item. @@ -199,7 +195,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx let panic_bounds_check = ty::Instance::mono(this.tcx.tcx, panic_bounds_check); this.call_function( panic_bounds_check, - &[location.ptr.into(), index.into(), len.into()], + &[index.into(), len.into()], None, StackPopCleanup::Goto { ret: None, unwind }, )?; From 76ee8ff4589b5085c68c5efbebd8d3fb07b8a00d Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Wed, 11 Mar 2020 20:21:44 +0100 Subject: [PATCH 2/2] use ctfe_backtracte variable for backtrace control --- src/bin/miri.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/bin/miri.rs b/src/bin/miri.rs index d270964323..e40bfcf627 100644 --- a/src/bin/miri.rs +++ b/src/bin/miri.rs @@ -7,13 +7,10 @@ extern crate log; extern crate log_settings; extern crate miri; extern crate rustc; -extern crate rustc_codegen_utils; extern crate rustc_driver; -extern crate rustc_errors; extern crate rustc_hir; extern crate rustc_interface; -extern crate rustc_metadata; -extern crate rustc_span; +extern crate rustc_session; use std::convert::TryFrom; use std::env; @@ -21,9 +18,11 @@ use std::str::FromStr; use hex::FromHexError; +use rustc_session::CtfeBacktrace; use rustc_driver::Compilation; use rustc_hir::def_id::LOCAL_CRATE; use rustc_interface::{interface, Queries}; +use rustc::ty::TyCtxt; struct MiriCompilerCalls { miri_config: miri::MiriConfig, @@ -35,10 +34,10 @@ impl rustc_driver::Callbacks for MiriCompilerCalls { compiler: &interface::Compiler, queries: &'tcx Queries<'tcx>, ) -> Compilation { - init_late_loggers(); compiler.session().abort_if_errors(); queries.global_ctxt().unwrap().peek_mut().enter(|tcx| { + init_late_loggers(tcx); let (entry_def_id, _) = tcx.entry_fn(LOCAL_CRATE).expect("no main function found!"); let mut config = self.miri_config.clone(); @@ -72,7 +71,7 @@ fn init_early_loggers() { } } -fn init_late_loggers() { +fn init_late_loggers(tcx: TyCtxt<'_>) { // We initialize loggers right before we start evaluation. We overwrite the `RUSTC_LOG` // env var if it is not set, control it based on `MIRI_LOG`. if let Ok(var) = env::var("MIRI_LOG") { @@ -96,10 +95,13 @@ fn init_late_loggers() { // If `MIRI_BACKTRACE` is set and `RUSTC_CTFE_BACKTRACE` is not, set `RUSTC_CTFE_BACKTRACE`. // Do this late, so we ideally only apply this to Miri's errors. - if let Ok(var) = env::var("MIRI_BACKTRACE") { - if env::var("RUSTC_CTFE_BACKTRACE") == Err(env::VarError::NotPresent) { - env::set_var("RUSTC_CTFE_BACKTRACE", &var); - } + if let Ok(val) = env::var("MIRI_BACKTRACE") { + let ctfe_backtrace = match &*val { + "immediate" => CtfeBacktrace::Immediate, + "0" => CtfeBacktrace::Disabled, + _ => CtfeBacktrace::Capture, + }; + *tcx.sess.ctfe_backtrace.borrow_mut() = ctfe_backtrace; } }