diff options
| author | Dylan DPC <99973273+Dylan-DPC@users.noreply.github.com> | 2022-11-02 22:32:03 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-02 22:32:03 +0530 |
| commit | bbd3a106636d0e283c825310c45a071e9699ee79 (patch) | |
| tree | c299b98473e44e62c3feea8b9d2554127908a1a5 /compiler | |
| parent | 109f887bf54718cea89b9b9c51ada1f06956b335 (diff) | |
| parent | e24df2778fb7a19dfe386ad563ea216a816db94a (diff) | |
Rollup merge of #103774 - compiler-errors:dyn-trait-in-type-name, r=eholk
Format `dyn Trait` better in `type_name` intrinsic
Noticed this in #103764 (though not related to that PR at all!)
```rust
trait Foo {
type Bar;
}
fn main() {
println!(
"`dyn Fn(i32, i32) -> i32` => `{}`",
std::any::type_name::<dyn Fn(i32, i32) -> i32>()
);
println!(
"`dyn Foo<Bar = i32> + Send + Sync` => `{}`",
std::any::type_name::<dyn Foo<Bar = i32> + Send + Sync>()
);
}
```
```
`dyn Fn(i32, i32) -> i32` => `dyn core::ops::function::Fn<(i32, i32)>+Output = i32`
`dyn Foo<Bar = i32> + Send + Sync` => `dyn playground::Foo+Bar = i32+core::marker::Sync+core::marker::Send`
```
Just reuse `pretty_print_dyn_existential` which already makes an attempt to make its output stable.
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_const_eval/src/util/type_name.rs | 12 | ||||
| -rw-r--r-- | compiler/rustc_middle/src/ty/print/pretty.rs | 2 |
2 files changed, 3 insertions, 11 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<ty::Binder<'tcx, ty::ExistentialPredicate<'tcx>>>, ) -> Result<Self::DynExistential, Self::Error> { - 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<Self::Path, Self::Error> { 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 { |
