@@ -813,18 +813,20 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
813
813
error : MethodError < ' tcx >
814
814
) {
815
815
let rcvr = & args[ 0 ] ;
816
- let try_alt_rcvr = |err : & mut DiagnosticBuilder < ' _ > , new_rcvr_t| {
817
- if let Ok ( pick) = self . lookup_probe (
818
- span,
819
- segment. ident ,
820
- new_rcvr_t,
821
- rcvr,
822
- probe:: ProbeScope :: AllTraits ,
823
- ) {
824
- err. span_label (
825
- pick. item . ident . span ,
826
- & format ! ( "the method is available for `{}` here" , new_rcvr_t) ,
827
- ) ;
816
+ let try_alt_rcvr = |err : & mut DiagnosticBuilder < ' _ > , rcvr_t, lang_item| {
817
+ if let Some ( new_rcvr_t) = self . tcx . mk_lang_item ( rcvr_t, lang_item) {
818
+ if let Ok ( pick) = self . lookup_probe (
819
+ span,
820
+ segment. ident ,
821
+ new_rcvr_t,
822
+ rcvr,
823
+ probe:: ProbeScope :: AllTraits ,
824
+ ) {
825
+ err. span_label (
826
+ pick. item . ident . span ,
827
+ & format ! ( "the method is available for `{}` here" , new_rcvr_t) ,
828
+ ) ;
829
+ }
828
830
}
829
831
} ;
830
832
@@ -840,17 +842,10 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
840
842
// Try alternative arbitrary self types that could fulfill this call.
841
843
// FIXME: probe for all types that *could* be arbitrary self-types, not
842
844
// just this whitelist.
843
- let box_rcvr_t = self . tcx . mk_box ( rcvr_t) ;
844
- try_alt_rcvr ( & mut err, box_rcvr_t) ;
845
- let pin_rcvr_t = self . tcx . mk_lang_item (
846
- rcvr_t,
847
- lang_items:: PinTypeLangItem ,
848
- ) ;
849
- try_alt_rcvr ( & mut err, pin_rcvr_t) ;
850
- let arc_rcvr_t = self . tcx . mk_lang_item ( rcvr_t, lang_items:: Arc ) ;
851
- try_alt_rcvr ( & mut err, arc_rcvr_t) ;
852
- let rc_rcvr_t = self . tcx . mk_lang_item ( rcvr_t, lang_items:: Rc ) ;
853
- try_alt_rcvr ( & mut err, rc_rcvr_t) ;
845
+ try_alt_rcvr ( & mut err, rcvr_t, lang_items:: OwnedBoxLangItem ) ;
846
+ try_alt_rcvr ( & mut err, rcvr_t, lang_items:: PinTypeLangItem ) ;
847
+ try_alt_rcvr ( & mut err, rcvr_t, lang_items:: Arc ) ;
848
+ try_alt_rcvr ( & mut err, rcvr_t, lang_items:: Rc ) ;
854
849
}
855
850
err. emit ( ) ;
856
851
}
0 commit comments