Wrongly suggests error E0029 in match range
Open
@chenyukang is already working on this.
Since Sep 15, 2026.
A-diagnostics
T-compiler
- Dominant language
- Rust
- Stars
- 119k
- Forks
- 16.1k
- PR merge metrics
- PR metrics pending
Description
Code
fn cmp<T: PartialOrd, R>(x: T, y: T, smaller: R, equal: R, greater: R) -> R {
match x {
..y => smaller,
y => equal,
_ => greater
}
}
Current output
error[E0029]: only `char` and numeric types are allowed in range patterns
--> src/main.rs:3:11
|
3 | ..y => smaller,
| ^ this is of type `T` but it should be `char` or numeric
Desired output
error[E0080]: runtime values cannot be referenced in patterns
--> src/main.rs:3:11
|
3 | ..y => smaller,
| ^
Rationale and extra context
The second output comes when following that wrong suggestion and changing to
fn cmp<R>(x: char, y: char, smaller: R, equal: R, greater: R) -> R {
match x {
..y => smaller,
y => equal,
_ => greater
}
}
cf. forum
Other cases
No response
Rust Version
rustc 1.81.0 (eeb90cda1 2024-09-04)
binary: rustc
commit-hash: eeb90cda1969383f56a2637cbd3037bdf598841c
commit-date: 2024-09-04
host: x86_64-unknown-linux-gnu
release: 1.81.0
LLVM version: 18.1.7
Anything else?
No response
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.