Add a regression test for #123630
compiler should not suggest nonsensical signatures, original suggestion was error[E0308]: mismatched types --> src/lib.rs:3:31 | 3 | fn select<F, I>(filter: F) -> Select<F, I> { | ------ ^^^^^^^^^^^^ expected `Select<F, I>`, found `()` | | | implicitly returns `()` as its body has no tail or `return` expression | = note: expected struct `Select<F, I>` found unit type `()` error[E0282]: type annotations needed for `Select<{closure@src/lib.rs:8:22: 8:25}, I>` --> src/lib.rs:8:9 | 8 | let lit = select(|x| match x { | ^^^ | help: consider giving `lit` an explicit type, where the type for type parameter `I` is specified | 8 | let lit: Select<{closure@src/lib.rs:8:22: 8:25}, I> = select(|x| match x { | ++++++++++++++++++++++++++++++++++++++++++++ Some errors have detailed explanations: E0282, E0308. For more information about an error, try `rustc --explain E0282`.
This commit is contained in:
parent
716752ebe6
commit
8a0e1ab565
17
tests/ui/suggestions/types/dont-suggest-path-names.rs
Normal file
17
tests/ui/suggestions/types/dont-suggest-path-names.rs
Normal file
@ -0,0 +1,17 @@
|
||||
// This is a regression test for #123630
|
||||
//
|
||||
// Prior to #123703 this was resulting in compiler suggesting add a type signature
|
||||
// for `lit` containing path to a file containing `Select` - something obviously invalid.
|
||||
|
||||
struct Select<F, I>(F, I);
|
||||
fn select<F, I>(filter: F) -> Select<F, I> {}
|
||||
//~^ 7:31: 7:43: mismatched types [E0308]
|
||||
|
||||
fn parser1() {
|
||||
let lit = select(|x| match x {
|
||||
//~^ 11:23: 11:24: type annotations needed [E0282]
|
||||
_ => (),
|
||||
});
|
||||
}
|
||||
|
||||
fn main() {}
|
26
tests/ui/suggestions/types/dont-suggest-path-names.stderr
Normal file
26
tests/ui/suggestions/types/dont-suggest-path-names.stderr
Normal file
@ -0,0 +1,26 @@
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/dont-suggest-path-names.rs:7:31
|
||||
|
|
||||
LL | fn select<F, I>(filter: F) -> Select<F, I> {}
|
||||
| ------ ^^^^^^^^^^^^ expected `Select<F, I>`, found `()`
|
||||
| |
|
||||
| implicitly returns `()` as its body has no tail or `return` expression
|
||||
|
|
||||
= note: expected struct `Select<F, I>`
|
||||
found unit type `()`
|
||||
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/dont-suggest-path-names.rs:11:23
|
||||
|
|
||||
LL | let lit = select(|x| match x {
|
||||
| ^ - type must be known at this point
|
||||
|
|
||||
help: consider giving this closure parameter an explicit type
|
||||
|
|
||||
LL | let lit = select(|x: /* Type */| match x {
|
||||
| ++++++++++++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0282, E0308.
|
||||
For more information about an error, try `rustc --explain E0282`.
|
Loading…
Reference in New Issue
Block a user