remove from_forall
This commit is contained in:
@@ -157,7 +157,7 @@ fn region_definitions<'tcx>(
|
||||
for info in var_infos.iter() {
|
||||
let origin = match info.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 };
|
||||
|
||||
@@ -1939,10 +1939,15 @@ impl<'tcx> RegionInferenceContext<'tcx> {
|
||||
//
|
||||
// and here we prefer to blame the source (the y = x statement).
|
||||
let blame_source = match from_region_origin {
|
||||
NllRegionVariableOrigin::FreeRegion
|
||||
| NllRegionVariableOrigin::Existential { from_forall: false, name: _ } => true,
|
||||
NllRegionVariableOrigin::Placeholder(_)
|
||||
| NllRegionVariableOrigin::Existential { from_forall: true, name: _ } => false,
|
||||
NllRegionVariableOrigin::FreeRegion => true,
|
||||
NllRegionVariableOrigin::Placeholder(_) => false,
|
||||
// `'existential: 'whatever` never results in a region error by itself.
|
||||
// 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
|
||||
|
||||
@@ -66,7 +66,7 @@ impl<'a, 'tcx> RegionRenumberer<'a, 'tcx> {
|
||||
T: TypeFoldable<TyCtxt<'tcx>>,
|
||||
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| {
|
||||
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
|
||||
} else {
|
||||
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);
|
||||
reg_map.insert(br, ex_reg_var);
|
||||
|
||||
@@ -244,17 +244,9 @@ impl<'a, 'b, 'tcx> NllTypeRelating<'a, 'b, 'tcx> {
|
||||
}
|
||||
|
||||
#[instrument(skip(self), level = "debug")]
|
||||
fn next_existential_region_var(
|
||||
&mut self,
|
||||
from_forall: bool,
|
||||
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
|
||||
fn next_existential_region_var(&mut self, name: Option<Symbol>) -> ty::Region<'tcx> {
|
||||
let origin = NllRegionVariableOrigin::Existential { name };
|
||||
self.type_checker.infcx.next_nll_region_var(origin, || RegionCtxt::Existential(name))
|
||||
}
|
||||
|
||||
#[instrument(skip(self), level = "debug")]
|
||||
|
||||
@@ -485,17 +485,6 @@ pub enum NllRegionVariableOrigin {
|
||||
|
||||
Existential {
|
||||
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