Skip to content

Commit

Permalink
Rollup merge of #111872 - bvanjoi:fix-103646, r=cjgillot
Browse files Browse the repository at this point in the history
fix: dedup `static_candidates` before report

Fixes #103646

`record_static_candidate` had been executed twice, resulting in the presence of two identical `CandidateSource::Trait(Cat)`  in static_candidates. This PR aims to deduplication the `static_candidates` list, allowing it to execute `suggest_associated_call_syntax` properly.
  • Loading branch information
Noratrieb authored May 30, 2023
2 parents 7a4006c + f78369b commit 0c9f87c
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 0 deletions.
6 changes: 6 additions & 0 deletions compiler/rustc_hir_typeck/src/method/suggest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,12 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
let mut custom_span_label = false;

let static_candidates = &mut no_match_data.static_candidates;

// `static_candidates` may have same candidates appended by
// inherent and extension, which may result in incorrect
// diagnostic.
static_candidates.dedup();

if !static_candidates.is_empty() {
err.note(
"found the following associated functions; to be used as methods, \
Expand Down
11 changes: 11 additions & 0 deletions tests/ui/suggestions/issue-103646.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
trait Cat {
fn nya() {}
}

fn uwu<T: Cat>(c: T) {
c.nya();
//~^ ERROR no method named `nya` found for type parameter `T` in the current scope
//~| Suggestion T::nya()
}

fn main() {}
21 changes: 21 additions & 0 deletions tests/ui/suggestions/issue-103646.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
error[E0599]: no method named `nya` found for type parameter `T` in the current scope
--> $DIR/issue-103646.rs:6:7
|
LL | fn uwu<T: Cat>(c: T) {
| - method `nya` not found for this type parameter
LL | c.nya();
| --^^^--
| | |
| | this is an associated function, not a method
| help: use associated function syntax instead: `T::nya()`
|
= note: found the following associated functions; to be used as methods, functions must have a `self` parameter
note: the candidate is defined in the trait `Cat`
--> $DIR/issue-103646.rs:2:5
|
LL | fn nya() {}
| ^^^^^^^^

error: aborting due to previous error

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

0 comments on commit 0c9f87c

Please sign in to comment.