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:
Matthias Krüger 2024-10-20 21:04:14 +02:00 committed by GitHub
commit 2cded97c96
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 42 deletions

View File

@ -13,6 +13,7 @@
use super::ItemCtxt; use super::ItemCtxt;
use super::predicates_of::assert_only_contains_predicates_from; use super::predicates_of::assert_only_contains_predicates_from;
use crate::bounds::Bounds;
use crate::hir_ty_lowering::{HirTyLowerer, PredicateFilter}; use crate::hir_ty_lowering::{HirTyLowerer, PredicateFilter};
/// For associated types we include both bounds written on the type /// 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 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 // Associated types are implicitly sized unless a `?Sized` bound is found
icx.lowerer().add_sized_bound(&mut bounds, item_ty, hir_bounds, None, span); 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)] { ) -> &'tcx [(ty::Clause<'tcx>, Span)] {
ty::print::with_reduced_queries!({ ty::print::with_reduced_queries!({
let icx = ItemCtxt::new(tcx, opaque_def_id); 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 // Opaque types are implicitly sized unless a `?Sized` bound is found
icx.lowerer().add_sized_bound(&mut bounds, item_ty, hir_bounds, None, span); icx.lowerer().add_sized_bound(&mut bounds, item_ty, hir_bounds, None, span);
debug!(?bounds); debug!(?bounds);

View File

@ -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, // on a trait we must also consider the bounds that follow the trait's name,
// like `trait Foo: A + B + C`. // like `trait Foo: A + B + C`.
if let Some(self_bounds) = is_trait { 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, tcx.types.self_param,
self_bounds, self_bounds,
&mut bounds,
ty::List::empty(),
PredicateFilter::All, PredicateFilter::All,
); );
predicates.extend(bounds.clauses(tcx)); 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(); let mut bounds = Bounds::default();
icx.lowerer().lower_poly_bounds( icx.lowerer().lower_bounds(
ty, ty,
bound_pred.bounds.iter(), bound_pred.bounds,
&mut bounds, &mut bounds,
bound_vars, bound_vars,
PredicateFilter::All, 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"); 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::Trait(.., generics, supertraits, _) => (generics, supertraits),
hir::ItemKind::TraitAlias(generics, supertraits) => (generics, supertraits), hir::ItemKind::TraitAlias(generics, supertraits) => (generics, supertraits),
_ => span_bug!(item.span, "super_predicates invoked on non-trait"), _ => 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 icx = ItemCtxt::new(tcx, trait_def_id);
let self_param_ty = tcx.types.self_param; 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( let where_bounds_that_match = icx.probe_ty_param_bounds_in_generics(
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: // Combine the two lists to form the complete set of superbounds:
let implied_bounds = 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); debug!(?implied_bounds);
// Now require that immediate supertraits are lowered, which will, in // 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); let bound_vars = self.tcx.late_bound_vars(predicate.hir_id);
self.lowerer().lower_poly_bounds( self.lowerer().lower_bounds(
bound_ty, bound_ty,
predicate.bounds.iter(), predicate.bounds,
&mut bounds, &mut bounds,
bound_vars, bound_vars,
filter, filter,

View File

@ -142,7 +142,7 @@ pub(crate) fn add_sized_bound(
/// There is an implied binder around `param_ty` and `hir_bounds`. /// There is an implied binder around `param_ty` and `hir_bounds`.
/// See `lower_poly_trait_ref` for more details. /// See `lower_poly_trait_ref` for more details.
#[instrument(level = "debug", skip(self, hir_bounds, bounds))] #[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, &self,
param_ty: Ty<'tcx>, param_ty: Ty<'tcx>,
hir_bounds: I, 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`. /// Lower an associated item constraint from the HIR into `bounds`.
/// ///
/// ### A Note on Binders /// ### A Note on Binders
@ -444,9 +415,9 @@ pub(super) fn lower_assoc_item_constraint(
// parameter to have a skipped binder. // parameter to have a skipped binder.
let param_ty = let param_ty =
Ty::new_alias(tcx, ty::Projection, projection_ty.skip_binder()); Ty::new_alias(tcx, ty::Projection, projection_ty.skip_binder());
self.lower_poly_bounds( self.lower_bounds(
param_ty, param_ty,
hir_bounds.iter(), hir_bounds,
bounds, bounds,
projection_ty.bound_vars(), projection_ty.bound_vars(),
predicate_filter, predicate_filter,