Store do_not_recommend-ness in impl header
This commit is contained in:
parent
68d2e8a66e
commit
ed7bdbb17b
5 changed files with 13 additions and 20 deletions
|
@ -687,10 +687,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
|||
let mut applied_do_not_recommend = false;
|
||||
loop {
|
||||
if let ObligationCauseCode::ImplDerived(ref c) = base_cause {
|
||||
if self.tcx.has_attrs_with_path(
|
||||
c.impl_or_alias_def_id,
|
||||
&[sym::diagnostic, sym::do_not_recommend],
|
||||
) {
|
||||
if self.tcx.do_not_recommend_impl(c.impl_or_alias_def_id) {
|
||||
let code = (*c.derived.parent_code).clone();
|
||||
obligation.cause.map_code(|_| code);
|
||||
obligation.predicate = c.derived.parent_trait_pred.upcast(self.tcx);
|
||||
|
@ -1630,11 +1627,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
|||
.tcx
|
||||
.all_impls(def_id)
|
||||
// ignore `do_not_recommend` items
|
||||
.filter(|def_id| {
|
||||
!self
|
||||
.tcx
|
||||
.has_attrs_with_path(*def_id, &[sym::diagnostic, sym::do_not_recommend])
|
||||
})
|
||||
.filter(|def_id| !self.tcx.do_not_recommend_impl(*def_id))
|
||||
// Ignore automatically derived impls and `!Trait` impls.
|
||||
.filter_map(|def_id| self.tcx.impl_trait_header(def_id))
|
||||
.filter_map(|header| {
|
||||
|
@ -1904,12 +1897,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
|||
let impl_candidates = impl_candidates
|
||||
.into_iter()
|
||||
.cloned()
|
||||
.filter(|cand| {
|
||||
!self.tcx.has_attrs_with_path(
|
||||
cand.impl_def_id,
|
||||
&[sym::diagnostic, sym::do_not_recommend],
|
||||
)
|
||||
})
|
||||
.filter(|cand| !self.tcx.do_not_recommend_impl(cand.impl_def_id))
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
let def_id = trait_ref.def_id();
|
||||
|
|
|
@ -13,7 +13,6 @@ use rustc_middle::bug;
|
|||
use rustc_middle::ty::error::{ExpectedFound, TypeError};
|
||||
use rustc_middle::ty::{self, TyCtxt};
|
||||
use rustc_next_trait_solver::solve::{GenerateProofTree, SolverDelegateEvalExt as _};
|
||||
use rustc_span::symbol::sym;
|
||||
|
||||
use super::delegate::SolverDelegate;
|
||||
use super::inspect::{self, ProofTreeInferCtxtExt, ProofTreeVisitor};
|
||||
|
@ -440,10 +439,7 @@ impl<'tcx> ProofTreeVisitor<'tcx> for BestObligation<'tcx> {
|
|||
source: CandidateSource::Impl(impl_def_id),
|
||||
result: _,
|
||||
} = candidate.kind()
|
||||
&& goal
|
||||
.infcx()
|
||||
.tcx
|
||||
.has_attrs_with_path(impl_def_id, &[sym::diagnostic, sym::do_not_recommend])
|
||||
&& goal.infcx().tcx.do_not_recommend_impl(impl_def_id)
|
||||
{
|
||||
return ControlFlow::Break(self.obligation.clone());
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue