Rollup merge of #84343 - camsteffen:closure-tree, r=varkor
Remove `ScopeTree::closure_tree` Seems to be dead code since #50649.
This commit is contained in:
@@ -235,18 +235,6 @@ pub struct ScopeTree {
|
|||||||
/// escape into 'static and should have no local cleanup scope.
|
/// escape into 'static and should have no local cleanup scope.
|
||||||
rvalue_scopes: FxHashMap<hir::ItemLocalId, Option<Scope>>,
|
rvalue_scopes: FxHashMap<hir::ItemLocalId, Option<Scope>>,
|
||||||
|
|
||||||
/// Encodes the hierarchy of fn bodies. Every fn body (including
|
|
||||||
/// closures) forms its own distinct region hierarchy, rooted in
|
|
||||||
/// the block that is the fn body. This map points from the ID of
|
|
||||||
/// that root block to the ID of the root block for the enclosing
|
|
||||||
/// fn, if any. Thus the map structures the fn bodies into a
|
|
||||||
/// hierarchy based on their lexical mapping. This is used to
|
|
||||||
/// handle the relationships between regions in a fn and in a
|
|
||||||
/// closure defined by that fn. See the "Modeling closures"
|
|
||||||
/// section of the README in infer::region_constraints for
|
|
||||||
/// more details.
|
|
||||||
closure_tree: FxHashMap<hir::ItemLocalId, hir::ItemLocalId>,
|
|
||||||
|
|
||||||
/// If there are any `yield` nested within a scope, this map
|
/// If there are any `yield` nested within a scope, this map
|
||||||
/// stores the `Span` of the last one and its index in the
|
/// stores the `Span` of the last one and its index in the
|
||||||
/// postorder of the Visitor traversal on the HIR.
|
/// postorder of the Visitor traversal on the HIR.
|
||||||
@@ -356,23 +344,6 @@ impl ScopeTree {
|
|||||||
self.destruction_scopes.get(&n).cloned()
|
self.destruction_scopes.get(&n).cloned()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Records that `sub_closure` is defined within `sup_closure`. These IDs
|
|
||||||
/// should be the ID of the block that is the fn body, which is
|
|
||||||
/// also the root of the region hierarchy for that fn.
|
|
||||||
pub fn record_closure_parent(
|
|
||||||
&mut self,
|
|
||||||
sub_closure: hir::ItemLocalId,
|
|
||||||
sup_closure: hir::ItemLocalId,
|
|
||||||
) {
|
|
||||||
debug!(
|
|
||||||
"record_closure_parent(sub_closure={:?}, sup_closure={:?})",
|
|
||||||
sub_closure, sup_closure
|
|
||||||
);
|
|
||||||
assert!(sub_closure != sup_closure);
|
|
||||||
let previous = self.closure_tree.insert(sub_closure, sup_closure);
|
|
||||||
assert!(previous.is_none());
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn record_var_scope(&mut self, var: hir::ItemLocalId, lifetime: Scope) {
|
pub fn record_var_scope(&mut self, var: hir::ItemLocalId, lifetime: Scope) {
|
||||||
debug!("record_var_scope(sub={:?}, sup={:?})", var, lifetime);
|
debug!("record_var_scope(sub={:?}, sup={:?})", var, lifetime);
|
||||||
assert!(var != lifetime.item_local_id());
|
assert!(var != lifetime.item_local_id());
|
||||||
@@ -474,7 +445,6 @@ impl<'a> HashStable<StableHashingContext<'a>> for ScopeTree {
|
|||||||
ref var_map,
|
ref var_map,
|
||||||
ref destruction_scopes,
|
ref destruction_scopes,
|
||||||
ref rvalue_scopes,
|
ref rvalue_scopes,
|
||||||
ref closure_tree,
|
|
||||||
ref yield_in_scope,
|
ref yield_in_scope,
|
||||||
} = *self;
|
} = *self;
|
||||||
|
|
||||||
@@ -488,7 +458,6 @@ impl<'a> HashStable<StableHashingContext<'a>> for ScopeTree {
|
|||||||
var_map.hash_stable(hcx, hasher);
|
var_map.hash_stable(hcx, hasher);
|
||||||
destruction_scopes.hash_stable(hcx, hasher);
|
destruction_scopes.hash_stable(hcx, hasher);
|
||||||
rvalue_scopes.hash_stable(hcx, hasher);
|
rvalue_scopes.hash_stable(hcx, hasher);
|
||||||
closure_tree.hash_stable(hcx, hasher);
|
|
||||||
yield_in_scope.hash_stable(hcx, hasher);
|
yield_in_scope.hash_stable(hcx, hasher);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,14 +23,6 @@ use std::mem;
|
|||||||
|
|
||||||
#[derive(Debug, Copy, Clone)]
|
#[derive(Debug, Copy, Clone)]
|
||||||
pub struct Context {
|
pub struct Context {
|
||||||
/// The root of the current region tree. This is typically the id
|
|
||||||
/// of the innermost fn body. Each fn forms its own disjoint tree
|
|
||||||
/// in the region hierarchy. These fn bodies are themselves
|
|
||||||
/// arranged into a tree. See the "Modeling closures" section of
|
|
||||||
/// the README in `rustc_trait_selection::infer::region_constraints`
|
|
||||||
/// for more details.
|
|
||||||
root_id: Option<hir::ItemLocalId>,
|
|
||||||
|
|
||||||
/// The scope that contains any new variables declared, plus its depth in
|
/// The scope that contains any new variables declared, plus its depth in
|
||||||
/// the scope tree.
|
/// the scope tree.
|
||||||
var_parent: Option<(Scope, ScopeDepth)>,
|
var_parent: Option<(Scope, ScopeDepth)>,
|
||||||
@@ -743,11 +735,6 @@ impl<'tcx> Visitor<'tcx> for RegionResolutionVisitor<'tcx> {
|
|||||||
let outer_pessimistic_yield = mem::replace(&mut self.pessimistic_yield, false);
|
let outer_pessimistic_yield = mem::replace(&mut self.pessimistic_yield, false);
|
||||||
self.terminating_scopes.insert(body.value.hir_id.local_id);
|
self.terminating_scopes.insert(body.value.hir_id.local_id);
|
||||||
|
|
||||||
if let Some(root_id) = self.cx.root_id {
|
|
||||||
self.scope_tree.record_closure_parent(body.value.hir_id.local_id, root_id);
|
|
||||||
}
|
|
||||||
self.cx.root_id = Some(body.value.hir_id.local_id);
|
|
||||||
|
|
||||||
self.enter_scope(Scope { id: body.value.hir_id.local_id, data: ScopeData::CallSite });
|
self.enter_scope(Scope { id: body.value.hir_id.local_id, data: ScopeData::CallSite });
|
||||||
self.enter_scope(Scope { id: body.value.hir_id.local_id, data: ScopeData::Arguments });
|
self.enter_scope(Scope { id: body.value.hir_id.local_id, data: ScopeData::Arguments });
|
||||||
|
|
||||||
@@ -824,7 +811,7 @@ fn region_scope_tree(tcx: TyCtxt<'_>, def_id: DefId) -> &ScopeTree {
|
|||||||
tcx,
|
tcx,
|
||||||
scope_tree: ScopeTree::default(),
|
scope_tree: ScopeTree::default(),
|
||||||
expr_and_pat_count: 0,
|
expr_and_pat_count: 0,
|
||||||
cx: Context { root_id: None, parent: None, var_parent: None },
|
cx: Context { parent: None, var_parent: None },
|
||||||
terminating_scopes: Default::default(),
|
terminating_scopes: Default::default(),
|
||||||
pessimistic_yield: false,
|
pessimistic_yield: false,
|
||||||
fixup_scopes: vec![],
|
fixup_scopes: vec![],
|
||||||
|
|||||||
@@ -439,8 +439,7 @@ fn virtual_call_violation_for_method<'tcx>(
|
|||||||
return Some(MethodViolationCode::WhereClauseReferencesSelf);
|
return Some(MethodViolationCode::WhereClauseReferencesSelf);
|
||||||
}
|
}
|
||||||
|
|
||||||
let receiver_ty =
|
let receiver_ty = tcx.liberate_late_bound_regions(method.def_id, sig.input(0));
|
||||||
tcx.liberate_late_bound_regions(method.def_id, sig.map_bound(|sig| sig.inputs()[0]));
|
|
||||||
|
|
||||||
// Until `unsized_locals` is fully implemented, `self: Self` can't be dispatched on.
|
// Until `unsized_locals` is fully implemented, `self: Self` can't be dispatched on.
|
||||||
// However, this is already considered object-safe. We allow it as a special case here.
|
// However, this is already considered object-safe. We allow it as a special case here.
|
||||||
|
|||||||
Reference in New Issue
Block a user