Skip to content

Commit 99f3e65

Browse files
committed
Only load the feature list once in the entire resolver
1 parent 942ac9c commit 99f3e65

10 files changed

Lines changed: 57 additions & 57 deletions

File tree

compiler/rustc_interface/src/passes.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ fn configure_and_expand(
139139
) -> ast::Crate {
140140
let tcx = resolver.tcx();
141141
let sess = tcx.sess;
142-
let features = tcx.features();
142+
let features = resolver.features;
143143
let lint_store = unerased_lint_store(sess);
144144
let crate_name = tcx.crate_name(LOCAL_CRATE);
145145
pre_expansion_lint(

compiler/rustc_resolve/src/build_reduced_graph.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -548,7 +548,7 @@ impl<'a, 'ra, 'tcx> DefCollector<'a, 'ra, 'tcx> {
548548
root_id,
549549
vis,
550550
vis_span: item.vis.span,
551-
on_unknown_attr: OnUnknownData::from_attrs(self.r.tcx, &item.attrs),
551+
on_unknown_attr: OnUnknownData::from_attrs(self.r, &item.attrs),
552552
});
553553

554554
self.r.indeterminate_imports.push(import);
@@ -863,7 +863,7 @@ impl<'a, 'ra, 'tcx> DefCollector<'a, 'ra, 'tcx> {
863863
|| ast::attr::contains_name(&item.attrs, sym::no_implicit_prelude),
864864
);
865865
self.parent_scope.module = module.to_module();
866-
if let Some(directive) = OnUnknownData::from_attrs(self.r.tcx, &item.attrs) {
866+
if let Some(directive) = OnUnknownData::from_attrs(self.r, &item.attrs) {
867867
self.r.on_unknown_data.insert(local_def_id, directive);
868868
}
869869
}
@@ -1040,7 +1040,7 @@ impl<'a, 'ra, 'tcx> DefCollector<'a, 'ra, 'tcx> {
10401040
module_path: Vec::new(),
10411041
vis,
10421042
vis_span: item.vis.span,
1043-
on_unknown_attr: OnUnknownData::from_attrs(self.r.tcx, &item.attrs),
1043+
on_unknown_attr: OnUnknownData::from_attrs(self.r, &item.attrs),
10441044
});
10451045
if used {
10461046
self.r.import_use_map.insert(import, Used::Other);
@@ -1172,7 +1172,7 @@ impl<'a, 'ra, 'tcx> DefCollector<'a, 'ra, 'tcx> {
11721172
module_path: Vec::new(),
11731173
vis: Visibility::Restricted(CRATE_DEF_ID),
11741174
vis_span: item.vis.span,
1175-
on_unknown_attr: OnUnknownData::from_attrs(this.r.tcx, &item.attrs),
1175+
on_unknown_attr: OnUnknownData::from_attrs(this.r, &item.attrs),
11761176
})
11771177
};
11781178

@@ -1353,7 +1353,7 @@ impl<'a, 'ra, 'tcx> DefCollector<'a, 'ra, 'tcx> {
13531353
module_path: Vec::new(),
13541354
vis,
13551355
vis_span: item.vis.span,
1356-
on_unknown_attr: OnUnknownData::from_attrs(self.r.tcx, &item.attrs),
1356+
on_unknown_attr: OnUnknownData::from_attrs(self.r, &item.attrs),
13571357
});
13581358
self.r.import_use_map.insert(import, Used::Other);
13591359
let import_decl = self.r.new_import_decl(decl, import);

compiler/rustc_resolve/src/def_collector.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ impl<'a, 'ra, 'tcx> visit::Visitor<'a> for DefCollector<'a, 'ra, 'tcx> {
186186
// Does that prevents errors from happening? maybe
187187
let mut parser = AttributeParser::new(
188188
&self.r.tcx.sess,
189-
self.r.tcx.features(),
189+
self.r.features,
190190
self.r.tcx().registered_tools(()),
191191
ShouldEmit::Nothing,
192192
);
@@ -433,7 +433,7 @@ impl<'a, 'ra, 'tcx> visit::Visitor<'a> for DefCollector<'a, 'ra, 'tcx> {
433433
// `MgcaDisambiguation::Direct` is set even when MGCA is disabled, so
434434
// to avoid affecting stable we have to feature gate the not creating
435435
// anon consts
436-
if !self.r.tcx.features().min_generic_const_args() {
436+
if !self.r.features.min_generic_const_args() {
437437
let parent = self
438438
.create_def(constant.id, None, DefKind::AnonConst, constant.value.span)
439439
.def_id();

compiler/rustc_resolve/src/error_helper.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1628,7 +1628,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
16281628
in_module.for_each_child(self, |this, ident, orig_ident_span, ns, name_binding| {
16291629
// Avoid non-importable candidates.
16301630
if name_binding.is_assoc_item()
1631-
&& !this.tcx.features().import_trait_associated_functions()
1631+
&& !this.features.import_trait_associated_functions()
16321632
{
16331633
return;
16341634
}
@@ -1809,10 +1809,10 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
18091809
}) => {
18101810
if span.allows_unstable(feature) {
18111811
true
1812-
} else if self.tcx.features().enabled(feature) {
1812+
} else if self.features.enabled(feature) {
18131813
true
18141814
} else if let Some(implied_by) = implied_by
1815-
&& self.tcx.features().enabled(implied_by)
1815+
&& self.features.enabled(implied_by)
18161816
{
18171817
true
18181818
} else {
@@ -4144,13 +4144,17 @@ pub(crate) struct OnUnknownData {
41444144
}
41454145

41464146
impl OnUnknownData {
4147-
pub(crate) fn from_attrs<'tcx>(
4148-
tcx: TyCtxt<'tcx>,
4147+
pub(crate) fn from_attrs(
4148+
r: &Resolver<'_, '_>,
41494149
attrs: &[ast::Attribute],
41504150
) -> Option<OnUnknownData> {
4151-
if tcx.features().diagnostic_on_unknown()
4151+
if r.features.diagnostic_on_unknown()
41524152
&& let Some(Attribute::Parsed(AttributeKind::OnUnknown { directive, .. })) =
4153-
AttributeParser::parse_limited(tcx.sess, attrs, &[sym::diagnostic, sym::on_unknown])
4153+
AttributeParser::parse_limited(
4154+
r.tcx.sess,
4155+
attrs,
4156+
&[sym::diagnostic, sym::on_unknown],
4157+
)
41544158
{
41554159
Some(Self { directive: directive? })
41564160
} else {

compiler/rustc_resolve/src/ident.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -746,7 +746,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
746746
Scope::BuiltinTypes => match self.builtin_type_decls.get(&ident.name) {
747747
Some(decl) => {
748748
if matches!(ident.name, sym::f16)
749-
&& !self.tcx.features().f16()
749+
&& !self.features.f16()
750750
&& !orig_ident_span.allows_unstable(sym::f16)
751751
&& finalize.is_some()
752752
{
@@ -759,7 +759,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
759759
.emit();
760760
}
761761
if matches!(ident.name, sym::f128)
762-
&& !self.tcx.features().f128()
762+
&& !self.features.f128()
763763
&& !orig_ident_span.allows_unstable(sym::f128)
764764
&& finalize.is_some()
765765
{
@@ -1535,7 +1535,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
15351535
}
15361536

15371537
RibKind::ConstParamTy => {
1538-
if !self.tcx.features().generic_const_parameter_types() {
1538+
if !self.features.generic_const_parameter_types() {
15391539
if let Some(span) = finalize {
15401540
self.report_error(
15411541
span,
@@ -1564,7 +1564,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
15641564
}
15651565
NoConstantGenericsReason::NonTrivialConstArg => {
15661566
ResolutionError::ParamInNonTrivialAnonConst {
1567-
is_gca: self.tcx.features().generic_const_args(),
1567+
is_gca: self.features.generic_const_args(),
15681568
name: rib_ident.name,
15691569
param_kind: ParamKindInNonTrivialAnonConst::Type,
15701570
}
@@ -1629,7 +1629,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
16291629
| RibKind::ForwardGenericParamBan(_) => continue,
16301630

16311631
RibKind::ConstParamTy => {
1632-
if !self.tcx.features().generic_const_parameter_types() {
1632+
if !self.features.generic_const_parameter_types() {
16331633
if let Some(span) = finalize {
16341634
self.report_error(
16351635
span,
@@ -1656,7 +1656,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
16561656
}
16571657
NoConstantGenericsReason::NonTrivialConstArg => {
16581658
ResolutionError::ParamInNonTrivialAnonConst {
1659-
is_gca: self.tcx.features().generic_const_args(),
1659+
is_gca: self.features.generic_const_args(),
16601660
name: rib_ident.name,
16611661
param_kind: ParamKindInNonTrivialAnonConst::Const {
16621662
name: rib_ident.name,
@@ -2019,7 +2019,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
20192019
module,
20202020
|| {
20212021
let import_inherent_item_error_flag =
2022-
self.tcx.features().import_trait_associated_functions()
2022+
self.features.import_trait_associated_functions()
20232023
&& matches!(
20242024
res,
20252025
Res::Def(

compiler/rustc_resolve/src/imports.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
779779
match import_decls[ns] {
780780
PendingDecl::Ready(Some(import_decl)) => {
781781
if import_decl.is_assoc_item()
782-
&& !this.tcx.features().import_trait_associated_functions()
782+
&& !this.features.import_trait_associated_functions()
783783
{
784784
feature_err(
785785
this.tcx.sess,
@@ -822,8 +822,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
822822
continue;
823823
};
824824

825-
if module.is_trait() && !self.tcx.features().import_trait_associated_functions()
826-
{
825+
if module.is_trait() && !self.features.import_trait_associated_functions() {
827826
feature_err(
828827
self.tcx.sess,
829828
sym::import_trait_associated_functions,
@@ -1487,7 +1486,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
14871486

14881487
// If importing of trait asscoiated items is enabled, an also find an
14891488
// `Enum`, then note that inherent associated items cannot be imported.
1490-
let note = if self.tcx.features().import_trait_associated_functions()
1489+
let note = if self.features.import_trait_associated_functions()
14911490
&& let PathResult::Module(ModuleOrUniformRoot::Module(m)) = path_res
14921491
&& let Some(Res::Def(DefKind::Enum, _)) = m.res()
14931492
{

compiler/rustc_resolve/src/late.rs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1664,7 +1664,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
16641664
};
16651665
// We'll ban these with a `ConstParamTy` rib, so just clear these ribs for better
16661666
// diagnostics, so we don't mention anything about const param tys having generics at all.
1667-
if !self.r.tcx.features().generic_const_parameter_types() {
1667+
if !self.r.features.generic_const_parameter_types() {
16681668
forward_ty_ban_rib_const_param_ty.bindings.clear();
16691669
forward_const_ban_rib_const_param_ty.bindings.clear();
16701670
}
@@ -1701,7 +1701,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
17011701

17021702
this.ribs[TypeNS].push(forward_ty_ban_rib_const_param_ty);
17031703
this.ribs[ValueNS].push(forward_const_ban_rib_const_param_ty);
1704-
if this.r.tcx.features().generic_const_parameter_types() {
1704+
if this.r.features.generic_const_parameter_types() {
17051705
this.visit_ty(ty)
17061706
} else {
17071707
this.ribs[TypeNS].push(Rib::new(RibKind::ConstParamTy));
@@ -1812,8 +1812,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
18121812
}
18131813

18141814
LifetimeRibKind::ImplTrait => {
1815-
if self.r.tcx.features().anonymous_lifetime_in_impl_trait()
1816-
{
1815+
if self.r.features.anonymous_lifetime_in_impl_trait() {
18171816
None
18181817
} else {
18191818
Some(LifetimeUseSet::Many)
@@ -2991,7 +2990,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
29912990
self.with_generic_param_rib(
29922991
&generics.params,
29932992
RibKind::Item(
2994-
if self.r.tcx.features().generic_const_items() {
2993+
if self.r.features.generic_const_items() {
29952994
HasGenericParams::Yes(generics.span)
29962995
} else {
29972996
HasGenericParams::No
@@ -3008,7 +3007,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
30083007
LifetimeRibKind::Elided(LifetimeRes::Static),
30093008
|this| {
30103009
if rhs_kind.is_type_const()
3011-
&& !this.r.tcx.features().generic_const_parameter_types()
3010+
&& !this.r.features.generic_const_parameter_types()
30123011
{
30133012
this.with_rib(TypeNS, RibKind::ConstParamTy, |this| {
30143013
this.with_rib(ValueNS, RibKind::ConstParamTy, |this| {
@@ -3255,7 +3254,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
32553254
RibKind::Normal => {
32563255
// FIXME(non_lifetime_binders): Stop special-casing
32573256
// const params to error out here.
3258-
if self.r.tcx.features().non_lifetime_binders()
3257+
if self.r.features.non_lifetime_binders()
32593258
&& matches!(param.kind, GenericParamKind::Type { .. })
32603259
{
32613260
Res::Def(def_kind, def_id.to_def_id())
@@ -3409,7 +3408,7 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
34093408
|this| {
34103409
this.visit_generics(generics);
34113410
if rhs_kind.is_type_const()
3412-
&& !this.r.tcx.features().generic_const_parameter_types()
3411+
&& !this.r.features.generic_const_parameter_types()
34133412
{
34143413
this.with_rib(TypeNS, RibKind::ConstParamTy, |this| {
34153414
this.with_rib(ValueNS, RibKind::ConstParamTy, |this| {
@@ -5038,10 +5037,10 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
50385037
let tcx = self.r.tcx();
50395038

50405039
let gate_err_sym_msg = match prim {
5041-
PrimTy::Float(FloatTy::F16) if !tcx.features().f16() => {
5040+
PrimTy::Float(FloatTy::F16) if !self.r.features.f16() => {
50425041
Some((sym::f16, "the type `f16` is unstable"))
50435042
}
5044-
PrimTy::Float(FloatTy::F128) if !tcx.features().f128() => {
5043+
PrimTy::Float(FloatTy::F128) if !self.r.features.f128() => {
50455044
Some((sym::f128, "the type `f128` is unstable"))
50465045
}
50475046
_ => None,
@@ -5196,8 +5195,8 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
51965195
AnonConstKind::FieldDefaultValue => ConstantHasGenerics::Yes,
51975196
AnonConstKind::InlineConst => ConstantHasGenerics::Yes,
51985197
AnonConstKind::ConstArg(_) => {
5199-
if self.r.tcx.features().generic_const_exprs()
5200-
|| self.r.tcx.features().min_generic_const_args()
5198+
if self.r.features.generic_const_exprs()
5199+
|| self.r.features.min_generic_const_args()
52015200
|| is_trivial_const_arg
52025201
{
52035202
ConstantHasGenerics::Yes

compiler/rustc_resolve/src/late/diagnostics.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1775,8 +1775,7 @@ impl<'ast, 'ra, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {
17751775
// const generics. Of course, `Struct` and `Enum` may contain ty params, too, but the
17761776
// benefits of including them here outweighs the small number of false positives.
17771777
Some(Res::Def(DefKind::Struct | DefKind::Enum, _))
1778-
if self.r.tcx.features().adt_const_params()
1779-
|| self.r.tcx.features().min_adt_const_params() =>
1778+
if self.r.features.adt_const_params() || self.r.features.min_adt_const_params() =>
17801779
{
17811780
Applicability::MaybeIncorrect
17821781
}
@@ -3977,16 +3976,16 @@ impl<'ast, 'ra, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {
39773976
})
39783977
.emit(),
39793978
NoConstantGenericsReason::NonTrivialConstArg => {
3980-
assert!(!self.r.tcx.features().generic_const_exprs());
3979+
assert!(!self.r.features.generic_const_exprs());
39813980
self.r
39823981
.dcx()
39833982
.create_err(diagnostics::ParamInNonTrivialAnonConst {
39843983
span: lifetime_ref.ident.span,
39853984
name: lifetime_ref.ident.name,
39863985
param_kind: diagnostics::ParamKindInNonTrivialAnonConst::Lifetime,
39873986
help: self.r.tcx.sess.is_nightly_build(),
3988-
is_gca: self.r.tcx.features().generic_const_args(),
3989-
help_gca: self.r.tcx.features().generic_const_args(),
3987+
is_gca: self.r.features.generic_const_args(),
3988+
help_gca: self.r.features.generic_const_args(),
39903989
})
39913990
.emit()
39923991
}

0 commit comments

Comments
 (0)