Skip to content

Commit 27742c8

Browse files
committed
Don't store defaultness for inherent impl items
1 parent 4d28a9d commit 27742c8

File tree

5 files changed

+13
-8
lines changed

5 files changed

+13
-8
lines changed

compiler/rustc_metadata/src/rmeta/encoder.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1725,11 +1725,11 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
17251725
let tcx = self.tcx;
17261726
let item = tcx.associated_item(def_id);
17271727

1728-
self.tables.defaultness.set_some(def_id.index, item.defaultness(tcx));
17291728
self.tables.assoc_container.set_some(def_id.index, item.container);
17301729

17311730
match item.container {
17321731
AssocItemContainer::Trait => {
1732+
self.tables.defaultness.set_some(def_id.index, item.defaultness(tcx));
17331733
if item.is_type() {
17341734
self.encode_explicit_item_bounds(def_id);
17351735
self.encode_explicit_item_self_bounds(def_id);
@@ -1740,6 +1740,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
17401740
}
17411741
}
17421742
AssocItemContainer::TraitImpl => {
1743+
self.tables.defaultness.set_some(def_id.index, item.defaultness(tcx));
17431744
if let Some(trait_item_def_id) = item.trait_item_def_id {
17441745
self.tables.trait_item_def_id.set_some(def_id.index, trait_item_def_id.into());
17451746
}

compiler/rustc_middle/src/ty/assoc.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,12 @@ impl AssocItem {
5757
///
5858
/// [`type_of`]: crate::ty::TyCtxt::type_of
5959
pub fn defaultness(&self, tcx: TyCtxt<'_>) -> hir::Defaultness {
60-
tcx.defaultness(self.def_id)
60+
match self.container {
61+
AssocItemContainer::InherentImpl => hir::Defaultness::Final,
62+
AssocItemContainer::Trait | AssocItemContainer::TraitImpl => {
63+
tcx.defaultness(self.def_id)
64+
}
65+
}
6166
}
6267

6368
#[inline]

compiler/rustc_ty_utils/src/ty.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,6 @@ fn defaultness(tcx: TyCtxt<'_>, def_id: LocalDefId) -> hir::Defaultness {
8989
..
9090
})
9191
| hir::Node::TraitItem(hir::TraitItem { defaultness, .. }) => *defaultness,
92-
hir::Node::ImplItem(hir::ImplItem {
93-
impl_kind: hir::ImplItemImplKind::Inherent { .. },
94-
..
95-
}) => hir::Defaultness::Final,
9692
node => {
9793
bug!("`defaultness` called on {:?}", node);
9894
}

src/librustdoc/clean/mod.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1258,7 +1258,10 @@ pub(crate) fn clean_impl_item<'tcx>(
12581258
})),
12591259
hir::ImplItemKind::Fn(ref sig, body) => {
12601260
let m = clean_function(cx, sig, impl_.generics, ParamsSrc::Body(body));
1261-
let defaultness = cx.tcx.defaultness(impl_.owner_id);
1261+
let defaultness = match impl_.impl_kind {
1262+
hir::ImplItemImplKind::Inherent { .. } => hir::Defaultness::Final,
1263+
hir::ImplItemImplKind::Trait { defaultness, .. } => defaultness,
1264+
};
12621265
MethodItem(m, Some(defaultness))
12631266
}
12641267
hir::ImplItemKind::Type(hir_ty) => {

src/librustdoc/passes/collect_intra_doc_links.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ impl UrlFragment {
209209
&UrlFragment::Item(def_id) => {
210210
let kind = match tcx.def_kind(def_id) {
211211
DefKind::AssocFn => {
212-
if tcx.defaultness(def_id).has_value() {
212+
if tcx.associated_item(def_id).defaultness(tcx).has_value() {
213213
"method."
214214
} else {
215215
"tymethod."

0 commit comments

Comments
 (0)