From e24df2778fb7a19dfe386ad563ea216a816db94a Mon Sep 17 00:00:00 2001 From: Michael Goulet Date: Sun, 30 Oct 2022 19:39:07 +0000 Subject: [PATCH] Format dyn Trait better in type_name intrinsic --- .../rustc_const_eval/src/util/type_name.rs | 12 ++---------- compiler/rustc_middle/src/ty/print/pretty.rs | 2 +- library/core/tests/any.rs | 18 ++++++++++++++++++ .../ui/type/issue-94187-verbose-type-name.rs | 5 +---- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/compiler/rustc_const_eval/src/util/type_name.rs b/compiler/rustc_const_eval/src/util/type_name.rs index 221efc6f981..08a6d69b8e4 100644 --- a/compiler/rustc_const_eval/src/util/type_name.rs +++ b/compiler/rustc_const_eval/src/util/type_name.rs @@ -73,18 +73,10 @@ impl<'tcx> Printer<'tcx> for AbsolutePathPrinter<'tcx> { } fn print_dyn_existential( - mut self, + self, predicates: &'tcx ty::List>>, ) -> Result { - let mut first = true; - for p in predicates { - if !first { - write!(self, "+")?; - } - first = false; - self = p.print(self)?; - } - Ok(self) + self.pretty_print_dyn_existential(predicates) } fn path_crate(mut self, cnum: CrateNum) -> Result { diff --git a/compiler/rustc_middle/src/ty/print/pretty.rs b/compiler/rustc_middle/src/ty/print/pretty.rs index f07c60af248..fab85c39d25 100644 --- a/compiler/rustc_middle/src/ty/print/pretty.rs +++ b/compiler/rustc_middle/src/ty/print/pretty.rs @@ -1137,7 +1137,7 @@ pub trait PrettyPrinter<'tcx>: // // To avoid causing instabilities in compiletest // output, sort the auto-traits alphabetically. - auto_traits.sort_by_cached_key(|did| self.tcx().def_path_str(*did)); + auto_traits.sort_by_cached_key(|did| with_no_trimmed_paths!(self.tcx().def_path_str(*did))); for def_id in auto_traits { if !first { diff --git a/library/core/tests/any.rs b/library/core/tests/any.rs index 9538b813949..e98dac8d12e 100644 --- a/library/core/tests/any.rs +++ b/library/core/tests/any.rs @@ -131,6 +131,24 @@ fn distinct_type_names() { assert_ne!(type_name_of_val(Velocity), type_name_of_val(Velocity(0.0, -9.8)),); } +#[cfg(not(bootstrap))] +#[test] +fn dyn_type_name() { + trait Foo { + type Bar; + } + + assert_eq!( + "dyn core::ops::function::Fn(i32, i32) -> i32", + std::any::type_name:: i32>() + ); + assert_eq!( + "dyn coretests::any::dyn_type_name::Foo \ + + core::marker::Send + core::marker::Sync", + std::any::type_name:: + Send + Sync>() + ); +} + // Test the `Provider` API. struct SomeConcreteType { diff --git a/src/test/ui/type/issue-94187-verbose-type-name.rs b/src/test/ui/type/issue-94187-verbose-type-name.rs index 64f0c09e89b..3713a32eb11 100644 --- a/src/test/ui/type/issue-94187-verbose-type-name.rs +++ b/src/test/ui/type/issue-94187-verbose-type-name.rs @@ -12,8 +12,5 @@ fn main() { struct Wrapper; assert_eq!(type_name::>(), "issue_94187_verbose_type_name::main::Wrapper<0>"); - assert_eq!( - type_name:: u32>(), - "dyn core::ops::function::Fn<(u32,)>+Output = u32" - ); + assert_eq!(type_name:: u32>(), "dyn core::ops::function::Fn(u32) -> u32"); }