@@ -16,11 +16,10 @@ use rustc_middle::hir::nested_filter;
16
16
use rustc_middle:: infer:: unify_key:: { ConstVariableOrigin , ConstVariableValue } ;
17
17
use rustc_middle:: ty:: adjustment:: { Adjust , Adjustment , AutoBorrow } ;
18
18
use 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 } ;
24
23
use rustc_span:: { BytePos , Span , DUMMY_SP } ;
25
24
use std:: borrow:: Cow ;
26
25
use std:: iter;
@@ -187,8 +186,10 @@ fn fmt_printer<'a, 'tcx>(infcx: &'a InferCtxt<'tcx>, ns: Namespace) -> FmtPrinte
187
186
let ty_vars = infcx_inner. type_variables ( ) ;
188
187
let var_origin = ty_vars. var_origin ( ty_vid) ;
189
188
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
190
192
&& let name = infcx. tcx . item_name ( def_id)
191
- && name != kw:: SelfUpper
192
193
&& !var_origin. span . from_expansion ( )
193
194
{
194
195
let generics = infcx. tcx . generics_of ( infcx. tcx . parent ( def_id) ) ;
@@ -301,20 +302,18 @@ impl<'tcx> InferCtxt<'tcx> {
301
302
let mut inner = self . inner . borrow_mut ( ) ;
302
303
let ty_vars = & inner. type_variables ( ) ;
303
304
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
+ } ;
318
317
}
319
318
}
320
319
0 commit comments