Skip to content

Commit ba6c166

Browse files
Account for Self params properly
1 parent eb6f856 commit ba6c166

File tree

1 file changed

+19
-20
lines changed

1 file changed

+19
-20
lines changed

compiler/rustc_infer/src/infer/error_reporting/need_type_info.rs

+19-20
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,10 @@ use rustc_middle::hir::nested_filter;
1616
use rustc_middle::infer::unify_key::{ConstVariableOrigin, ConstVariableValue};
1717
use rustc_middle::ty::adjustment::{Adjust, Adjustment, AutoBorrow};
1818
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};
2423
use rustc_span::{BytePos, Span, DUMMY_SP};
2524
use std::borrow::Cow;
2625
use 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

Comments
 (0)