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::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);
|
||||||
|
@ -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,
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user