@@ -16,11 +16,10 @@ use rustc_middle::hir::nested_filter;
1616use rustc_middle:: infer:: unify_key:: { ConstVariableOrigin , ConstVariableValue } ;
1717use rustc_middle:: ty:: adjustment:: { Adjust , Adjustment , AutoBorrow } ;
1818use rustc_middle:: ty:: print:: { FmtPrinter , PrettyPrinter , Print , Printer } ;
19- use rustc_middle:: ty:: {
20- self , GenericArg , GenericArgKind , GenericArgsRef , InferConst , IsSuggestable , Ty , TyCtxt ,
21- TypeFoldable , TypeFolder , TypeSuperFoldable , TypeckResults ,
22- } ;
23- use rustc_span:: symbol:: { kw, sym, Ident } ;
19+ use rustc_middle:: ty:: { self , InferConst } ;
20+ use rustc_middle:: ty:: { GenericArg , GenericArgKind , GenericArgsRef } ;
21+ use rustc_middle:: ty:: { IsSuggestable , Ty , TyCtxt , TypeckResults } ;
22+ use rustc_span:: symbol:: { sym, Ident } ;
2423use rustc_span:: { BytePos , Span , DUMMY_SP } ;
2524use std:: borrow:: Cow ;
2625use std:: iter;
@@ -187,8 +186,10 @@ fn fmt_printer<'a, 'tcx>(infcx: &'a InferCtxt<'tcx>, ns: Namespace) -> FmtPrinte
187186 let ty_vars = infcx_inner. type_variables ( ) ;
188187 let var_origin = ty_vars. var_origin ( ty_vid) ;
189188 if let Some ( def_id) = var_origin. param_def_id
189+ // The `Self` param of a trait has the def-id of the trait,
190+ // since it's a synthetic parameter.
191+ && infcx. tcx . def_kind ( def_id) == DefKind :: TyParam
190192 && let name = infcx. tcx . item_name ( def_id)
191- && name != kw:: SelfUpper
192193 && !var_origin. span . from_expansion ( )
193194 {
194195 let generics = infcx. tcx . generics_of ( infcx. tcx . parent ( def_id) ) ;
@@ -301,20 +302,18 @@ impl<'tcx> InferCtxt<'tcx> {
301302 let mut inner = self . inner . borrow_mut ( ) ;
302303 let ty_vars = & inner. type_variables ( ) ;
303304 let var_origin = ty_vars. var_origin ( ty_vid) ;
304- if let Some ( def_id) = var_origin. param_def_id {
305- let name = self . tcx . item_name ( def_id) ;
306- if name != kw:: SelfUpper && !var_origin. span . from_expansion ( ) {
307- return InferenceDiagnosticsData {
308- name : name. to_string ( ) ,
309- span : Some ( var_origin. span ) ,
310- kind : UnderspecifiedArgKind :: Type {
311- prefix : "type parameter" . into ( ) ,
312- } ,
313- parent : InferenceDiagnosticsParentData :: for_def_id (
314- self . tcx , def_id,
315- ) ,
316- } ;
317- }
305+ if let Some ( def_id) = var_origin. param_def_id
306+ // The `Self` param of a trait has the def-id of the trait,
307+ // since it's a synthetic parameter.
308+ && self . tcx . def_kind ( def_id) == DefKind :: TyParam
309+ && !var_origin. span . from_expansion ( )
310+ {
311+ return InferenceDiagnosticsData {
312+ name : self . tcx . item_name ( def_id) . to_string ( ) ,
313+ span : Some ( var_origin. span ) ,
314+ kind : UnderspecifiedArgKind :: Type { prefix : "type parameter" . into ( ) } ,
315+ parent : InferenceDiagnosticsParentData :: for_def_id ( self . tcx , def_id) ,
316+ } ;
318317 }
319318 }
320319
0 commit comments