Make sure type_param_predicates resolves correctly for RPITIT

This commit is contained in:
Michael Goulet 2024-10-30 22:30:28 +00:00
parent 298c7462c3
commit d53ca63453
2 changed files with 23 additions and 0 deletions

View File

@ -764,6 +764,16 @@ pub(super) fn type_param_predicates<'tcx>(
tcx: TyCtxt<'tcx>,
(item_def_id, def_id, assoc_name): (LocalDefId, LocalDefId, Ident),
) -> ty::EarlyBinder<'tcx, &'tcx [(ty::Clause<'tcx>, Span)]> {
match tcx.opt_rpitit_info(item_def_id.to_def_id()) {
Some(ty::ImplTraitInTraitData::Trait { opaque_def_id, .. }) => {
return tcx.type_param_predicates((opaque_def_id.expect_local(), def_id, assoc_name));
}
Some(ty::ImplTraitInTraitData::Impl { .. }) => {
unreachable!("should not be lowering bounds on RPITIT in impl")
}
None => {}
}
use rustc_hir::*;
use rustc_middle::ty::Ty;

View File

@ -0,0 +1,13 @@
//@ check-pass
// Ensure that we can resolve a shorthand projection in an item bound in an RPITIT.
pub trait Bar {
type Foo;
}
pub trait Baz {
fn boom<X: Bar>() -> impl Bar<Foo = X::Foo>;
}
fn main() {}