Skip to content

Commit 87c319a

Browse files
authored
Rollup merge of #139777 - compiler-errors:debuggier-proj, r=lcnr
Remove `define_debug_via_print` for `ExistentialProjection`, use regular structural debug impl The pretty print impl for `ExistentialProjection` always prints `AssocItem = Ty`: https://github.com/rust-lang/rust/blob/6e830462330a9e34d8176e86d4580dd0820c6fd5/compiler/rustc_middle/src/ty/print/pretty.rs#L3293-L3299 We can't change this, b/c it's used for both pretty printing dyn types and for legacy symbol mangling. Unfortunately, we also use this printing procedure for `Debug` impls. That means that it leaves out the *trait name* and *trait args* when debug printing an `ExistentialProjection` (or an `ExistentialPredicate` which has a variant for `ExistentialProjection`). This leads to awkward situations, like the two seemingly identical existential projection predicates present in a `dyn Trait` type using the definition below: ```rust trait Super { type Assoc; } trait Foo: Super<A, Assoc = i32> + Super<B, Assoc = i32> {} ``` Namely, they both just render as `Projection(Assoc = i32)`! This makes debugging `dyn Trait` type system bugs really hard, so let's use the *regular* debug impl for `ExistentialProjection`.
2 parents 143f5d7 + 83ea345 commit 87c319a

File tree

2 files changed

+2
-2
lines changed

2 files changed

+2
-2
lines changed

Diff for: compiler/rustc_type_ir/src/ir_print.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ define_display_via_print!(
6060
PatternKind,
6161
);
6262

63-
define_debug_via_print!(TraitRef, ExistentialTraitRef, ExistentialProjection, PatternKind);
63+
define_debug_via_print!(TraitRef, ExistentialTraitRef, PatternKind);
6464

6565
impl<I: Interner, T> fmt::Display for OutlivesPredicate<I, T>
6666
where

Diff for: compiler/rustc_type_ir/src/predicate.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ impl<I: Interner> ty::Binder<I, ExistentialTraitRef<I>> {
374374
}
375375

376376
/// A `ProjectionPredicate` for an `ExistentialTraitRef`.
377-
#[derive_where(Clone, Copy, Hash, PartialEq, Eq; I: Interner)]
377+
#[derive_where(Clone, Copy, Hash, PartialEq, Eq, Debug; I: Interner)]
378378
#[derive(TypeVisitable_Generic, TypeFoldable_Generic, Lift_Generic)]
379379
#[cfg_attr(
380380
feature = "nightly",

0 commit comments

Comments
 (0)