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…
x
Reference in New Issue
Block a user