Skip to content

Commit fdf87b1

Browse files
authored
Unrolled build for rust-lang#122771
Rollup merge of rust-lang#122771 - RalfJung:module-items, r=oli-obk add some comments to hir::ModuleItems I've definitely been bitten by this in the past, where I assumed `items()` would give me *all* the items.
2 parents 7d01878 + 0dd8a83 commit fdf87b1

File tree

9 files changed

+27
-19
lines changed

9 files changed

+27
-19
lines changed

compiler/rustc_incremental/src/persist/dirty_clean.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ pub fn check_dirty_clean_annotations(tcx: TyCtxt<'_>) {
148148

149149
let crate_items = tcx.hir_crate_items(());
150150

151-
for id in crate_items.items() {
151+
for id in crate_items.free_items() {
152152
dirty_clean_visitor.check_item(id.owner_id.def_id);
153153
}
154154

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

+6-6
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,12 @@ impl<'hir> Map<'hir> {
166166

167167
#[inline]
168168
pub fn items(self) -> impl Iterator<Item = ItemId> + 'hir {
169-
self.tcx.hir_crate_items(()).items.iter().copied()
169+
self.tcx.hir_crate_items(()).free_items.iter().copied()
170170
}
171171

172172
#[inline]
173173
pub fn module_items(self, module: LocalModDefId) -> impl Iterator<Item = ItemId> + 'hir {
174-
self.tcx.hir_module_items(module).items()
174+
self.tcx.hir_module_items(module).free_items()
175175
}
176176

177177
pub fn def_key(self, def_id: LocalDefId) -> DefKey {
@@ -418,7 +418,7 @@ impl<'hir> Map<'hir> {
418418
V: Visitor<'hir>,
419419
{
420420
let krate = self.tcx.hir_crate_items(());
421-
walk_list!(visitor, visit_item, krate.items().map(|id| self.item(id)));
421+
walk_list!(visitor, visit_item, krate.free_items().map(|id| self.item(id)));
422422
walk_list!(visitor, visit_trait_item, krate.trait_items().map(|id| self.trait_item(id)));
423423
walk_list!(visitor, visit_impl_item, krate.impl_items().map(|id| self.impl_item(id)));
424424
walk_list!(
@@ -436,7 +436,7 @@ impl<'hir> Map<'hir> {
436436
V: Visitor<'hir>,
437437
{
438438
let module = self.tcx.hir_module_items(module);
439-
walk_list!(visitor, visit_item, module.items().map(|id| self.item(id)));
439+
walk_list!(visitor, visit_item, module.free_items().map(|id| self.item(id)));
440440
walk_list!(visitor, visit_trait_item, module.trait_items().map(|id| self.trait_item(id)));
441441
walk_list!(visitor, visit_impl_item, module.impl_items().map(|id| self.impl_item(id)));
442442
walk_list!(
@@ -1197,7 +1197,7 @@ pub(super) fn hir_module_items(tcx: TyCtxt<'_>, module_id: LocalModDefId) -> Mod
11971197
} = collector;
11981198
return ModuleItems {
11991199
submodules: submodules.into_boxed_slice(),
1200-
items: items.into_boxed_slice(),
1200+
free_items: items.into_boxed_slice(),
12011201
trait_items: trait_items.into_boxed_slice(),
12021202
impl_items: impl_items.into_boxed_slice(),
12031203
foreign_items: foreign_items.into_boxed_slice(),
@@ -1226,7 +1226,7 @@ pub(crate) fn hir_crate_items(tcx: TyCtxt<'_>, _: ()) -> ModuleItems {
12261226

12271227
return ModuleItems {
12281228
submodules: submodules.into_boxed_slice(),
1229-
items: items.into_boxed_slice(),
1229+
free_items: items.into_boxed_slice(),
12301230
trait_items: trait_items.into_boxed_slice(),
12311231
impl_items: impl_items.into_boxed_slice(),
12321232
foreign_items: foreign_items.into_boxed_slice(),

compiler/rustc_middle/src/hir/mod.rs

+13-5
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,30 @@ use rustc_span::{ErrorGuaranteed, ExpnId};
2222
#[derive(Debug, HashStable, Encodable, Decodable)]
2323
pub struct ModuleItems {
2424
submodules: Box<[OwnerId]>,
25-
items: Box<[ItemId]>,
25+
free_items: Box<[ItemId]>,
2626
trait_items: Box<[TraitItemId]>,
2727
impl_items: Box<[ImplItemId]>,
2828
foreign_items: Box<[ForeignItemId]>,
2929
body_owners: Box<[LocalDefId]>,
3030
}
3131

3232
impl ModuleItems {
33-
pub fn items(&self) -> impl Iterator<Item = ItemId> + '_ {
34-
self.items.iter().copied()
33+
/// Returns all non-associated locally defined items in all modules.
34+
///
35+
/// Note that this does *not* include associated items of `impl` blocks! It also does not
36+
/// include foreign items. If you want to e.g. get all functions, use `definitions()` below.
37+
///
38+
/// However, this does include the `impl` blocks themselves.
39+
pub fn free_items(&self) -> impl Iterator<Item = ItemId> + '_ {
40+
self.free_items.iter().copied()
3541
}
3642

3743
pub fn trait_items(&self) -> impl Iterator<Item = TraitItemId> + '_ {
3844
self.trait_items.iter().copied()
3945
}
4046

47+
/// Returns all items that are associated with some `impl` block (both inherent and trait impl
48+
/// blocks).
4149
pub fn impl_items(&self) -> impl Iterator<Item = ImplItemId> + '_ {
4250
self.impl_items.iter().copied()
4351
}
@@ -47,7 +55,7 @@ impl ModuleItems {
4755
}
4856

4957
pub fn owners(&self) -> impl Iterator<Item = OwnerId> + '_ {
50-
self.items
58+
self.free_items
5159
.iter()
5260
.map(|id| id.owner_id)
5361
.chain(self.trait_items.iter().map(|id| id.owner_id))
@@ -63,7 +71,7 @@ impl ModuleItems {
6371
&self,
6472
f: impl Fn(ItemId) -> Result<(), ErrorGuaranteed> + DynSend + DynSync,
6573
) -> Result<(), ErrorGuaranteed> {
66-
try_par_for_each_in(&self.items[..], |&id| f(id))
74+
try_par_for_each_in(&self.free_items[..], |&id| f(id))
6775
}
6876

6977
pub fn par_trait_items(

compiler/rustc_monomorphize/src/collector.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1526,7 +1526,7 @@ fn collect_roots(tcx: TyCtxt<'_>, mode: MonoItemCollectionStrategy) -> Vec<MonoI
15261526

15271527
let crate_items = tcx.hir_crate_items(());
15281528

1529-
for id in crate_items.items() {
1529+
for id in crate_items.free_items() {
15301530
collector.process_item(id);
15311531
}
15321532

compiler/rustc_passes/src/dead.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -831,7 +831,7 @@ fn create_and_seed_worklist(
831831
.collect::<Vec<_>>();
832832

833833
let crate_items = tcx.hir_crate_items(());
834-
for id in crate_items.items() {
834+
for id in crate_items.free_items() {
835835
check_item(tcx, &mut worklist, &mut struct_constructors, &mut unsolved_impl_item, id);
836836
}
837837

@@ -1084,7 +1084,7 @@ fn check_mod_deathness(tcx: TyCtxt<'_>, module: LocalModDefId) {
10841084

10851085
let module_items = tcx.hir_module_items(module);
10861086

1087-
for item in module_items.items() {
1087+
for item in module_items.free_items() {
10881088
let def_kind = tcx.def_kind(item.owner_id);
10891089

10901090
let mut dead_codes = Vec::new();

compiler/rustc_passes/src/reachable.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ fn reachable_set(tcx: TyCtxt<'_>, (): ()) -> LocalDefIdSet {
437437
// trait is a lang item.
438438
let crate_items = tcx.hir_crate_items(());
439439

440-
for id in crate_items.items() {
440+
for id in crate_items.free_items() {
441441
check_item(tcx, id, &mut reachable_context.worklist, effective_visibilities);
442442
}
443443

compiler/rustc_privacy/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1696,7 +1696,7 @@ fn check_mod_privacy(tcx: TyCtxt<'_>, module_def_id: LocalModDefId) {
16961696
}
16971697
}
16981698

1699-
for id in module.items() {
1699+
for id in module.free_items() {
17001700
if let ItemKind::Impl(i) = tcx.hir().item(id).kind {
17011701
if let Some(item) = i.of_trait {
17021702
let trait_ref = tcx.impl_trait_ref(id.owner_id.def_id).unwrap();

compiler/rustc_symbol_mangling/src/test.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ pub fn report_symbol_names(tcx: TyCtxt<'_>) {
2525
let mut symbol_names = SymbolNamesTest { tcx };
2626
let crate_items = tcx.hir_crate_items(());
2727

28-
for id in crate_items.items() {
28+
for id in crate_items.free_items() {
2929
symbol_names.process_attrs(id.owner_id.def_id);
3030
}
3131

tests/run-make-fulldeps/obtain-borrowck/driver.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ impl rustc_driver::Callbacks for CompilerCalls {
6868
let mut bodies = Vec::new();
6969

7070
let crate_items = tcx.hir_crate_items(());
71-
for id in crate_items.items() {
71+
for id in crate_items.free_items() {
7272
if matches!(tcx.def_kind(id.owner_id), DefKind::Fn) {
7373
bodies.push(id.owner_id);
7474
}

0 commit comments

Comments
 (0)