Removing unhandled region constraint error that is only for impl_trait_in_bindings
This commit is contained in:
parent
962ac8183d
commit
d98384595f
2 changed files with 5 additions and 34 deletions
|
@ -1,5 +1,4 @@
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxHashMap;
|
||||||
use rustc_hir::def_id::DefId;
|
|
||||||
use rustc_index::vec::IndexVec;
|
use rustc_index::vec::IndexVec;
|
||||||
use rustc_middle::infer::MemberConstraint;
|
use rustc_middle::infer::MemberConstraint;
|
||||||
use rustc_middle::ty::{self, Ty};
|
use rustc_middle::ty::{self, Ty};
|
||||||
|
@ -32,9 +31,6 @@ where
|
||||||
crate struct NllMemberConstraint<'tcx> {
|
crate struct NllMemberConstraint<'tcx> {
|
||||||
next_constraint: Option<NllMemberConstraintIndex>,
|
next_constraint: Option<NllMemberConstraintIndex>,
|
||||||
|
|
||||||
/// The opaque type whose hidden type is being inferred. (Used in error reporting.)
|
|
||||||
crate opaque_type_def_id: DefId,
|
|
||||||
|
|
||||||
/// The span where the hidden type was instantiated.
|
/// The span where the hidden type was instantiated.
|
||||||
crate definition_span: Span,
|
crate definition_span: Span,
|
||||||
|
|
||||||
|
@ -91,7 +87,6 @@ impl<'tcx> MemberConstraintSet<'tcx, ty::RegionVid> {
|
||||||
let constraint_index = self.constraints.push(NllMemberConstraint {
|
let constraint_index = self.constraints.push(NllMemberConstraint {
|
||||||
next_constraint,
|
next_constraint,
|
||||||
member_region_vid,
|
member_region_vid,
|
||||||
opaque_type_def_id: m_c.opaque_type_def_id,
|
|
||||||
definition_span: m_c.definition_span,
|
definition_span: m_c.definition_span,
|
||||||
hidden_ty: m_c.hidden_ty,
|
hidden_ty: m_c.hidden_ty,
|
||||||
start_index,
|
start_index,
|
||||||
|
|
|
@ -551,7 +551,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
||||||
polonius_output: Option<Rc<PoloniusOutput>>,
|
polonius_output: Option<Rc<PoloniusOutput>>,
|
||||||
) -> (Option<ClosureRegionRequirements<'tcx>>, RegionErrors<'tcx>) {
|
) -> (Option<ClosureRegionRequirements<'tcx>>, RegionErrors<'tcx>) {
|
||||||
let mir_def_id = body.source.def_id();
|
let mir_def_id = body.source.def_id();
|
||||||
self.propagate_constraints(body, infcx.tcx);
|
self.propagate_constraints(body);
|
||||||
|
|
||||||
let mut errors_buffer = RegionErrors::new();
|
let mut errors_buffer = RegionErrors::new();
|
||||||
|
|
||||||
|
@ -599,7 +599,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
||||||
/// for each region variable until all the constraints are
|
/// for each region variable until all the constraints are
|
||||||
/// satisfied. Note that some values may grow **too** large to be
|
/// satisfied. Note that some values may grow **too** large to be
|
||||||
/// feasible, but we check this later.
|
/// feasible, but we check this later.
|
||||||
fn propagate_constraints(&mut self, _body: &Body<'tcx>, tcx: TyCtxt<'tcx>) {
|
fn propagate_constraints(&mut self, _body: &Body<'tcx>) {
|
||||||
debug!("propagate_constraints()");
|
debug!("propagate_constraints()");
|
||||||
|
|
||||||
debug!("propagate_constraints: constraints={:#?}", {
|
debug!("propagate_constraints: constraints={:#?}", {
|
||||||
|
@ -617,7 +617,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
||||||
// own.
|
// own.
|
||||||
let constraint_sccs = self.constraint_sccs.clone();
|
let constraint_sccs = self.constraint_sccs.clone();
|
||||||
for scc in constraint_sccs.all_sccs() {
|
for scc in constraint_sccs.all_sccs() {
|
||||||
self.compute_value_for_scc(scc, tcx);
|
self.compute_value_for_scc(scc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort the applied member constraints so we can binary search
|
// Sort the applied member constraints so we can binary search
|
||||||
|
@ -629,7 +629,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
||||||
/// computed, by unioning the values of its successors.
|
/// computed, by unioning the values of its successors.
|
||||||
/// Assumes that all successors have been computed already
|
/// Assumes that all successors have been computed already
|
||||||
/// (which is assured by iterating over SCCs in dependency order).
|
/// (which is assured by iterating over SCCs in dependency order).
|
||||||
fn compute_value_for_scc(&mut self, scc_a: ConstraintSccIndex, tcx: TyCtxt<'tcx>) {
|
fn compute_value_for_scc(&mut self, scc_a: ConstraintSccIndex) {
|
||||||
let constraint_sccs = self.constraint_sccs.clone();
|
let constraint_sccs = self.constraint_sccs.clone();
|
||||||
|
|
||||||
// Walk each SCC `B` such that `A: B`...
|
// Walk each SCC `B` such that `A: B`...
|
||||||
|
@ -652,12 +652,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
||||||
// Now take member constraints into account.
|
// Now take member constraints into account.
|
||||||
let member_constraints = self.member_constraints.clone();
|
let member_constraints = self.member_constraints.clone();
|
||||||
for m_c_i in member_constraints.indices(scc_a) {
|
for m_c_i in member_constraints.indices(scc_a) {
|
||||||
self.apply_member_constraint(
|
self.apply_member_constraint(scc_a, m_c_i, member_constraints.choice_regions(m_c_i));
|
||||||
tcx,
|
|
||||||
scc_a,
|
|
||||||
m_c_i,
|
|
||||||
member_constraints.choice_regions(m_c_i),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
debug!(
|
debug!(
|
||||||
|
@ -680,31 +675,12 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
||||||
/// If we make any changes, returns true, else false.
|
/// If we make any changes, returns true, else false.
|
||||||
fn apply_member_constraint(
|
fn apply_member_constraint(
|
||||||
&mut self,
|
&mut self,
|
||||||
tcx: TyCtxt<'tcx>,
|
|
||||||
scc: ConstraintSccIndex,
|
scc: ConstraintSccIndex,
|
||||||
member_constraint_index: NllMemberConstraintIndex,
|
member_constraint_index: NllMemberConstraintIndex,
|
||||||
choice_regions: &[ty::RegionVid],
|
choice_regions: &[ty::RegionVid],
|
||||||
) -> bool {
|
) -> bool {
|
||||||
debug!("apply_member_constraint(scc={:?}, choice_regions={:#?})", scc, choice_regions,);
|
debug!("apply_member_constraint(scc={:?}, choice_regions={:#?})", scc, choice_regions,);
|
||||||
|
|
||||||
if let Some(uh_oh) =
|
|
||||||
choice_regions.iter().find(|&&r| !self.universal_regions.is_universal_region(r))
|
|
||||||
{
|
|
||||||
// FIXME(#61773): This case can only occur with
|
|
||||||
// `impl_trait_in_bindings`, I believe, and we are just
|
|
||||||
// opting not to handle it for now. See #61773 for
|
|
||||||
// details.
|
|
||||||
tcx.sess.delay_span_bug(
|
|
||||||
self.member_constraints[member_constraint_index].definition_span,
|
|
||||||
&format!(
|
|
||||||
"member constraint for `{:?}` has an option region `{:?}` \
|
|
||||||
that is not a universal region",
|
|
||||||
self.member_constraints[member_constraint_index].opaque_type_def_id, uh_oh,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a mutable vector of the options. We'll try to winnow
|
// Create a mutable vector of the options. We'll try to winnow
|
||||||
// them down.
|
// them down.
|
||||||
let mut choice_regions: Vec<ty::RegionVid> = choice_regions.to_vec();
|
let mut choice_regions: Vec<ty::RegionVid> = choice_regions.to_vec();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue