Rollup merge of #131967 - compiler-errors:lower-mono, r=fmease
Remove `lower_mono_bounds` I'm not convinced about the usefulness of `lower_mono_bounds`, especially since we have *so* many lower-bound-like fns in HIR lowering, so I've just inlined it into its callers.
This commit is contained in:
commit
2cded97c96
@ -13,6 +13,7 @@
|
||||
|
||||
use super::ItemCtxt;
|
||||
use super::predicates_of::assert_only_contains_predicates_from;
|
||||
use crate::bounds::Bounds;
|
||||
use crate::hir_ty_lowering::{HirTyLowerer, PredicateFilter};
|
||||
|
||||
/// For associated types we include both bounds written on the type
|
||||
@ -36,7 +37,8 @@ fn associated_type_bounds<'tcx>(
|
||||
);
|
||||
|
||||
let icx = ItemCtxt::new(tcx, assoc_item_def_id);
|
||||
let mut bounds = icx.lowerer().lower_mono_bounds(item_ty, hir_bounds, filter);
|
||||
let mut bounds = Bounds::default();
|
||||
icx.lowerer().lower_bounds(item_ty, hir_bounds, &mut bounds, ty::List::empty(), filter);
|
||||
// Associated types are implicitly sized unless a `?Sized` bound is found
|
||||
icx.lowerer().add_sized_bound(&mut bounds, item_ty, hir_bounds, None, span);
|
||||
|
||||
@ -303,7 +305,8 @@ fn opaque_type_bounds<'tcx>(
|
||||
) -> &'tcx [(ty::Clause<'tcx>, Span)] {
|
||||
ty::print::with_reduced_queries!({
|
||||
let icx = ItemCtxt::new(tcx, opaque_def_id);
|
||||
let mut bounds = icx.lowerer().lower_mono_bounds(item_ty, hir_bounds, filter);
|
||||
let mut bounds = Bounds::default();
|
||||
icx.lowerer().lower_bounds(item_ty, hir_bounds, &mut bounds, ty::List::empty(), filter);
|
||||
// Opaque types are implicitly sized unless a `?Sized` bound is found
|
||||
icx.lowerer().add_sized_bound(&mut bounds, item_ty, hir_bounds, None, span);
|
||||
debug!(?bounds);
|
||||
|
@ -181,9 +181,12 @@ fn gather_explicit_predicates_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::Gen
|
||||
// on a trait we must also consider the bounds that follow the trait's name,
|
||||
// like `trait Foo: A + B + C`.
|
||||
if let Some(self_bounds) = is_trait {
|
||||
let bounds = icx.lowerer().lower_mono_bounds(
|
||||
let mut bounds = Bounds::default();
|
||||
icx.lowerer().lower_bounds(
|
||||
tcx.types.self_param,
|
||||
self_bounds,
|
||||
&mut bounds,
|
||||
ty::List::empty(),
|
||||
PredicateFilter::All,
|
||||
);
|
||||
predicates.extend(bounds.clauses(tcx));
|
||||
@ -265,9 +268,9 @@ fn gather_explicit_predicates_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::Gen
|
||||
}
|
||||
|
||||
let mut bounds = Bounds::default();
|
||||
icx.lowerer().lower_poly_bounds(
|
||||
icx.lowerer().lower_bounds(
|
||||
ty,
|
||||
bound_pred.bounds.iter(),
|
||||
bound_pred.bounds,
|
||||
&mut bounds,
|
||||
bound_vars,
|
||||
PredicateFilter::All,
|
||||
@ -626,7 +629,7 @@ pub(super) fn implied_predicates_with_filter<'tcx>(
|
||||
bug!("trait_def_id {trait_def_id:?} is not an item");
|
||||
};
|
||||
|
||||
let (generics, bounds) = match item.kind {
|
||||
let (generics, superbounds) = match item.kind {
|
||||
hir::ItemKind::Trait(.., generics, supertraits, _) => (generics, supertraits),
|
||||
hir::ItemKind::TraitAlias(generics, supertraits) => (generics, supertraits),
|
||||
_ => span_bug!(item.span, "super_predicates invoked on non-trait"),
|
||||
@ -635,7 +638,8 @@ pub(super) fn implied_predicates_with_filter<'tcx>(
|
||||
let icx = ItemCtxt::new(tcx, trait_def_id);
|
||||
|
||||
let self_param_ty = tcx.types.self_param;
|
||||
let superbounds = icx.lowerer().lower_mono_bounds(self_param_ty, bounds, filter);
|
||||
let mut bounds = Bounds::default();
|
||||
icx.lowerer().lower_bounds(self_param_ty, superbounds, &mut bounds, ty::List::empty(), filter);
|
||||
|
||||
let where_bounds_that_match = icx.probe_ty_param_bounds_in_generics(
|
||||
generics,
|
||||
@ -646,7 +650,7 @@ pub(super) fn implied_predicates_with_filter<'tcx>(
|
||||
|
||||
// Combine the two lists to form the complete set of superbounds:
|
||||
let implied_bounds =
|
||||
&*tcx.arena.alloc_from_iter(superbounds.clauses(tcx).chain(where_bounds_that_match));
|
||||
&*tcx.arena.alloc_from_iter(bounds.clauses(tcx).chain(where_bounds_that_match));
|
||||
debug!(?implied_bounds);
|
||||
|
||||
// Now require that immediate supertraits are lowered, which will, in
|
||||
@ -834,9 +838,9 @@ fn probe_ty_param_bounds_in_generics(
|
||||
};
|
||||
|
||||
let bound_vars = self.tcx.late_bound_vars(predicate.hir_id);
|
||||
self.lowerer().lower_poly_bounds(
|
||||
self.lowerer().lower_bounds(
|
||||
bound_ty,
|
||||
predicate.bounds.iter(),
|
||||
predicate.bounds,
|
||||
&mut bounds,
|
||||
bound_vars,
|
||||
filter,
|
||||
|
@ -142,7 +142,7 @@ pub(crate) fn add_sized_bound(
|
||||
/// There is an implied binder around `param_ty` and `hir_bounds`.
|
||||
/// See `lower_poly_trait_ref` for more details.
|
||||
#[instrument(level = "debug", skip(self, hir_bounds, bounds))]
|
||||
pub(crate) fn lower_poly_bounds<'hir, I: Iterator<Item = &'hir hir::GenericBound<'tcx>>>(
|
||||
pub(crate) fn lower_bounds<'hir, I: IntoIterator<Item = &'hir hir::GenericBound<'tcx>>>(
|
||||
&self,
|
||||
param_ty: Ty<'tcx>,
|
||||
hir_bounds: I,
|
||||
@ -212,35 +212,6 @@ pub(crate) fn lower_poly_bounds<'hir, I: Iterator<Item = &'hir hir::GenericBound
|
||||
}
|
||||
}
|
||||
|
||||
/// Lower HIR bounds into `bounds` given the self type `param_ty` and *no* overarching late-bound vars.
|
||||
///
|
||||
/// ### Example
|
||||
///
|
||||
/// ```ignore (illustrative)
|
||||
/// fn foo<T: Bar + Baz>() { }
|
||||
/// // ^ ^^^^^^^^^ hir_bounds
|
||||
/// // param_ty
|
||||
/// ```
|
||||
pub(crate) fn lower_mono_bounds(
|
||||
&self,
|
||||
param_ty: Ty<'tcx>,
|
||||
hir_bounds: &[hir::GenericBound<'tcx>],
|
||||
predicate_filter: PredicateFilter,
|
||||
) -> Bounds<'tcx> {
|
||||
let mut bounds = Bounds::default();
|
||||
|
||||
self.lower_poly_bounds(
|
||||
param_ty,
|
||||
hir_bounds.iter(),
|
||||
&mut bounds,
|
||||
ty::List::empty(),
|
||||
predicate_filter,
|
||||
);
|
||||
debug!(?bounds);
|
||||
|
||||
bounds
|
||||
}
|
||||
|
||||
/// Lower an associated item constraint from the HIR into `bounds`.
|
||||
///
|
||||
/// ### A Note on Binders
|
||||
@ -444,9 +415,9 @@ pub(super) fn lower_assoc_item_constraint(
|
||||
// parameter to have a skipped binder.
|
||||
let param_ty =
|
||||
Ty::new_alias(tcx, ty::Projection, projection_ty.skip_binder());
|
||||
self.lower_poly_bounds(
|
||||
self.lower_bounds(
|
||||
param_ty,
|
||||
hir_bounds.iter(),
|
||||
hir_bounds,
|
||||
bounds,
|
||||
projection_ty.bound_vars(),
|
||||
predicate_filter,
|
||||
|
Loading…
Reference in New Issue
Block a user