Skip to content

Commit 316c41b

Browse files
authored
Rollup merge of #159732 - mejrs:attribute_crawler, r=nnethercote
optimization: don't look for diagnostic/canonical items without rustc_attrs enabled
2 parents c604cd9 + aabf824 commit 316c41b

2 files changed

Lines changed: 19 additions & 12 deletions

File tree

compiler/rustc_passes/src/canonical_symbols.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use rustc_hir::{CanonicalSymbols, ForeignItemId, find_attr};
22
use rustc_middle::query::{LocalCrate, Providers};
33
use rustc_middle::ty::{Instance, List, TyCtxt};
4-
use rustc_span::Symbol;
54
use rustc_span::def_id::{DefId, LOCAL_CRATE};
5+
use rustc_span::{Symbol, sym};
66

77
use crate::diagnostics::DuplicateCanonicalSymbolInCrate;
88

@@ -57,12 +57,15 @@ fn canonical_symbols(tcx: TyCtxt<'_>, _: LocalCrate) -> CanonicalSymbols {
5757
// Initialize the collector.
5858
let mut canonical_symbols = CanonicalSymbols::new();
5959

60-
// Collect canonical symbols in this crate.
61-
let crate_items = tcx.hir_crate_items(());
62-
for id in crate_items.foreign_items() {
63-
observe_item(tcx, &mut canonical_symbols, id);
60+
// Optimization: can this crate even define canonical items?
61+
// (But do not mark `rustc_attrs` as used while doing so)
62+
if tcx.features().enabled_features().contains(&sym::rustc_attrs) {
63+
// Collect canonical symbols in this crate.
64+
let crate_items = tcx.hir_crate_items(());
65+
for id in crate_items.foreign_items() {
66+
observe_item(tcx, &mut canonical_symbols, id);
67+
}
6468
}
65-
6669
canonical_symbols
6770
}
6871

compiler/rustc_passes/src/diagnostic_items.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ use rustc_hir::diagnostic_items::DiagnosticItems;
1313
use rustc_hir::{CRATE_OWNER_ID, OwnerId, find_attr};
1414
use rustc_middle::query::{LocalCrate, Providers};
1515
use rustc_middle::ty::TyCtxt;
16-
use rustc_span::Symbol;
1716
use rustc_span::def_id::{DefId, LOCAL_CRATE};
17+
use rustc_span::{Symbol, sym};
1818

1919
use crate::diagnostics::DuplicateDiagnosticItemInCrate;
2020

@@ -53,15 +53,19 @@ fn report_duplicate_item(
5353
});
5454
}
5555

56-
/// Traverse and collect the diagnostic items in the current
56+
/// Traverse and collect the diagnostic items in the current crate
5757
fn diagnostic_items(tcx: TyCtxt<'_>, _: LocalCrate) -> DiagnosticItems {
5858
// Initialize the collector.
5959
let mut diagnostic_items = DiagnosticItems::default();
6060

61-
// Collect diagnostic items in this crate.
62-
let crate_items = tcx.hir_crate_items(());
63-
for id in crate_items.owners().chain(std::iter::once(CRATE_OWNER_ID)) {
64-
observe_item(tcx, &mut diagnostic_items, id);
61+
// Optimization: can this crate even define diagnostic items?
62+
// (But do not mark `rustc_attrs` as used while doing so)
63+
if tcx.features().enabled_features().contains(&sym::rustc_attrs) {
64+
// Collect diagnostic items in this crate.
65+
let crate_items = tcx.hir_crate_items(());
66+
for id in crate_items.owners().chain(std::iter::once(CRATE_OWNER_ID)) {
67+
observe_item(tcx, &mut diagnostic_items, id);
68+
}
6569
}
6670

6771
diagnostic_items

0 commit comments

Comments
 (0)