Skip to content

Commit a78e1a6

Browse files
committed
Move extra_lifetime_params_map to per-owner tables
1 parent 5686bbf commit a78e1a6

File tree

5 files changed

+29
-13
lines changed

5 files changed

+29
-13
lines changed

Diff for: compiler/rustc_ast_lowering/src/lib.rs

+12-2
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,16 @@ impl PerOwnerResolver<'_> {
272272
/// The extra lifetimes that appear from the parenthesized `Fn`-trait desugaring
273273
/// should appear at the enclosing `PolyTraitRef`.
274274
fn extra_lifetime_params(&self, id: NodeId) -> Vec<(Ident, NodeId, LifetimeRes)> {
275-
self.general.extra_lifetime_params_map.get(&id).cloned().unwrap_or_default()
275+
let res = self.item.extra_lifetime_params_map.get(&id).cloned().unwrap_or_default();
276+
if res.is_empty() {
277+
self.general.owners.items().any(|(_, data)| {
278+
if data.extra_lifetime_params_map.contains_key(&id) {
279+
panic!("found {id} in {} instead of {}", data.id, self.item.id);
280+
}
281+
false
282+
});
283+
}
284+
res
276285
}
277286
}
278287

@@ -655,7 +664,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
655664
self.item_local_id_counter = current_local_counter;
656665
self.impl_trait_defs = current_impl_trait_defs;
657666
self.impl_trait_bounds = current_impl_trait_bounds;
658-
self.resolver.item = current_item_resolver;
667+
let reinsert = std::mem::replace(&mut self.resolver.item, current_item_resolver);
668+
self.resolver.general.owners.insert(owner, reinsert);
659669

660670
debug_assert!(!self.children.iter().any(|(id, _)| id == &owner_id.def_id));
661671
self.children.push((owner_id.def_id, hir::MaybeOwner::Owner(info)));

Diff for: compiler/rustc_middle/src/ty/mod.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,8 @@ pub struct PerOwnerResolverData {
197197
pub lifetime_elision_allowed: FxHashSet<ast::NodeId>,
198198
/// Resolutions for lifetimes.
199199
pub lifetimes_res_map: NodeMap<LifetimeRes>,
200+
/// Lifetime parameters that lowering will have to introduce.
201+
pub extra_lifetime_params_map: NodeMap<Vec<(Ident, ast::NodeId, LifetimeRes)>>,
200202

201203
pub trait_map: NodeMap<Vec<hir::TraitCandidate>>,
202204
/// The id of the owner
@@ -213,6 +215,7 @@ impl PerOwnerResolverData {
213215
lifetime_elision_allowed: Default::default(),
214216
trait_map: Default::default(),
215217
lifetimes_res_map: Default::default(),
218+
extra_lifetime_params_map: Default::default(),
216219
}
217220
}
218221
}
@@ -225,8 +228,6 @@ pub struct ResolverAstLowering {
225228
pub partial_res_map: NodeMap<hir::def::PartialRes>,
226229
/// Resolutions for import nodes, which have multiple resolutions in different namespaces.
227230
pub import_res_map: NodeMap<hir::def::PerNS<Option<Res<ast::NodeId>>>>,
228-
/// Lifetime parameters that lowering will have to introduce.
229-
pub extra_lifetime_params_map: NodeMap<Vec<(Ident, ast::NodeId, LifetimeRes)>>,
230231

231232
pub owners: NodeMap<PerOwnerResolverData>,
232233

Diff for: compiler/rustc_resolve/src/late.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -1816,9 +1816,10 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
18161816
lifetimes_in_scope.extend(rib.bindings.iter().map(|(ident, _)| ident.span));
18171817
// Consider any anonymous lifetimes, too
18181818
if let LifetimeRibKind::AnonymousCreateParameter { binder, .. } = rib.kind
1819-
&& let Some(extra) = self.r.extra_lifetime_params_map.get(&binder)
1819+
&& let Some(extra) =
1820+
self.r.extra_diagnostics_lifetime_params_map.get(&binder)
18201821
{
1821-
lifetimes_in_scope.extend(extra.iter().map(|(ident, _, _)| ident.span));
1822+
lifetimes_in_scope.extend(extra.iter());
18221823
}
18231824
if let LifetimeRibKind::Item = rib.kind {
18241825
break;
@@ -1953,6 +1954,11 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
19531954
.entry(binder)
19541955
.or_insert_with(Vec::new)
19551956
.push((ident, param, res));
1957+
self.r
1958+
.extra_diagnostics_lifetime_params_map
1959+
.entry(binder)
1960+
.or_insert_with(Vec::new)
1961+
.push(ident.span);
19561962
res
19571963
}
19581964

Diff for: compiler/rustc_resolve/src/lib.rs

+4-7
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,7 @@ use rustc_errors::{Applicability, Diag, ErrCode, ErrorGuaranteed};
5151
use rustc_expand::base::{DeriveResolution, SyntaxExtension, SyntaxExtensionKind};
5252
use rustc_feature::BUILTIN_ATTRIBUTES;
5353
use rustc_hir::def::Namespace::{self, *};
54-
use rustc_hir::def::{
55-
self, CtorOf, DefKind, DocLinkResMap, LifetimeRes, NonMacroAttrKind, PartialRes, PerNS,
56-
};
54+
use rustc_hir::def::{self, CtorOf, DefKind, DocLinkResMap, NonMacroAttrKind, PartialRes, PerNS};
5755
use rustc_hir::def_id::{CRATE_DEF_ID, CrateNum, DefId, LOCAL_CRATE, LocalDefId, LocalDefIdMap};
5856
use rustc_hir::{PrimTy, TraitCandidate};
5957
use rustc_index::IndexVec;
@@ -1073,8 +1071,8 @@ pub struct Resolver<'ra, 'tcx> {
10731071
import_res_map: NodeMap<PerNS<Option<Res>>>,
10741072
/// An import will be inserted into this map if it has been used.
10751073
import_use_map: FxHashMap<Import<'ra>, Used>,
1076-
/// Lifetime parameters that lowering will have to introduce.
1077-
extra_lifetime_params_map: NodeMap<Vec<(Ident, NodeId, LifetimeRes)>>,
1074+
/// Lifetimes that have no AST that got generated on the fly.
1075+
extra_diagnostics_lifetime_params_map: NodeMap<Vec<Span>>,
10781076

10791077
/// `CrateNum` resolutions of `extern crate` items.
10801078
extern_crate_map: UnordMap<LocalDefId, CrateNum>,
@@ -1492,7 +1490,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
14921490
partial_res_map: Default::default(),
14931491
import_res_map: Default::default(),
14941492
import_use_map: Default::default(),
1495-
extra_lifetime_params_map: Default::default(),
1493+
extra_diagnostics_lifetime_params_map: Default::default(),
14961494
extern_crate_map: Default::default(),
14971495
module_children: Default::default(),
14981496
underscore_disambiguator: 0,
@@ -1694,7 +1692,6 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
16941692
owners: self.owners,
16951693
partial_res_map: self.partial_res_map,
16961694
import_res_map: self.import_res_map,
1697-
extra_lifetime_params_map: self.extra_lifetime_params_map,
16981695
next_node_id: self.next_node_id,
16991696
lint_buffer: Steal::new(self.lint_buffer),
17001697
delegation_fn_sigs: self.delegation_fn_sigs,

Diff for: compiler/rustc_resolve/src/macros.rs

+2
Original file line numberDiff line numberDiff line change
@@ -526,13 +526,15 @@ impl<'ra, 'tcx> ResolverExpand for Resolver<'ra, 'tcx> {
526526
lifetime_elision_allowed,
527527
trait_map,
528528
lifetimes_res_map,
529+
extra_lifetime_params_map,
529530
} = old;
530531
assert!(node_id_to_def_id.is_empty());
531532
assert!(legacy_const_generic_args.is_empty());
532533
assert!(label_res_map.is_empty());
533534
assert!(lifetime_elision_allowed.is_empty());
534535
assert!(trait_map.is_empty());
535536
assert!(lifetimes_res_map.is_empty());
537+
assert!(extra_lifetime_params_map.is_empty());
536538
}
537539
} else {
538540
assert!(self.owners.insert(old.id, old).is_none());

0 commit comments

Comments
 (0)