Rollup merge of #113028 - fmease:rustdoc-x-crate-itiap-clean-term, r=notriddle

rustdoc: handle assoc const equalities in cross-crate impl-Trait-in-arg-pos

Fixes FIXME (the added test previously lead to an ICE).

`@rustbot` label A-cross-crate-reexports
This commit is contained in:
Takayuki Maeda 2023-06-26 01:50:28 +09:00 committed by GitHub
commit 019f43e6c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 13 deletions

View File

@ -791,10 +791,10 @@ fn clean_ty_generics<'tcx>(
})
.collect::<ThinVec<GenericParamDef>>();
// param index -> [(trait DefId, associated type name & generics, type, higher-ranked params)]
// param index -> [(trait DefId, associated type name & generics, term, higher-ranked params)]
let mut impl_trait_proj = FxHashMap::<
u32,
Vec<(DefId, PathSegment, ty::Binder<'_, Ty<'_>>, Vec<GenericParamDef>)>,
Vec<(DefId, PathSegment, ty::Binder<'_, ty::Term<'_>>, Vec<GenericParamDef>)>,
>::default();
let where_predicates = preds
@ -852,11 +852,10 @@ fn clean_ty_generics<'tcx>(
.as_ref()
.and_then(|(lhs, rhs): &(Type, _)| Some((lhs.projection()?, rhs)))
{
// FIXME(...): Remove this unwrap()
impl_trait_proj.entry(param_idx).or_default().push((
trait_did,
name,
rhs.map_bound(|rhs| rhs.ty().unwrap()),
*rhs,
p.get_bound_params()
.into_iter()
.flatten()
@ -879,15 +878,8 @@ fn clean_ty_generics<'tcx>(
let crate::core::ImplTraitParam::ParamIndex(idx) = param else { unreachable!() };
if let Some(proj) = impl_trait_proj.remove(&idx) {
for (trait_did, name, rhs, bound_params) in proj {
let rhs = clean_middle_ty(rhs, cx, None, None);
simplify::merge_bounds(
cx,
&mut bounds,
bound_params,
trait_did,
name,
&Term::Type(rhs),
);
let rhs = clean_middle_term(rhs, cx);
simplify::merge_bounds(cx, &mut bounds, bound_params, trait_did, name, &rhs);
}
}

View File

@ -0,0 +1,8 @@
// aux-crate:assoc_const_equality=assoc-const-equality.rs
// edition:2021
#![crate_name = "user"]
// @has user/fn.accept.html
// @has - '//pre[@class="rust item-decl"]' 'fn accept(_: impl Trait<K = 0>)'
pub use assoc_const_equality::accept;

View File

@ -0,0 +1,7 @@
#![feature(associated_const_equality)]
pub fn accept(_: impl Trait<K = 0>) {}
pub trait Trait {
const K: i32;
}