@@ -8,8 +8,10 @@ use std::fmt::Debug;
88
99use rustc_data_structures:: fx:: { FxHashSet , FxIndexSet } ;
1010use rustc_errors:: { Diag , EmissionGuarantee } ;
11+ use rustc_hir:: attrs:: AttributeKind ;
1112use rustc_hir:: def:: DefKind ;
1213use rustc_hir:: def_id:: { CRATE_DEF_ID , DefId } ;
14+ use rustc_hir:: find_attr;
1315use rustc_infer:: infer:: { DefineOpaqueTypes , InferCtxt , TyCtxtInferExt } ;
1416use rustc_infer:: traits:: PredicateObligations ;
1517use rustc_macros:: { TypeFoldable , TypeVisitable } ;
@@ -23,7 +25,7 @@ use rustc_middle::ty::{
2325} ;
2426pub use rustc_next_trait_solver:: coherence:: * ;
2527use rustc_next_trait_solver:: solve:: SolverDelegateEvalExt ;
26- use rustc_span:: { DUMMY_SP , Span , sym } ;
28+ use rustc_span:: { DUMMY_SP , Span } ;
2729use tracing:: { debug, instrument, warn} ;
2830
2931use super :: ObligationCtxt ;
@@ -758,10 +760,7 @@ impl<'a, 'tcx> ProofTreeVisitor<'tcx> for AmbiguityCausesVisitor<'a, 'tcx> {
758760 } = cand. kind ( )
759761 && let ty:: ImplPolarity :: Reservation = infcx. tcx . impl_polarity ( def_id)
760762 {
761- let message = infcx
762- . tcx
763- . get_attr ( def_id, sym:: rustc_reservation_impl)
764- . and_then ( |a| a. value_str ( ) ) ;
763+ let message = find_attr ! ( infcx. tcx. get_all_attrs( def_id) , AttributeKind :: RustcReservationImpl ( _, message) => * message) ;
765764 if let Some ( message) = message {
766765 self . causes . insert ( IntercrateAmbiguityCause :: ReservationImpl { message } ) ;
767766 }
0 commit comments