Skip to content

Commit

Permalink
Unrolled build for rust-lang#116995
Browse files Browse the repository at this point in the history
Rollup merge of rust-lang#116995 - estebank:issue-69944, r=compiler-errors

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
rust-timer committed Oct 21, 2023
2 parents 45a45c6 + 939a224 commit 0496cc5
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 0496cc5

Please sign in to comment.