check_is_object_safe -> is_object_safe
This commit is contained in:
parent
de6b219803
commit
511f1cf7c8
@ -881,7 +881,7 @@ fn check_object_unsafe_self_trait_by_name(tcx: TyCtxt<'_>, item: &hir::TraitItem
|
|||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
if !trait_should_be_self.is_empty() {
|
if !trait_should_be_self.is_empty() {
|
||||||
if tcx.check_is_object_safe(trait_def_id) {
|
if tcx.is_object_safe(trait_def_id) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let sugg = trait_should_be_self.iter().map(|span| (*span, "Self".to_string())).collect();
|
let sugg = trait_should_be_self.iter().map(|span| (*span, "Self".to_string())).collect();
|
||||||
|
@ -191,7 +191,7 @@ fn check_object_overlap<'tcx>(
|
|||||||
});
|
});
|
||||||
|
|
||||||
for component_def_id in component_def_ids {
|
for component_def_id in component_def_ids {
|
||||||
if !tcx.check_is_object_safe(component_def_id) {
|
if !tcx.is_object_safe(component_def_id) {
|
||||||
// Without the 'object_safe_for_dispatch' feature this is an error
|
// Without the 'object_safe_for_dispatch' feature this is an error
|
||||||
// which will be reported by wfcheck. Ignore it here.
|
// which will be reported by wfcheck. Ignore it here.
|
||||||
// This is tested by `coherence-impl-trait-for-trait-object-safe.rs`.
|
// This is tested by `coherence-impl-trait-for-trait-object-safe.rs`.
|
||||||
|
@ -182,7 +182,7 @@ fn maybe_suggest_impl_trait(&self, self_ty: &hir::Ty<'_>, diag: &mut Diag<'_>) -
|
|||||||
// For recursive traits, don't downgrade the error. (#119652)
|
// For recursive traits, don't downgrade the error. (#119652)
|
||||||
is_downgradable = false;
|
is_downgradable = false;
|
||||||
}
|
}
|
||||||
tcx.check_is_object_safe(id)
|
tcx.is_object_safe(id)
|
||||||
}
|
}
|
||||||
_ => false,
|
_ => false,
|
||||||
})
|
})
|
||||||
|
@ -832,7 +832,7 @@ fn analysis(tcx: TyCtxt<'_>, (): ()) -> Result<()> {
|
|||||||
let traits = tcx.traits(LOCAL_CRATE);
|
let traits = tcx.traits(LOCAL_CRATE);
|
||||||
|
|
||||||
for &tr in traits {
|
for &tr in traits {
|
||||||
if !tcx.check_is_object_safe(tr) {
|
if !tcx.is_object_safe(tr) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,10 +38,10 @@
|
|||||||
impl<'tcx> LateLintPass<'tcx> for MultipleSupertraitUpcastable {
|
impl<'tcx> LateLintPass<'tcx> for MultipleSupertraitUpcastable {
|
||||||
fn check_item(&mut self, cx: &LateContext<'tcx>, item: &'tcx hir::Item<'tcx>) {
|
fn check_item(&mut self, cx: &LateContext<'tcx>, item: &'tcx hir::Item<'tcx>) {
|
||||||
let def_id = item.owner_id.to_def_id();
|
let def_id = item.owner_id.to_def_id();
|
||||||
// NOTE(nbdd0121): use `object_safety_violations` instead of `check_is_object_safe` because
|
// NOTE(nbdd0121): use `object_safety_violations` instead of `is_object_safe` because
|
||||||
// the latter will report `where_clause_object_safety` lint.
|
// the latter will report `where_clause_object_safety` lint.
|
||||||
if let hir::ItemKind::Trait(_, _, _, _, _) = item.kind
|
if let hir::ItemKind::Trait(_, _, _, _, _) = item.kind
|
||||||
&& cx.tcx.object_safety_violations(def_id).is_empty()
|
&& cx.tcx.is_object_safe(def_id)
|
||||||
{
|
{
|
||||||
let direct_super_traits_iter = cx
|
let direct_super_traits_iter = cx
|
||||||
.tcx
|
.tcx
|
||||||
|
@ -1309,7 +1309,7 @@
|
|||||||
query object_safety_violations(trait_id: DefId) -> &'tcx [ObjectSafetyViolation] {
|
query object_safety_violations(trait_id: DefId) -> &'tcx [ObjectSafetyViolation] {
|
||||||
desc { |tcx| "determining object safety of trait `{}`", tcx.def_path_str(trait_id) }
|
desc { |tcx| "determining object safety of trait `{}`", tcx.def_path_str(trait_id) }
|
||||||
}
|
}
|
||||||
query check_is_object_safe(trait_id: DefId) -> bool {
|
query is_object_safe(trait_id: DefId) -> bool {
|
||||||
desc { |tcx| "checking if trait `{}` is object safe", tcx.def_path_str(trait_id) }
|
desc { |tcx| "checking if trait `{}` is object safe", tcx.def_path_str(trait_id) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -367,7 +367,7 @@ pub fn transform_instance<'tcx>(
|
|||||||
let trait_method = tcx.associated_item(method_id);
|
let trait_method = tcx.associated_item(method_id);
|
||||||
let trait_id = trait_ref.skip_binder().def_id;
|
let trait_id = trait_ref.skip_binder().def_id;
|
||||||
if traits::is_vtable_safe_method(tcx, trait_id, trait_method)
|
if traits::is_vtable_safe_method(tcx, trait_id, trait_method)
|
||||||
&& tcx.object_safety_violations(trait_id).is_empty()
|
&& tcx.is_object_safe(trait_id)
|
||||||
{
|
{
|
||||||
// Trait methods will have a Self polymorphic parameter, where the concreteized
|
// Trait methods will have a Self polymorphic parameter, where the concreteized
|
||||||
// implementatation will not. We need to walk back to the more general trait method
|
// implementatation will not. We need to walk back to the more general trait method
|
||||||
|
@ -714,7 +714,7 @@ fn assemble_object_bound_candidates<G: GoalKind<'tcx>>(
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Do not consider built-in object impls for non-object-safe types.
|
// Do not consider built-in object impls for non-object-safe types.
|
||||||
if bounds.principal_def_id().is_some_and(|def_id| !tcx.check_is_object_safe(def_id)) {
|
if bounds.principal_def_id().is_some_and(|def_id| !tcx.is_object_safe(def_id)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ fn compute_subtype_goal(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn compute_object_safe_goal(&mut self, trait_def_id: DefId) -> QueryResult<'tcx> {
|
fn compute_object_safe_goal(&mut self, trait_def_id: DefId) -> QueryResult<'tcx> {
|
||||||
if self.interner().check_is_object_safe(trait_def_id) {
|
if self.interner().is_object_safe(trait_def_id) {
|
||||||
self.evaluate_added_goals_and_make_canonical_response(Certainty::Yes)
|
self.evaluate_added_goals_and_make_canonical_response(Certainty::Yes)
|
||||||
} else {
|
} else {
|
||||||
Err(NoSolution)
|
Err(NoSolution)
|
||||||
|
@ -789,7 +789,7 @@ fn consider_builtin_unsize_to_dyn_candidate(
|
|||||||
let Goal { predicate: (a_ty, _), .. } = goal;
|
let Goal { predicate: (a_ty, _), .. } = goal;
|
||||||
|
|
||||||
// Can only unsize to an object-safe trait.
|
// Can only unsize to an object-safe trait.
|
||||||
if b_data.principal_def_id().is_some_and(|def_id| !tcx.check_is_object_safe(def_id)) {
|
if b_data.principal_def_id().is_some_and(|def_id| !tcx.is_object_safe(def_id)) {
|
||||||
return Err(NoSolution);
|
return Err(NoSolution);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -411,7 +411,7 @@ fn process_obligation(
|
|||||||
}
|
}
|
||||||
|
|
||||||
ty::PredicateKind::ObjectSafe(trait_def_id) => {
|
ty::PredicateKind::ObjectSafe(trait_def_id) => {
|
||||||
if !self.selcx.tcx().check_is_object_safe(trait_def_id) {
|
if !self.selcx.tcx().is_object_safe(trait_def_id) {
|
||||||
ProcessResult::Error(FulfillmentErrorCode::Select(Unimplemented))
|
ProcessResult::Error(FulfillmentErrorCode::Select(Unimplemented))
|
||||||
} else {
|
} else {
|
||||||
ProcessResult::Changed(vec![])
|
ProcessResult::Changed(vec![])
|
||||||
|
@ -64,7 +64,7 @@ fn object_safety_violations(tcx: TyCtxt<'_>, trait_def_id: DefId) -> &'_ [Object
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_is_object_safe(tcx: TyCtxt<'_>, trait_def_id: DefId) -> bool {
|
fn is_object_safe(tcx: TyCtxt<'_>, trait_def_id: DefId) -> bool {
|
||||||
tcx.object_safety_violations(trait_def_id).is_empty()
|
tcx.object_safety_violations(trait_def_id).is_empty()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -854,7 +854,7 @@ pub fn contains_illegal_impl_trait_in_trait<'tcx>(
|
|||||||
pub fn provide(providers: &mut Providers) {
|
pub fn provide(providers: &mut Providers) {
|
||||||
*providers = Providers {
|
*providers = Providers {
|
||||||
object_safety_violations,
|
object_safety_violations,
|
||||||
check_is_object_safe,
|
is_object_safe,
|
||||||
generics_require_sized_self,
|
generics_require_sized_self,
|
||||||
..*providers
|
..*providers
|
||||||
};
|
};
|
||||||
|
@ -870,7 +870,7 @@ fn assemble_candidates_from_object_ty(
|
|||||||
if let Some(principal) = data.principal() {
|
if let Some(principal) = data.principal() {
|
||||||
if !self.infcx.tcx.features().object_safe_for_dispatch {
|
if !self.infcx.tcx.features().object_safe_for_dispatch {
|
||||||
principal.with_self_ty(self.tcx(), self_ty)
|
principal.with_self_ty(self.tcx(), self_ty)
|
||||||
} else if self.tcx().check_is_object_safe(principal.def_id()) {
|
} else if self.tcx().is_object_safe(principal.def_id()) {
|
||||||
principal.with_self_ty(self.tcx(), self_ty)
|
principal.with_self_ty(self.tcx(), self_ty)
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
|
@ -1222,7 +1222,7 @@ fn confirm_builtin_unsize_candidate(
|
|||||||
// `T` -> `Trait`
|
// `T` -> `Trait`
|
||||||
(_, &ty::Dynamic(data, r, ty::Dyn)) => {
|
(_, &ty::Dynamic(data, r, ty::Dyn)) => {
|
||||||
let mut object_dids = data.auto_traits().chain(data.principal_def_id());
|
let mut object_dids = data.auto_traits().chain(data.principal_def_id());
|
||||||
if let Some(did) = object_dids.find(|did| !tcx.check_is_object_safe(*did)) {
|
if let Some(did) = object_dids.find(|did| !tcx.is_object_safe(*did)) {
|
||||||
return Err(TraitNotObjectSafe(did));
|
return Err(TraitNotObjectSafe(did));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -798,7 +798,7 @@ fn evaluate_predicate_recursively<'o>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
ty::PredicateKind::ObjectSafe(trait_def_id) => {
|
ty::PredicateKind::ObjectSafe(trait_def_id) => {
|
||||||
if self.tcx().check_is_object_safe(trait_def_id) {
|
if self.tcx().is_object_safe(trait_def_id) {
|
||||||
Ok(EvaluatedToOk)
|
Ok(EvaluatedToOk)
|
||||||
} else {
|
} else {
|
||||||
Ok(EvaluatedToErr)
|
Ok(EvaluatedToErr)
|
||||||
|
@ -1451,7 +1451,7 @@ pub(crate) fn safety(&self, tcx: TyCtxt<'_>) -> hir::Safety {
|
|||||||
tcx.trait_def(self.def_id).safety
|
tcx.trait_def(self.def_id).safety
|
||||||
}
|
}
|
||||||
pub(crate) fn is_object_safe(&self, tcx: TyCtxt<'_>) -> bool {
|
pub(crate) fn is_object_safe(&self, tcx: TyCtxt<'_>) -> bool {
|
||||||
tcx.check_is_object_safe(self.def_id)
|
tcx.is_object_safe(self.def_id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user