diff options
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_const_eval/src/const_eval/eval_queries.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_middle/src/mir/consts.rs | 16 | ||||
| -rw-r--r-- | compiler/rustc_middle/src/mir/pretty.rs | 5 |
3 files changed, 18 insertions, 5 deletions
diff --git a/compiler/rustc_const_eval/src/const_eval/eval_queries.rs b/compiler/rustc_const_eval/src/const_eval/eval_queries.rs index 9e4e7911c3a..8ee3a0cc967 100644 --- a/compiler/rustc_const_eval/src/const_eval/eval_queries.rs +++ b/compiler/rustc_const_eval/src/const_eval/eval_queries.rs @@ -67,7 +67,7 @@ fn eval_body_using_ecx<'mir, 'tcx>( trace!( "eval_body_using_ecx: pushing stack frame for global: {}{}", with_no_trimmed_paths!(ecx.tcx.def_path_str(cid.instance.def_id())), - cid.promoted.map_or_else(String::new, |p| format!("::promoted[{p:?}]")) + cid.promoted.map_or_else(String::new, |p| format!("::{p:?}")) ); ecx.push_stack_frame( diff --git a/compiler/rustc_middle/src/mir/consts.rs b/compiler/rustc_middle/src/mir/consts.rs index 9731d86fb17..5feee3c3ba1 100644 --- a/compiler/rustc_middle/src/mir/consts.rs +++ b/compiler/rustc_middle/src/mir/consts.rs @@ -7,6 +7,7 @@ use rustc_target::abi::{HasDataLayout, Size}; use crate::mir::interpret::{alloc_range, AllocId, ConstAllocation, ErrorHandled, Scalar}; use crate::mir::{pretty_print_const_value, Promoted}; +use crate::ty::print::with_no_trimmed_paths; use crate::ty::GenericArgsRef; use crate::ty::ScalarInt; use crate::ty::{self, print::pretty_print_const, Ty, TyCtxt}; @@ -489,9 +490,18 @@ impl<'tcx> Display for Const<'tcx> { Const::Ty(c) => pretty_print_const(c, fmt, true), Const::Val(val, ty) => pretty_print_const_value(val, ty, fmt), // FIXME(valtrees): Correctly print mir constants. - Const::Unevaluated(..) => { - fmt.write_str("_")?; - Ok(()) + Const::Unevaluated(c, _ty) => { + ty::tls::with(move |tcx| { + let c = tcx.lift(c).unwrap(); + // Matches `GlobalId` printing. + let instance = + with_no_trimmed_paths!(tcx.def_path_str_with_args(c.def, c.args)); + write!(fmt, "{instance}")?; + if let Some(promoted) = c.promoted { + write!(fmt, "::{promoted:?}")?; + } + Ok(()) + }) } } } diff --git a/compiler/rustc_middle/src/mir/pretty.rs b/compiler/rustc_middle/src/mir/pretty.rs index 18069547a7e..090b84ff08f 100644 --- a/compiler/rustc_middle/src/mir/pretty.rs +++ b/compiler/rustc_middle/src/mir/pretty.rs @@ -496,7 +496,7 @@ fn write_mir_sig(tcx: TyCtxt<'_>, body: &Body<'_>, w: &mut dyn io::Write) -> io: _ => tcx.is_closure_like(def_id), }; match (kind, body.source.promoted) { - (_, Some(i)) => write!(w, "{i:?} in ")?, + (_, Some(_)) => write!(w, "const ")?, // promoteds are the closest to consts (DefKind::Const | DefKind::AssocConst, _) => write!(w, "const ")?, (DefKind::Static(hir::Mutability::Not), _) => write!(w, "static ")?, (DefKind::Static(hir::Mutability::Mut), _) => write!(w, "static mut ")?, @@ -509,6 +509,9 @@ fn write_mir_sig(tcx: TyCtxt<'_>, body: &Body<'_>, w: &mut dyn io::Write) -> io: // see notes on #41697 elsewhere write!(w, "{}", tcx.def_path_str(def_id))? } + if let Some(p) = body.source.promoted { + write!(w, "::{p:?}")?; + } if body.source.promoted.is_none() && is_function { write!(w, "(")?; |
