Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit da17709

Browse files
committed
Add requested changes by reviewer
1 parent fb9cc98 commit da17709

File tree

6 files changed

+54
-26
lines changed

6 files changed

+54
-26
lines changed

compiler/rustc_middle/src/ty/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ pub struct ResolverGlobalCtxt {
175175
/// Item with a given `LocalDefId` was defined during macro expansion with ID `ExpnId`.
176176
pub expn_that_defined: FxHashMap<LocalDefId, ExpnId>,
177177
pub effective_visibilities: EffectiveVisibilities,
178-
pub extern_crate_map: FxIndexMap<LocalDefId, CrateNum>,
178+
pub extern_crate_map: FxHashMap<LocalDefId, CrateNum>,
179179
pub maybe_unused_trait_imports: FxIndexSet<LocalDefId>,
180180
pub module_children: LocalDefIdMap<Vec<ModChild>>,
181181
pub glob_map: FxHashMap<LocalDefId, FxHashSet<Symbol>>,

compiler/rustc_resolve/src/diagnostics.rs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use rustc_ast::{
55
self as ast, CRATE_NODE_ID, Crate, ItemKind, MetaItemInner, MetaItemKind, ModKind, NodeId, Path,
66
};
77
use rustc_ast_pretty::pprust;
8-
use rustc_data_structures::fx::{FxHashSet, FxIndexSet};
8+
use rustc_data_structures::fx::FxHashSet;
99
use rustc_errors::codes::*;
1010
use rustc_errors::{
1111
Applicability, Diag, DiagCtxtHandle, ErrorGuaranteed, MultiSpan, SuggestionStyle,
@@ -1086,6 +1086,8 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
10861086
this.add_module_candidates(module, &mut suggestions, filter_fn, None);
10871087
}
10881088
Scope::MacroUsePrelude => {
1089+
// The suggestions are deterministically sorted later
1090+
#[allow(rustc::potential_query_instability)]
10891091
suggestions.extend(this.macro_use_prelude.iter().filter_map(
10901092
|(name, binding)| {
10911093
let res = binding.res();
@@ -1104,6 +1106,8 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
11041106
}
11051107
}
11061108
Scope::ExternPrelude => {
1109+
// The suggestions are deterministically sorted later
1110+
#[allow(rustc::potential_query_instability)]
11071111
suggestions.extend(this.extern_prelude.iter().filter_map(|(ident, _)| {
11081112
let res = Res::Def(DefKind::Mod, CRATE_DEF_ID.to_def_id());
11091113
filter_fn(res).then_some(TypoSuggestion::typo_from_ident(*ident, res))
@@ -1362,6 +1366,8 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
13621366
);
13631367

13641368
if lookup_ident.span.at_least_rust_2018() {
1369+
// It will be sorted later.
1370+
#[allow(rustc::potential_query_instability)]
13651371
for ident in self.extern_prelude.clone().into_keys() {
13661372
if ident.span.from_expansion() {
13671373
// Idents are adjusted to the root context before being
@@ -1467,7 +1473,11 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
14671473
return;
14681474
}
14691475

1470-
let unused_macro = self.unused_macros.iter().find_map(|(def_id, (_, unused_ident))| {
1476+
// Make ordering consistent before iteration
1477+
#[allow(rustc::potential_query_instability)]
1478+
let mut unused_macros: Vec<_> = self.unused_macros.iter().collect();
1479+
unused_macros.sort_by_key(|&(_, (key, _))| key);
1480+
let unused_macro = unused_macros.iter().find_map(|(def_id, (_, unused_ident))| {
14711481
if unused_ident.name == ident.name { Some((def_id, unused_ident)) } else { None }
14721482
});
14731483

@@ -1954,6 +1964,8 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
19541964
ident: Symbol,
19551965
current_module: Module<'ra>,
19561966
) -> Option<Symbol> {
1967+
// It will be sorted later.
1968+
#[allow(rustc::potential_query_instability)]
19571969
let mut candidates = self
19581970
.extern_prelude
19591971
.keys()
@@ -2342,6 +2354,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
23422354
// Sort extern crate names in *reverse* order to get
23432355
// 1) some consistent ordering for emitted diagnostics, and
23442356
// 2) `std` suggestions before `core` suggestions.
2357+
#[allow(rustc::potential_query_instability)]
23452358
let mut extern_crate_names =
23462359
self.extern_prelude.keys().map(|ident| ident.name).collect::<Vec<_>>();
23472360
extern_crate_names.sort_by(|a, b| b.as_str().partial_cmp(a.as_str()).unwrap());
@@ -2839,10 +2852,12 @@ fn show_candidates(
28392852
} else {
28402853
// Get the unique item kinds and if there's only one, we use the right kind name
28412854
// instead of the more generic "items".
2855+
// Ordering is not important here.
2856+
#[allow(rustc::potential_query_instability)]
28422857
let mut kinds = accessible_path_strings
28432858
.iter()
28442859
.map(|(_, descr, _, _, _)| *descr)
2845-
.collect::<FxIndexSet<&str>>()
2860+
.collect::<FxHashSet<&str>>()
28462861
.into_iter();
28472862
let kind = if let Some(kind) = kinds.next()
28482863
&& let None = kinds.next()

compiler/rustc_resolve/src/late.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use std::mem::{replace, swap, take};
1515
use rustc_ast::ptr::P;
1616
use rustc_ast::visit::{AssocCtxt, BoundKind, FnCtxt, FnKind, Visitor, visit_opt, walk_list};
1717
use rustc_ast::*;
18-
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap, FxIndexSet};
18+
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap};
1919
use rustc_errors::codes::*;
2020
use rustc_errors::{Applicability, DiagArgValue, IntoDiagArg, StashKey, Suggestions};
2121
use rustc_hir::def::Namespace::{self, *};
@@ -44,8 +44,6 @@ mod diagnostics;
4444

4545
type Res = def::Res<NodeId>;
4646

47-
type IdentMap<T> = FxIndexMap<Ident, T>;
48-
4947
use diagnostics::{ElisionFnParameter, LifetimeElisionCandidate, MissingLifetime};
5048

5149
#[derive(Copy, Clone, Debug)]
@@ -261,7 +259,7 @@ impl RibKind<'_> {
261259
/// resolving, the name is looked up from inside out.
262260
#[derive(Debug)]
263261
pub(crate) struct Rib<'ra, R = Res> {
264-
pub bindings: IdentMap<R>,
262+
pub bindings: FxIndexMap<Ident, R>,
265263
pub kind: RibKind<'ra>,
266264
}
267265

@@ -640,7 +638,7 @@ struct DiagMetadata<'ast> {
640638

641639
/// A list of labels as of yet unused. Labels will be removed from this map when
642640
/// they are used (in a `break` or `continue` statement)
643-
unused_labels: FxIndexMap<NodeId, Span>,
641+
unused_labels: FxHashMap<NodeId, Span>,
644642

645643
/// Only used for better errors on `let x = { foo: bar };`.
646644
/// In the case of a parse error with `let x = { foo: bar, };`, this isn't needed, it's only
@@ -2236,7 +2234,7 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
22362234
let local_candidates = self.lifetime_elision_candidates.take();
22372235

22382236
if let Some(candidates) = local_candidates {
2239-
let distinct: FxIndexSet<_> = candidates.iter().map(|(res, _)| *res).collect();
2237+
let distinct: FxHashSet<_> = candidates.iter().map(|(res, _)| *res).collect();
22402238
let lifetime_count = distinct.len();
22412239
if lifetime_count != 0 {
22422240
parameter_info.push(ElisionFnParameter {
@@ -2260,6 +2258,8 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
22602258
}
22612259
}));
22622260
}
2261+
// Ordering is not important here.
2262+
#[allow(rustc::potential_query_instability)]
22632263
let mut distinct_iter = distinct.into_iter();
22642264
if let Some(res) = distinct_iter.next() {
22652265
match elision_lifetime {
@@ -3868,7 +3868,7 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
38683868
}
38693869
}
38703870

3871-
fn innermost_rib_bindings(&mut self, ns: Namespace) -> &mut IdentMap<Res> {
3871+
fn innermost_rib_bindings(&mut self, ns: Namespace) -> &mut FxIndexMap<Ident, Res> {
38723872
&mut self.ribs[ns].last_mut().unwrap().bindings
38733873
}
38743874

@@ -4621,7 +4621,7 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
46214621
Ok((node_id, _)) => {
46224622
// Since this res is a label, it is never read.
46234623
self.r.label_res_map.insert(expr.id, node_id);
4624-
self.diag_metadata.unused_labels.shift_remove(&node_id);
4624+
self.diag_metadata.unused_labels.remove(&node_id);
46254625
}
46264626
Err(error) => {
46274627
self.report_error(label.ident.span, error);
@@ -5046,7 +5046,12 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
50465046
let mut late_resolution_visitor = LateResolutionVisitor::new(self);
50475047
late_resolution_visitor.resolve_doc_links(&krate.attrs, MaybeExported::Ok(CRATE_NODE_ID));
50485048
visit::walk_crate(&mut late_resolution_visitor, krate);
5049-
for (id, span) in late_resolution_visitor.diag_metadata.unused_labels.iter() {
5049+
// Make ordering consistent before iteration
5050+
#[allow(rustc::potential_query_instability)]
5051+
let mut unused_labels: Vec<_> =
5052+
late_resolution_visitor.diag_metadata.unused_labels.iter().collect();
5053+
unused_labels.sort_by_key(|&(key, _)| key);
5054+
for (id, span) in unused_labels {
50505055
self.lint_buffer.buffer_lint(
50515056
lint::builtin::UNUSED_LABELS,
50525057
*id,

compiler/rustc_resolve/src/late/diagnostics.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -960,7 +960,7 @@ impl<'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {
960960
Applicability::MaybeIncorrect,
961961
);
962962
// Do not lint against unused label when we suggest them.
963-
self.diag_metadata.unused_labels.shift_remove(node_id);
963+
self.diag_metadata.unused_labels.remove(node_id);
964964
}
965965
}
966966
}
@@ -1928,6 +1928,8 @@ impl<'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {
19281928
let Some(default_trait) = default_trait else {
19291929
return;
19301930
};
1931+
// The ordering is not important here.
1932+
#[allow(rustc::potential_query_instability)]
19311933
if self
19321934
.r
19331935
.extern_crate_map
@@ -2166,6 +2168,8 @@ impl<'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {
21662168
// Items from the prelude
21672169
if !module.no_implicit_prelude {
21682170
let extern_prelude = self.r.extern_prelude.clone();
2171+
// It is sorted later so ordering is not important.
2172+
#[allow(rustc::potential_query_instability)]
21692173
names.extend(extern_prelude.iter().flat_map(|(ident, _)| {
21702174
self.r
21712175
.crate_loader(|c| c.maybe_process_path_extern(ident.name))

compiler/rustc_resolve/src/lib.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,7 +1021,7 @@ pub struct Resolver<'ra, 'tcx> {
10211021
graph_root: Module<'ra>,
10221022

10231023
prelude: Option<Module<'ra>>,
1024-
extern_prelude: FxIndexMap<Ident, ExternPreludeEntry<'ra>>,
1024+
extern_prelude: FxHashMap<Ident, ExternPreludeEntry<'ra>>,
10251025

10261026
/// N.B., this is used only for better diagnostics, not name resolution itself.
10271027
field_names: LocalDefIdMap<Vec<Ident>>,
@@ -1054,7 +1054,7 @@ pub struct Resolver<'ra, 'tcx> {
10541054
extra_lifetime_params_map: NodeMap<Vec<(Ident, NodeId, LifetimeRes)>>,
10551055

10561056
/// `CrateNum` resolutions of `extern crate` items.
1057-
extern_crate_map: FxIndexMap<LocalDefId, CrateNum>,
1057+
extern_crate_map: FxHashMap<LocalDefId, CrateNum>,
10581058
module_children: LocalDefIdMap<Vec<ModChild>>,
10591059
trait_map: NodeMap<Vec<TraitCandidate>>,
10601060

@@ -1077,7 +1077,7 @@ pub struct Resolver<'ra, 'tcx> {
10771077
/// some AST passes can generate identifiers that only resolve to local or
10781078
/// lang items.
10791079
empty_module: Module<'ra>,
1080-
module_map: FxIndexMap<DefId, Module<'ra>>,
1080+
module_map: FxHashMap<DefId, Module<'ra>>,
10811081
binding_parent_modules: FxHashMap<NameBinding<'ra>, Module<'ra>>,
10821082

10831083
underscore_disambiguator: u32,
@@ -1113,14 +1113,14 @@ pub struct Resolver<'ra, 'tcx> {
11131113
macro_names: FxHashSet<Ident>,
11141114
builtin_macros: FxHashMap<Symbol, BuiltinMacroState>,
11151115
registered_tools: &'tcx RegisteredTools,
1116-
macro_use_prelude: FxIndexMap<Symbol, NameBinding<'ra>>,
1116+
macro_use_prelude: FxHashMap<Symbol, NameBinding<'ra>>,
11171117
macro_map: FxHashMap<DefId, MacroData>,
11181118
dummy_ext_bang: Lrc<SyntaxExtension>,
11191119
dummy_ext_derive: Lrc<SyntaxExtension>,
11201120
non_macro_attr: MacroData,
11211121
local_macro_def_scopes: FxHashMap<LocalDefId, Module<'ra>>,
11221122
ast_transform_scopes: FxHashMap<LocalExpnId, Module<'ra>>,
1123-
unused_macros: FxIndexMap<LocalDefId, (NodeId, Ident)>,
1123+
unused_macros: FxHashMap<LocalDefId, (NodeId, Ident)>,
11241124
/// A map from the macro to all its potentially unused arms.
11251125
unused_macro_rules: FxIndexMap<LocalDefId, FxIndexMap<usize, (Ident, Span)>>,
11261126
proc_macro_stubs: FxHashSet<LocalDefId>,
@@ -1234,7 +1234,7 @@ impl<'ra> ResolverArenas<'ra> {
12341234
expn_id: ExpnId,
12351235
span: Span,
12361236
no_implicit_prelude: bool,
1237-
module_map: &mut FxIndexMap<DefId, Module<'ra>>,
1237+
module_map: &mut FxHashMap<DefId, Module<'ra>>,
12381238
module_self_bindings: &mut FxHashMap<Module<'ra>, NameBinding<'ra>>,
12391239
) -> Module<'ra> {
12401240
let module = Module(Interned::new_unchecked(self.modules.alloc(ModuleData::new(
@@ -1379,7 +1379,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
13791379
arenas: &'ra ResolverArenas<'ra>,
13801380
) -> Resolver<'ra, 'tcx> {
13811381
let root_def_id = CRATE_DEF_ID.to_def_id();
1382-
let mut module_map = FxIndexMap::default();
1382+
let mut module_map = FxHashMap::default();
13831383
let mut module_self_bindings = FxHashMap::default();
13841384
let graph_root = arenas.new_module(
13851385
None,
@@ -1396,7 +1396,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
13961396
ExpnId::root(),
13971397
DUMMY_SP,
13981398
true,
1399-
&mut FxIndexMap::default(),
1399+
&mut FxHashMap::default(),
14001400
&mut FxHashMap::default(),
14011401
);
14021402

@@ -1412,7 +1412,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
14121412
let mut invocation_parents = FxHashMap::default();
14131413
invocation_parents.insert(LocalExpnId::ROOT, InvocationParent::ROOT);
14141414

1415-
let mut extern_prelude: FxIndexMap<Ident, ExternPreludeEntry<'_>> = tcx
1415+
let mut extern_prelude: FxHashMap<Ident, ExternPreludeEntry<'_>> = tcx
14161416
.sess
14171417
.opts
14181418
.externs
@@ -1512,7 +1512,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
15121512
macro_names: FxHashSet::default(),
15131513
builtin_macros: Default::default(),
15141514
registered_tools,
1515-
macro_use_prelude: FxIndexMap::default(),
1515+
macro_use_prelude: FxHashMap::default(),
15161516
macro_map: FxHashMap::default(),
15171517
dummy_ext_bang: Lrc::new(SyntaxExtension::dummy_bang(edition)),
15181518
dummy_ext_derive: Lrc::new(SyntaxExtension::dummy_derive(edition)),

compiler/rustc_resolve/src/macros.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,11 @@ impl<'ra, 'tcx> ResolverExpand for Resolver<'ra, 'tcx> {
346346
}
347347

348348
fn check_unused_macros(&mut self) {
349-
for (_, &(node_id, ident)) in self.unused_macros.iter() {
349+
// Make ordering consistent before iteration
350+
#[allow(rustc::potential_query_instability)]
351+
let mut unused_macros: Vec<_> = self.unused_macros.iter().collect();
352+
unused_macros.sort_by_key(|&(_, (key, _))| key);
353+
for (_, &(node_id, ident)) in unused_macros {
350354
self.lint_buffer.buffer_lint(
351355
UNUSED_MACROS,
352356
node_id,
@@ -602,7 +606,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
602606
match res {
603607
Res::Def(DefKind::Macro(_), def_id) => {
604608
if let Some(def_id) = def_id.as_local() {
605-
self.unused_macros.shift_remove(&def_id);
609+
self.unused_macros.remove(&def_id);
606610
if self.proc_macro_stubs.contains(&def_id) {
607611
self.dcx().emit_err(errors::ProcMacroSameCrate {
608612
span: path.span,

0 commit comments

Comments
 (0)