Rollup merge of #103428 - SarthakSingh31:issue-94187, r=compiler-errors
Removed verbose printing from the `PrettyPrinter` when printing constants Partially solves #94187 by completing the first step described in [this comment](https://github.com/rust-lang/rust/issues/94187#issuecomment-1282339909).
This commit is contained in:
commit
ffde0f722e
@ -4,7 +4,7 @@ use rustc_hir::definitions::DisambiguatedDefPathData;
|
||||
use rustc_middle::mir::interpret::{Allocation, ConstAllocation};
|
||||
use rustc_middle::ty::{
|
||||
self,
|
||||
print::{PrettyPrinter, Print, Printer},
|
||||
print::{with_no_verbose_constants, PrettyPrinter, Print, Printer},
|
||||
subst::{GenericArg, GenericArgKind},
|
||||
Ty, TyCtxt,
|
||||
};
|
||||
@ -190,7 +190,9 @@ impl Write for AbsolutePathPrinter<'_> {
|
||||
|
||||
/// Directly returns an `Allocation` containing an absolute path representation of the given type.
|
||||
pub(crate) fn alloc_type_name<'tcx>(tcx: TyCtxt<'tcx>, ty: Ty<'tcx>) -> ConstAllocation<'tcx> {
|
||||
let path = AbsolutePathPrinter { tcx, path: String::new() }.print_type(ty).unwrap().path;
|
||||
let path = with_no_verbose_constants!(
|
||||
AbsolutePathPrinter { tcx, path: String::new() }.print_type(ty).unwrap().path
|
||||
);
|
||||
let alloc = Allocation::from_bytes_byte_aligned_immutable(path.into_bytes());
|
||||
tcx.intern_const_alloc(alloc)
|
||||
}
|
||||
|
@ -63,6 +63,7 @@ thread_local! {
|
||||
static NO_TRIMMED_PATH: Cell<bool> = const { Cell::new(false) };
|
||||
static NO_QUERIES: Cell<bool> = const { Cell::new(false) };
|
||||
static NO_VISIBLE_PATH: Cell<bool> = const { Cell::new(false) };
|
||||
static NO_VERBOSE_CONSTANTS: Cell<bool> = const { Cell::new(false) };
|
||||
}
|
||||
|
||||
macro_rules! define_helper {
|
||||
@ -117,6 +118,9 @@ define_helper!(
|
||||
/// Prevent selection of visible paths. `Display` impl of DefId will prefer
|
||||
/// visible (public) reexports of types as paths.
|
||||
fn with_no_visible_paths(NoVisibleGuard, NO_VISIBLE_PATH);
|
||||
/// Prevent verbose printing of constants. Verbose printing of constants is
|
||||
/// never desirable in some contexts like `std::any::type_name`.
|
||||
fn with_no_verbose_constants(NoVerboseConstantsGuard, NO_VERBOSE_CONSTANTS);
|
||||
);
|
||||
|
||||
/// The "region highlights" are used to control region printing during
|
||||
@ -759,7 +763,7 @@ pub trait PrettyPrinter<'tcx>:
|
||||
}
|
||||
ty::Array(ty, sz) => {
|
||||
p!("[", print(ty), "; ");
|
||||
if self.tcx().sess.verbose() {
|
||||
if !NO_VERBOSE_CONSTANTS.with(|flag| flag.get()) && self.tcx().sess.verbose() {
|
||||
p!(write("{:?}", sz));
|
||||
} else if let ty::ConstKind::Unevaluated(..) = sz.kind() {
|
||||
// Do not try to evaluate unevaluated constants. If we are const evaluating an
|
||||
@ -1181,7 +1185,7 @@ pub trait PrettyPrinter<'tcx>:
|
||||
) -> Result<Self::Const, Self::Error> {
|
||||
define_scoped_cx!(self);
|
||||
|
||||
if self.tcx().sess.verbose() {
|
||||
if !NO_VERBOSE_CONSTANTS.with(|flag| flag.get()) && self.tcx().sess.verbose() {
|
||||
p!(write("Const({:?}: {:?})", ct.kind(), ct.ty()));
|
||||
return Ok(self);
|
||||
}
|
||||
@ -1416,7 +1420,7 @@ pub trait PrettyPrinter<'tcx>:
|
||||
) -> Result<Self::Const, Self::Error> {
|
||||
define_scoped_cx!(self);
|
||||
|
||||
if self.tcx().sess.verbose() {
|
||||
if !NO_VERBOSE_CONSTANTS.with(|flag| flag.get()) && self.tcx().sess.verbose() {
|
||||
p!(write("ValTree({:?}: ", valtree), print(ty), ")");
|
||||
return Ok(self);
|
||||
}
|
||||
|
13
src/test/ui/type/issue-94187-verbose-type-name.rs
Normal file
13
src/test/ui/type/issue-94187-verbose-type-name.rs
Normal file
@ -0,0 +1,13 @@
|
||||
// Check to insure that the output of `std::any::type_name` does not change based on -Zverbose
|
||||
// when printing constants
|
||||
// run-pass
|
||||
// edition: 2018
|
||||
// revisions: normal verbose
|
||||
// [verbose]compile-flags:-Zverbose
|
||||
|
||||
struct Wrapper<const VALUE: usize>;
|
||||
|
||||
fn main() {
|
||||
assert_eq!(std::any::type_name::<[u32; 0]>(), "[u32; 0]");
|
||||
assert_eq!(std::any::type_name::<Wrapper<0>>(), "issue_94187_verbose_type_name::Wrapper<0>");
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user