Skip to content

Commit b00ba38

Browse files
Use query instead of impl_is_default fn
1 parent e8910f5 commit b00ba38

File tree

6 files changed

+15
-24
lines changed

6 files changed

+15
-24
lines changed

src/librustc_middle/traits/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ pub mod query;
66
pub mod select;
77
pub mod specialization_graph;
88
mod structural_impls;
9-
pub mod util;
109

1110
use crate::mir::interpret::ErrorHandled;
1211
use crate::ty::subst::SubstsRef;

src/librustc_middle/traits/specialization_graph.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ impl<'tcx> Ancestors<'tcx> {
211211
if let Some(item) = node.item(tcx, trait_item_name, trait_item_kind, trait_def_id) {
212212
if finalizing_node.is_none() {
213213
let is_specializable = item.defaultness.is_default()
214-
|| super::util::impl_is_default(tcx, node.def_id());
214+
|| tcx.impl_defaultness(node.def_id()).is_default();
215215

216216
if !is_specializable {
217217
finalizing_node = Some(node);

src/librustc_middle/traits/util.rs

Lines changed: 0 additions & 17 deletions
This file was deleted.

src/librustc_trait_selection/traits/util.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use rustc_hir::def_id::DefId;
88
use rustc_middle::ty::outlives::Component;
99
use rustc_middle::ty::subst::{GenericArg, Subst, SubstsRef};
1010
use rustc_middle::ty::{self, ToPolyTraitRef, ToPredicate, Ty, TyCtxt, WithConstness};
11-
use rustc_middle::traits::util::impl_is_default;
1211

1312
use super::{Normalized, Obligation, ObligationCause, PredicateObligation, SelectionContext};
1413

@@ -652,7 +651,7 @@ pub fn generator_trait_ref_and_outputs(
652651
}
653652

654653
pub fn impl_item_is_final(tcx: TyCtxt<'_>, assoc_item: &ty::AssocItem) -> bool {
655-
assoc_item.defaultness.is_final() && !impl_is_default(tcx, assoc_item.container.id())
654+
assoc_item.defaultness.is_final() && tcx.impl_defaultness(assoc_item.container.id()).is_final()
656655
}
657656

658657
pub enum TupleArgumentsFlag {

src/librustc_ty/ty.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,16 @@ fn associated_item(tcx: TyCtxt<'_>, def_id: DefId) -> ty::AssocItem {
165165
)
166166
}
167167

168+
fn impl_defaultness(tcx: TyCtxt<'_>, def_id: DefId) -> hir::Defaultness {
169+
let hir_id = tcx.hir().as_local_hir_id(def_id).unwrap();
170+
let item = tcx.hir().expect_item(hir_id);
171+
if let hir::ItemKind::Impl { defaultness, .. } = item.kind {
172+
defaultness
173+
} else {
174+
bug!("`impl_defaultness` called on {:?}", item);
175+
}
176+
}
177+
168178
/// Calculates the `Sized` constraint.
169179
///
170180
/// In fact, there are only a few options for the types in the constraint:
@@ -371,6 +381,7 @@ pub fn provide(providers: &mut ty::query::Providers<'_>) {
371381
crate_hash,
372382
instance_def_size_estimate,
373383
issue33140_self_ty,
384+
impl_defaultness,
374385
..*providers
375386
};
376387
}

src/librustc_typeck/check/mod.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@ use rustc_infer::infer::{self, InferCtxt, InferOk, InferResult, TyCtxtInferExt};
110110
use rustc_middle::hir::map::blocks::FnLikeNode;
111111
use rustc_middle::middle::region;
112112
use rustc_middle::mir::interpret::ConstValue;
113-
use rustc_middle::traits::util::impl_is_default;
114113
use rustc_middle::ty::adjustment::{
115114
Adjust, Adjustment, AllowTwoPhase, AutoBorrow, AutoBorrowMutability, PointerCast,
116115
};
@@ -1943,7 +1942,7 @@ fn check_specialization_validity<'tcx>(
19431942
// grandparent. In that case, if parent is a `default impl`, inherited items use the
19441943
// "defaultness" from the grandparent, else they are final.
19451944
None => {
1946-
if impl_is_default(tcx, parent_impl.def_id()) {
1945+
if tcx.impl_defaultness(parent_impl.def_id()).is_default() {
19471946
None
19481947
} else {
19491948
Some(Err(parent_impl.def_id()))
@@ -2118,7 +2117,7 @@ fn check_impl_items_against_trait<'tcx>(
21182117
.map(|node_item| !node_item.defining_node.is_from_trait())
21192118
.unwrap_or(false);
21202119

2121-
if !is_implemented && !impl_is_default(tcx, impl_id) {
2120+
if !is_implemented && tcx.impl_defaultness(impl_id).is_final() {
21222121
if !trait_item.defaultness.has_value() {
21232122
missing_items.push(*trait_item);
21242123
}

0 commit comments

Comments
 (0)