@@ -7,23 +7,22 @@ extern crate log;
77extern crate log_settings;
88extern crate miri;
99extern crate rustc;
10- extern crate rustc_codegen_utils;
1110extern crate rustc_driver;
12- extern crate rustc_errors;
1311extern crate rustc_hir;
1412extern crate rustc_interface;
15- extern crate rustc_metadata;
16- extern crate rustc_span;
13+ extern crate rustc_session;
1714
1815use std:: convert:: TryFrom ;
1916use std:: env;
2017use std:: str:: FromStr ;
2118
2219use hex:: FromHexError ;
2320
21+ use rustc_session:: CtfeBacktrace ;
2422use rustc_driver:: Compilation ;
2523use rustc_hir:: def_id:: LOCAL_CRATE ;
2624use rustc_interface:: { interface, Queries } ;
25+ use rustc:: ty:: TyCtxt ;
2726
2827struct 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