Skip to content

Commit 76ee8ff

Browse files
committed
use ctfe_backtracte variable for backtrace control
1 parent 45d5a37 commit 76ee8ff

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

src/bin/miri.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,22 @@ extern crate log;
77
extern crate log_settings;
88
extern crate miri;
99
extern crate rustc;
10-
extern crate rustc_codegen_utils;
1110
extern crate rustc_driver;
12-
extern crate rustc_errors;
1311
extern crate rustc_hir;
1412
extern crate rustc_interface;
15-
extern crate rustc_metadata;
16-
extern crate rustc_span;
13+
extern crate rustc_session;
1714

1815
use std::convert::TryFrom;
1916
use std::env;
2017
use std::str::FromStr;
2118

2219
use hex::FromHexError;
2320

21+
use rustc_session::CtfeBacktrace;
2422
use rustc_driver::Compilation;
2523
use rustc_hir::def_id::LOCAL_CRATE;
2624
use rustc_interface::{interface, Queries};
25+
use rustc::ty::TyCtxt;
2726

2827
struct MiriCompilerCalls {
2928
miri_config: miri::MiriConfig,
@@ -35,10 +34,10 @@ impl rustc_driver::Callbacks for MiriCompilerCalls {
3534
compiler: &interface::Compiler,
3635
queries: &'tcx Queries<'tcx>,
3736
) -> Compilation {
38-
init_late_loggers();
3937
compiler.session().abort_if_errors();
4038

4139
queries.global_ctxt().unwrap().peek_mut().enter(|tcx| {
40+
init_late_loggers(tcx);
4241
let (entry_def_id, _) = tcx.entry_fn(LOCAL_CRATE).expect("no main function found!");
4342
let mut config = self.miri_config.clone();
4443

@@ -72,7 +71,7 @@ fn init_early_loggers() {
7271
}
7372
}
7473

75-
fn init_late_loggers() {
74+
fn init_late_loggers(tcx: TyCtxt<'_>) {
7675
// We initialize loggers right before we start evaluation. We overwrite the `RUSTC_LOG`
7776
// env var if it is not set, control it based on `MIRI_LOG`.
7877
if let Ok(var) = env::var("MIRI_LOG") {
@@ -96,10 +95,13 @@ fn init_late_loggers() {
9695

9796
// If `MIRI_BACKTRACE` is set and `RUSTC_CTFE_BACKTRACE` is not, set `RUSTC_CTFE_BACKTRACE`.
9897
// Do this late, so we ideally only apply this to Miri's errors.
99-
if let Ok(var) = env::var("MIRI_BACKTRACE") {
100-
if env::var("RUSTC_CTFE_BACKTRACE") == Err(env::VarError::NotPresent) {
101-
env::set_var("RUSTC_CTFE_BACKTRACE", &var);
102-
}
98+
if let Ok(val) = env::var("MIRI_BACKTRACE") {
99+
let ctfe_backtrace = match &*val {
100+
"immediate" => CtfeBacktrace::Immediate,
101+
"0" => CtfeBacktrace::Disabled,
102+
_ => CtfeBacktrace::Capture,
103+
};
104+
*tcx.sess.ctfe_backtrace.borrow_mut() = ctfe_backtrace;
103105
}
104106
}
105107

0 commit comments

Comments
 (0)