Skip to content

Commit

Permalink
Rollup merge of #113310 - jieyouxu:dont-suggest-impl-trait-in-paths, …
Browse files Browse the repository at this point in the history
…r=lcnr

Don't suggest `impl Trait` in path position

Fixes #113264.
  • Loading branch information
matthiaskrgr committed Jul 11, 2023
2 parents 3f73a7d + b5208b3 commit c6df564
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 2 deletions.
12 changes: 10 additions & 2 deletions compiler/rustc_infer/src/infer/error_reporting/need_type_info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -162,10 +162,18 @@ fn fmt_printer<'a, 'tcx>(infcx: &'a InferCtxt<'tcx>, ns: Namespace) -> FmtPrinte
let mut infcx_inner = infcx.inner.borrow_mut();
let ty_vars = infcx_inner.type_variables();
let var_origin = ty_vars.var_origin(ty_vid);
if let TypeVariableOriginKind::TypeParameterDefinition(name, _) = var_origin.kind
if let TypeVariableOriginKind::TypeParameterDefinition(name, def_id) = var_origin.kind
&& !var_origin.span.from_expansion()
{
Some(name)
let generics = infcx.tcx.generics_of(infcx.tcx.parent(def_id));
let idx = generics.param_def_id_to_index(infcx.tcx, def_id).unwrap();
let generic_param_def = generics.param_at(idx as usize, infcx.tcx);
if let ty::GenericParamDefKind::Type { synthetic: true, .. } = generic_param_def.kind
{
None
} else {
Some(name)
}
} else {
None
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
trait T {}

struct S {}

impl S {
fn owo(&self, _: Option<&impl T>) {}
}

fn main() {
(S {}).owo(None)
//~^ ERROR type annotations needed
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
error[E0282]: type annotations needed
--> $DIR/issue-113264-incorrect-impl-trait-in-path-suggestion.rs:10:16
|
LL | (S {}).owo(None)
| ^^^^ cannot infer type of the type parameter `T` declared on the enum `Option`
|
help: consider specifying the generic argument
|
LL | (S {}).owo(None::<&_>)
| ++++++

error: aborting due to previous error

For more information about this error, try `rustc --explain E0282`.

0 comments on commit c6df564

Please sign in to comment.