remove from_forall
This commit is contained in:
@@ -157,7 +157,7 @@ fn region_definitions<'tcx>(
|
|||||||
for info in var_infos.iter() {
|
for info in var_infos.iter() {
|
||||||
let origin = match info.origin {
|
let origin = match info.origin {
|
||||||
RegionVariableOrigin::Nll(origin) => origin,
|
RegionVariableOrigin::Nll(origin) => origin,
|
||||||
_ => NllRegionVariableOrigin::Existential { from_forall: false, name: None },
|
_ => NllRegionVariableOrigin::Existential { name: None },
|
||||||
};
|
};
|
||||||
|
|
||||||
let definition = RegionDefinition { origin, universe: info.universe, external_name: None };
|
let definition = RegionDefinition { origin, universe: info.universe, external_name: None };
|
||||||
|
|||||||
@@ -1939,10 +1939,15 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
|||||||
//
|
//
|
||||||
// and here we prefer to blame the source (the y = x statement).
|
// and here we prefer to blame the source (the y = x statement).
|
||||||
let blame_source = match from_region_origin {
|
let blame_source = match from_region_origin {
|
||||||
NllRegionVariableOrigin::FreeRegion
|
NllRegionVariableOrigin::FreeRegion => true,
|
||||||
| NllRegionVariableOrigin::Existential { from_forall: false, name: _ } => true,
|
NllRegionVariableOrigin::Placeholder(_) => false,
|
||||||
NllRegionVariableOrigin::Placeholder(_)
|
// `'existential: 'whatever` never results in a region error by itself.
|
||||||
| NllRegionVariableOrigin::Existential { from_forall: true, name: _ } => false,
|
// We may always infer it to `'static` afterall. This means while an error
|
||||||
|
// path may go through an existential, these existentials are never the
|
||||||
|
// `from_region`.
|
||||||
|
NllRegionVariableOrigin::Existential { name: _ } => {
|
||||||
|
unreachable!("existentials can outlive everything")
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// To pick a constraint to blame, we organize constraints by how interesting we expect them
|
// To pick a constraint to blame, we organize constraints by how interesting we expect them
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ impl<'a, 'tcx> RegionRenumberer<'a, 'tcx> {
|
|||||||
T: TypeFoldable<TyCtxt<'tcx>>,
|
T: TypeFoldable<TyCtxt<'tcx>>,
|
||||||
F: Fn() -> RegionCtxt,
|
F: Fn() -> RegionCtxt,
|
||||||
{
|
{
|
||||||
let origin = NllRegionVariableOrigin::Existential { from_forall: false, name: None };
|
let origin = NllRegionVariableOrigin::Existential { name: None };
|
||||||
fold_regions(self.infcx.tcx, value, |_region, _depth| {
|
fold_regions(self.infcx.tcx, value, |_region, _depth| {
|
||||||
self.infcx.next_nll_region_var(origin, || region_ctxt_fn())
|
self.infcx.next_nll_region_var(origin, || region_ctxt_fn())
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ impl<'a, 'b, 'tcx> NllTypeRelating<'a, 'b, 'tcx> {
|
|||||||
*ex_reg_var
|
*ex_reg_var
|
||||||
} else {
|
} else {
|
||||||
let ex_reg_var =
|
let ex_reg_var =
|
||||||
self.next_existential_region_var(true, br.kind.get_name(infcx.infcx.tcx));
|
self.next_existential_region_var(br.kind.get_name(infcx.infcx.tcx));
|
||||||
debug!(?ex_reg_var);
|
debug!(?ex_reg_var);
|
||||||
reg_map.insert(br, ex_reg_var);
|
reg_map.insert(br, ex_reg_var);
|
||||||
|
|
||||||
@@ -244,17 +244,9 @@ impl<'a, 'b, 'tcx> NllTypeRelating<'a, 'b, 'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[instrument(skip(self), level = "debug")]
|
#[instrument(skip(self), level = "debug")]
|
||||||
fn next_existential_region_var(
|
fn next_existential_region_var(&mut self, name: Option<Symbol>) -> ty::Region<'tcx> {
|
||||||
&mut self,
|
let origin = NllRegionVariableOrigin::Existential { name };
|
||||||
from_forall: bool,
|
self.type_checker.infcx.next_nll_region_var(origin, || RegionCtxt::Existential(name))
|
||||||
name: Option<Symbol>,
|
|
||||||
) -> ty::Region<'tcx> {
|
|
||||||
let origin = NllRegionVariableOrigin::Existential { name, from_forall };
|
|
||||||
|
|
||||||
let reg_var =
|
|
||||||
self.type_checker.infcx.next_nll_region_var(origin, || RegionCtxt::Existential(name));
|
|
||||||
|
|
||||||
reg_var
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[instrument(skip(self), level = "debug")]
|
#[instrument(skip(self), level = "debug")]
|
||||||
|
|||||||
@@ -485,17 +485,6 @@ pub enum NllRegionVariableOrigin {
|
|||||||
|
|
||||||
Existential {
|
Existential {
|
||||||
name: Option<Symbol>,
|
name: Option<Symbol>,
|
||||||
/// If this is true, then this variable was created to represent a lifetime
|
|
||||||
/// bound in a `for` binder. For example, it might have been created to
|
|
||||||
/// represent the lifetime `'a` in a type like `for<'a> fn(&'a u32)`.
|
|
||||||
/// Such variables are created when we are trying to figure out if there
|
|
||||||
/// is any valid instantiation of `'a` that could fit into some scenario.
|
|
||||||
///
|
|
||||||
/// This is used to inform error reporting: in the case that we are trying to
|
|
||||||
/// determine whether there is any valid instantiation of a `'a` variable that meets
|
|
||||||
/// some constraint C, we want to blame the "source" of that `for` type,
|
|
||||||
/// rather than blaming the source of the constraint C.
|
|
||||||
from_forall: bool,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user