Skip to content

Commit

Permalink
Rollup merge of rust-lang#116995 - estebank:issue-69944, r=compiler-e…
Browse files Browse the repository at this point in the history
…rrors

Point at assoc fn definition on type param divergence

When the number of type parameters in the associated function of an impl and its trait differ, we now *always* point at the trait one, even if it comes from a foreign crate. When it is local, we point at the specific params, when it is foreign, we point at the whole associated item.

Fix rust-lang#69944.
  • Loading branch information
matthiaskrgr authored Oct 20, 2023
2 parents 9f0f4b7 + 939a224 commit 6d69a20
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 20 deletions.
24 changes: 5 additions & 19 deletions compiler/rustc_hir_analysis/src/check/compare_impl_item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1557,38 +1557,24 @@ fn compare_number_of_generics<'tcx>(
DiagnosticId::Error("E0049".into()),
);

let mut suffix = None;

let msg =
format!("expected {trait_count} {kind} parameter{}", pluralize!(trait_count),);
if let Some(spans) = trait_spans {
let mut spans = spans.iter();
if let Some(span) = spans.next() {
err.span_label(
*span,
format!(
"expected {} {} parameter{}",
trait_count,
kind,
pluralize!(trait_count),
),
);
err.span_label(*span, msg);
}
for span in spans {
err.span_label(*span, "");
}
} else {
suffix = Some(format!(", expected {trait_count}"));
err.span_label(tcx.def_span(trait_.def_id), msg);
}

if let Some(span) = span {
err.span_label(
span,
format!(
"found {} {} parameter{}{}",
impl_count,
kind,
pluralize!(impl_count),
suffix.unwrap_or_default(),
),
format!("found {} {} parameter{}", impl_count, kind, pluralize!(impl_count),),
);
}

Expand Down
7 changes: 6 additions & 1 deletion tests/ui/typeck/issue-36708.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@ error[E0049]: method `foo` has 1 type parameter but its trait declaration has 0
--> $DIR/issue-36708.rs:8:12
|
LL | fn foo<T>() {}
| ^ found 1 type parameter, expected 0
| ^ found 1 type parameter
|
::: $DIR/auxiliary/issue-36708.rs:4:5
|
LL | fn foo();
| --------- expected 0 type parameters

error: aborting due to previous error

Expand Down

0 comments on commit 6d69a20

Please sign in to comment.