Skip to content

Commit 77a42ec

Browse files
committed
Use AssocItemContainer more
1 parent 94b2505 commit 77a42ec

File tree

8 files changed

+32
-36
lines changed

8 files changed

+32
-36
lines changed

compiler/rustc_hir_typeck/src/method/confirm.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -272,11 +272,13 @@ impl<'a, 'tcx> ConfirmContext<'a, 'tcx> {
272272
) -> GenericArgsRef<'tcx> {
273273
match pick.kind {
274274
probe::InherentImplPick => {
275-
let impl_def_id = pick.item.container_id(self.tcx);
276-
assert!(
277-
self.tcx.impl_trait_ref(impl_def_id).is_none(),
278-
"impl {impl_def_id:?} is not an inherent impl"
275+
assert_eq!(
276+
pick.item.container,
277+
ty::AssocItemContainer::InherentImpl,
278+
"{:?} is not in an inherent impl",
279+
pick.item.def_id,
279280
);
281+
let impl_def_id = pick.item.container_id(self.tcx);
280282
self.fresh_args_for_item(self.span, impl_def_id)
281283
}
282284

compiler/rustc_lint/src/nonstandard_style.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,6 @@ use crate::lints::{
2020
};
2121
use crate::{EarlyContext, EarlyLintPass, LateContext, LateLintPass, LintContext};
2222

23-
fn assoc_item_in_trait_impl(cx: &LateContext<'_>, ii: &hir::ImplItem<'_>) -> bool {
24-
let item = cx.tcx.associated_item(ii.owner_id);
25-
item.trait_item_def_id.is_some()
26-
}
27-
2823
declare_lint! {
2924
/// The `non_camel_case_types` lint detects types, variants, traits and
3025
/// type parameters that don't have camel case names.
@@ -592,7 +587,7 @@ impl<'tcx> LateLintPass<'tcx> for NonUpperCaseGlobals {
592587

593588
fn check_impl_item(&mut self, cx: &LateContext<'_>, ii: &hir::ImplItem<'_>) {
594589
if let hir::ImplItemKind::Const(..) = ii.kind
595-
&& !assoc_item_in_trait_impl(cx, ii)
590+
&& cx.tcx.associated_item(ii.owner_id).container != AssocItemContainer::TraitImpl
596591
{
597592
NonUpperCaseGlobals::check_upper_case(cx, "associated constant", None, &ii.ident);
598593
}

compiler/rustc_lint/src/types.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ use rustc_hir::{AmbigArg, Expr, ExprKind, HirId, LangItem};
99
use rustc_middle::bug;
1010
use rustc_middle::ty::layout::{LayoutOf, SizeSkeleton};
1111
use rustc_middle::ty::{
12-
self, Adt, AdtKind, GenericArgsRef, Ty, TyCtxt, TypeSuperVisitable, TypeVisitable,
13-
TypeVisitableExt,
12+
self, Adt, AdtKind, AssocItemContainer, GenericArgsRef, Ty, TyCtxt, TypeSuperVisitable,
13+
TypeVisitable, TypeVisitableExt,
1414
};
1515
use rustc_session::{declare_lint, declare_lint_pass, impl_lint_pass};
1616
use rustc_span::def_id::LocalDefId;
@@ -1904,10 +1904,10 @@ impl InvalidAtomicOrdering {
19041904
if let ExprKind::MethodCall(method_path, _, args, _) = &expr.kind
19051905
&& recognized_names.contains(&method_path.ident.name)
19061906
&& let Some(m_def_id) = cx.typeck_results().type_dependent_def_id(expr.hir_id)
1907-
&& let Some(impl_did) = cx.tcx.impl_of_assoc(m_def_id)
1908-
&& let Some(adt) = cx.tcx.type_of(impl_did).instantiate_identity().ty_adt_def()
19091907
// skip extension traits, only lint functions from the standard library
1910-
&& cx.tcx.trait_id_of_impl(impl_did).is_none()
1908+
&& cx.tcx.associated_item(m_def_id).container == AssocItemContainer::InherentImpl
1909+
&& let impl_id = cx.tcx.parent(m_def_id)
1910+
&& let Some(adt) = cx.tcx.type_of(impl_id).instantiate_identity().ty_adt_def()
19111911
&& let parent = cx.tcx.parent(adt.did())
19121912
&& cx.tcx.is_diagnostic_item(sym::atomic_mod, parent)
19131913
&& ATOMIC_TYPES.contains(&cx.tcx.item_name(adt.did()))

compiler/rustc_middle/src/middle/privacy.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use rustc_data_structures::fx::{FxIndexMap, IndexEntry};
88
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
99
use rustc_hir::def::DefKind;
1010
use rustc_macros::HashStable;
11+
use rustc_middle::ty::AssocItemContainer;
1112
use rustc_query_system::ich::StableHashingContext;
1213
use rustc_span::def_id::{CRATE_DEF_ID, LocalDefId};
1314

@@ -180,11 +181,11 @@ impl EffectiveVisibilities {
180181
// All effective visibilities except `reachable_through_impl_trait` are limited to
181182
// nominal visibility. For some items nominal visibility doesn't make sense so we
182183
// don't check this condition for them.
183-
let is_impl = matches!(tcx.def_kind(def_id), DefKind::Impl { .. });
184-
let is_associated_item_in_trait_impl = tcx
185-
.impl_of_assoc(def_id.to_def_id())
186-
.and_then(|impl_id| tcx.trait_id_of_impl(impl_id))
187-
.is_some();
184+
let def_kind = tcx.def_kind(def_id);
185+
let is_impl = matches!(def_kind, DefKind::Impl { .. });
186+
let is_associated_item_in_trait_impl = def_kind.is_assoc()
187+
&& tcx.associated_item(def_id.to_def_id()).container
188+
== AssocItemContainer::TraitImpl;
188189
if !is_impl && !is_associated_item_in_trait_impl {
189190
let nominal_vis = tcx.visibility(def_id);
190191
if !nominal_vis.is_at_least(ev.reachable, tcx) {

compiler/rustc_passes/src/check_attr.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use rustc_middle::middle::resolve_bound_vars::ObjectLifetimeDefault;
3333
use rustc_middle::query::Providers;
3434
use rustc_middle::traits::ObligationCause;
3535
use rustc_middle::ty::error::{ExpectedFound, TypeError};
36-
use rustc_middle::ty::{self, TyCtxt, TypingMode};
36+
use rustc_middle::ty::{self, AssocItemContainer, TyCtxt, TypingMode};
3737
use rustc_middle::{bug, span_bug};
3838
use rustc_session::config::CrateType;
3939
use rustc_session::lint;
@@ -2662,8 +2662,8 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
26622662
fn check_type_const(&self, hir_id: HirId, attr_span: Span, target: Target) {
26632663
let tcx = self.tcx;
26642664
if target == Target::AssocConst
2665-
&& let parent = tcx.parent(hir_id.expect_owner().to_def_id())
2666-
&& self.tcx.def_kind(parent) == DefKind::Trait
2665+
&& tcx.associated_item(hir_id.expect_owner().to_def_id()).container
2666+
== AssocItemContainer::Trait
26672667
{
26682668
return;
26692669
} else {

compiler/rustc_trait_selection/src/error_reporting/traits/call_kind.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
//! as well as errors when attempting to call a non-const function in a const
33
//! context.
44
5-
use rustc_hir::def::DefKind;
65
use rustc_hir::def_id::DefId;
76
use rustc_hir::{LangItem, lang_items};
87
use rustc_middle::ty::{AssocItemContainer, GenericArgsRef, Instance, Ty, TyCtxt, TypingEnv};
@@ -106,8 +105,8 @@ pub fn call_kind<'tcx>(
106105
);
107106
let deref_target_span = if let Ok(Some(instance)) =
108107
Instance::try_resolve(tcx, typing_env, method_did, method_args)
108+
&& tcx.associated_item(instance.def_id()).container == AssocItemContainer::TraitImpl
109109
&& let instance_parent_def_id = tcx.parent(instance.def_id())
110-
&& matches!(tcx.def_kind(instance_parent_def_id), DefKind::Impl { .. })
111110
&& let Ok(instance) =
112111
specialization_graph::assoc_def(tcx, instance_parent_def_id, deref_target_def_id)
113112
&& instance.is_final()

compiler/rustc_trait_selection/src/traits/normalize.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ use rustc_macros::extension;
1111
use rustc_middle::span_bug;
1212
use rustc_middle::traits::{ObligationCause, ObligationCauseCode};
1313
use rustc_middle::ty::{
14-
self, AliasTerm, Term, Ty, TyCtxt, TypeFoldable, TypeFolder, TypeSuperFoldable, TypeVisitable,
15-
TypeVisitableExt, TypingMode,
14+
self, AliasTerm, AssocItemContainer, Term, Ty, TyCtxt, TypeFoldable, TypeFolder,
15+
TypeSuperFoldable, TypeVisitable, TypeVisitableExt, TypingMode,
1616
};
1717
use tracing::{debug, instrument};
1818

@@ -450,14 +450,13 @@ impl<'a, 'b, 'tcx> TypeFolder<TyCtxt<'tcx>> for AssocTypeNormalizer<'a, 'b, 'tcx
450450
};
451451

452452
let ct = match tcx.def_kind(uv.def) {
453-
DefKind::AssocConst => match tcx.def_kind(tcx.parent(uv.def)) {
454-
DefKind::Trait => self.normalize_trait_projection(uv.into()),
455-
DefKind::Impl { of_trait: false } => {
453+
DefKind::AssocConst => match tcx.associated_item(uv.def).container {
454+
AssocItemContainer::Trait => self.normalize_trait_projection(uv.into()),
455+
AssocItemContainer::InherentImpl => {
456456
self.normalize_inherent_projection(uv.into())
457457
}
458-
kind => unreachable!(
459-
"unexpected `DefKind` for const alias' resolution's parent def: {:?}",
460-
kind
458+
AssocItemContainer::TraitImpl => unreachable!(
459+
"unexpected `TraitImpl` container for const alias' resolution's parent def",
461460
),
462461
},
463462
DefKind::Const | DefKind::AnonConst => self.normalize_free_alias(uv.into()),

compiler/rustc_trait_selection/src/traits/wf.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ use rustc_hir::lang_items::LangItem;
1111
use rustc_infer::traits::{ObligationCauseCode, PredicateObligations};
1212
use rustc_middle::bug;
1313
use rustc_middle::ty::{
14-
self, GenericArgsRef, Term, TermKind, Ty, TyCtxt, TypeSuperVisitable, TypeVisitable,
15-
TypeVisitableExt, TypeVisitor,
14+
self, AssocItemContainer, GenericArgsRef, Term, TermKind, Ty, TyCtxt, TypeSuperVisitable,
15+
TypeVisitable, TypeVisitableExt, TypeVisitor,
1616
};
1717
use rustc_session::parse::feature_err;
1818
use rustc_span::def_id::{DefId, LocalDefId};
@@ -984,7 +984,7 @@ impl<'a, 'tcx> TypeVisitor<TyCtxt<'tcx>> for WfPredicates<'a, 'tcx> {
984984
));
985985

986986
if tcx.def_kind(uv.def) == DefKind::AssocConst
987-
&& tcx.def_kind(tcx.parent(uv.def)) == (DefKind::Impl { of_trait: false })
987+
&& tcx.associated_item(uv.def).container == AssocItemContainer::InherentImpl
988988
{
989989
self.add_wf_preds_for_inherent_projection(uv.into());
990990
return; // Subtree is handled by above function

0 commit comments

Comments
 (0)