Skip to content

Commit 6bbb079

Browse files
committed
Use boxed slice instead of BTreeSet.
1 parent fa6f5ad commit 6bbb079

File tree

3 files changed

+51
-45
lines changed

3 files changed

+51
-45
lines changed

compiler/rustc_middle/src/hir/map/mod.rs

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use rustc_span::source_map::Spanned;
2020
use rustc_span::symbol::{kw, sym, Ident, Symbol};
2121
use rustc_span::Span;
2222
use rustc_target::spec::abi::Abi;
23-
use std::collections::BTreeSet;
23+
use std::collections::VecDeque;
2424

2525
pub mod blocks;
2626
mod collector;
@@ -543,28 +543,28 @@ impl<'hir> Map<'hir> {
543543
{
544544
let module = self.tcx.hir_module_items(module);
545545

546-
for id in &module.items {
546+
for id in module.items.iter() {
547547
visitor.visit_item(self.item(*id));
548548
}
549549

550-
for id in &module.trait_items {
550+
for id in module.trait_items.iter() {
551551
visitor.visit_trait_item(self.trait_item(*id));
552552
}
553553

554-
for id in &module.impl_items {
554+
for id in module.impl_items.iter() {
555555
visitor.visit_impl_item(self.impl_item(*id));
556556
}
557557

558-
for id in &module.foreign_items {
558+
for id in module.foreign_items.iter() {
559559
visitor.visit_foreign_item(self.foreign_item(*id));
560560
}
561561
}
562562

563563
pub fn for_each_module(&self, f: impl Fn(LocalDefId)) {
564-
let mut queue = BTreeSet::default();
565-
queue.insert(CRATE_DEF_ID);
564+
let mut queue = VecDeque::new();
565+
queue.push_back(CRATE_DEF_ID);
566566

567-
while let Some(id) = queue.pop_first() {
567+
while let Some(id) = queue.pop_front() {
568568
f(id);
569569
let items = self.tcx.hir_module_items(id);
570570
queue.extend(items.submodules.iter().copied())
@@ -581,7 +581,7 @@ impl<'hir> Map<'hir> {
581581
{
582582
(*f)(module);
583583
let items = tcx.hir_module_items(module);
584-
par_iter(&items.submodules).for_each(|&sm| par_iter_submodules(tcx, sm, f));
584+
par_iter(&items.submodules[..]).for_each(|&sm| par_iter_submodules(tcx, sm, f));
585585
}
586586
}
587587

@@ -1149,27 +1149,33 @@ fn hir_id_to_string(map: &Map<'_>, id: HirId) -> String {
11491149
pub(super) fn hir_module_items(tcx: TyCtxt<'_>, module_id: LocalDefId) -> ModuleItems {
11501150
let mut collector = ModuleCollector {
11511151
tcx,
1152-
submodules: BTreeSet::default(),
1153-
items: BTreeSet::default(),
1154-
trait_items: BTreeSet::default(),
1155-
impl_items: BTreeSet::default(),
1156-
foreign_items: BTreeSet::default(),
1152+
submodules: Vec::default(),
1153+
items: Vec::default(),
1154+
trait_items: Vec::default(),
1155+
impl_items: Vec::default(),
1156+
foreign_items: Vec::default(),
11571157
};
11581158

11591159
let (hir_mod, span, hir_id) = tcx.hir().get_module(module_id);
11601160
collector.visit_mod(hir_mod, span, hir_id);
11611161

11621162
let ModuleCollector { submodules, items, trait_items, impl_items, foreign_items, .. } =
11631163
collector;
1164-
return ModuleItems { submodules, items, trait_items, impl_items, foreign_items };
1164+
return ModuleItems {
1165+
submodules: submodules.into_boxed_slice(),
1166+
items: items.into_boxed_slice(),
1167+
trait_items: trait_items.into_boxed_slice(),
1168+
impl_items: impl_items.into_boxed_slice(),
1169+
foreign_items: foreign_items.into_boxed_slice(),
1170+
};
11651171

11661172
struct ModuleCollector<'tcx> {
11671173
tcx: TyCtxt<'tcx>,
1168-
submodules: BTreeSet<LocalDefId>,
1169-
items: BTreeSet<ItemId>,
1170-
trait_items: BTreeSet<TraitItemId>,
1171-
impl_items: BTreeSet<ImplItemId>,
1172-
foreign_items: BTreeSet<ForeignItemId>,
1174+
submodules: Vec<LocalDefId>,
1175+
items: Vec<ItemId>,
1176+
trait_items: Vec<TraitItemId>,
1177+
impl_items: Vec<ImplItemId>,
1178+
foreign_items: Vec<ForeignItemId>,
11731179
}
11741180

11751181
impl<'hir> Visitor<'hir> for ModuleCollector<'hir> {
@@ -1180,27 +1186,27 @@ pub(super) fn hir_module_items(tcx: TyCtxt<'_>, module_id: LocalDefId) -> Module
11801186
}
11811187

11821188
fn visit_item(&mut self, item: &'hir Item<'hir>) {
1183-
self.items.insert(item.item_id());
1189+
self.items.push(item.item_id());
11841190
if let ItemKind::Mod(..) = item.kind {
11851191
// If this declares another module, do not recurse inside it.
1186-
self.submodules.insert(item.def_id);
1192+
self.submodules.push(item.def_id);
11871193
} else {
11881194
intravisit::walk_item(self, item)
11891195
}
11901196
}
11911197

11921198
fn visit_trait_item(&mut self, item: &'hir TraitItem<'hir>) {
1193-
self.trait_items.insert(item.trait_item_id());
1199+
self.trait_items.push(item.trait_item_id());
11941200
intravisit::walk_trait_item(self, item)
11951201
}
11961202

11971203
fn visit_impl_item(&mut self, item: &'hir ImplItem<'hir>) {
1198-
self.impl_items.insert(item.impl_item_id());
1204+
self.impl_items.push(item.impl_item_id());
11991205
intravisit::walk_impl_item(self, item)
12001206
}
12011207

12021208
fn visit_foreign_item(&mut self, item: &'hir ForeignItem<'hir>) {
1203-
self.foreign_items.insert(item.foreign_item_id());
1209+
self.foreign_items.push(item.foreign_item_id());
12041210
intravisit::walk_foreign_item(self, item)
12051211
}
12061212
}

compiler/rustc_middle/src/hir/mod.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use rustc_hir::def_id::LocalDefId;
1717
use rustc_hir::*;
1818
use rustc_index::vec::{Idx, IndexVec};
1919
use rustc_span::DUMMY_SP;
20-
use std::collections::{BTreeMap, BTreeSet};
20+
use std::collections::BTreeMap;
2121

2222
/// Result of HIR indexing.
2323
#[derive(Debug)]
@@ -121,15 +121,15 @@ impl<'tcx> AttributeMap<'tcx> {
121121
}
122122
}
123123

124-
#[derive(Default, Encodable, Debug, HashStable)]
124+
/// Gather the LocalDefId for each item-like within a module, including items contained within
125+
/// bodies. The Ids are in visitor order. This is used to partition a pass between modules.
126+
#[derive(Debug, HashStable)]
125127
pub struct ModuleItems {
126-
// Use BTreeSets here so items are in the same order as in the
127-
// list of all items in Crate
128-
submodules: BTreeSet<LocalDefId>,
129-
items: BTreeSet<ItemId>,
130-
trait_items: BTreeSet<TraitItemId>,
131-
impl_items: BTreeSet<ImplItemId>,
132-
foreign_items: BTreeSet<ForeignItemId>,
128+
submodules: Box<[LocalDefId]>,
129+
items: Box<[ItemId]>,
130+
trait_items: Box<[TraitItemId]>,
131+
impl_items: Box<[ImplItemId]>,
132+
foreign_items: Box<[ForeignItemId]>,
133133
}
134134

135135
impl<'tcx> TyCtxt<'tcx> {

src/test/ui/lifetimes/undeclared-lifetime-used-in-debug-macro-issue-70152.stderr

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,17 @@ LL | a: &'b str,
88
|
99
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
1010

11+
error[E0261]: use of undeclared lifetime name `'b`
12+
--> $DIR/undeclared-lifetime-used-in-debug-macro-issue-70152.rs:3:9
13+
|
14+
LL | #[derive(Eq, PartialEq)]
15+
| -- lifetime `'b` is missing in item created through this procedural macro
16+
LL | struct Test {
17+
LL | a: &'b str,
18+
| ^^ undeclared lifetime
19+
|
20+
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
21+
1122
error[E0261]: use of undeclared lifetime name `'b`
1223
--> $DIR/undeclared-lifetime-used-in-debug-macro-issue-70152.rs:13:13
1324
|
@@ -24,17 +35,6 @@ help: consider introducing lifetime `'b` here
2435
LL | fn foo<'b>(&'b self) {}
2536
| ++++
2637

27-
error[E0261]: use of undeclared lifetime name `'b`
28-
--> $DIR/undeclared-lifetime-used-in-debug-macro-issue-70152.rs:3:9
29-
|
30-
LL | #[derive(Eq, PartialEq)]
31-
| -- lifetime `'b` is missing in item created through this procedural macro
32-
LL | struct Test {
33-
LL | a: &'b str,
34-
| ^^ undeclared lifetime
35-
|
36-
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
37-
3838
error: aborting due to 3 previous errors
3939

4040
For more information about this error, try `rustc --explain E0261`.

0 commit comments

Comments
 (0)