Skip to content

deref patterns: implement implicit deref patterns #138528

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
Apr 18, 2025
Merged
Prev Previous commit
Next Next commit
add a feature gate test
Implicit deref patterns allow previously ill-typed programs. Make sure
they're still ill-typed without the feature gate. I've thrown in a test
for `deref!(_)` too, though it seems it refers to `deref_patterns` as a
library feature.
  • Loading branch information
dianne committed Apr 16, 2025
commit 4c4b61b730ee7b53918043ff403bbc8e2d6d0eb0
15 changes: 15 additions & 0 deletions tests/ui/pattern/deref-patterns/needs-gate.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// gate-test-deref_patterns

fn main() {
match Box::new(0) {
deref!(0) => {}
//~^ ERROR: use of unstable library feature `deref_patterns`: placeholder syntax for deref patterns
_ => {}
}

match Box::new(0) {
0 => {}
//~^ ERROR: mismatched types
_ => {}
}
}
29 changes: 29 additions & 0 deletions tests/ui/pattern/deref-patterns/needs-gate.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
error[E0658]: use of unstable library feature `deref_patterns`: placeholder syntax for deref patterns
--> $DIR/needs-gate.rs:5:9
|
LL | deref!(0) => {}
| ^^^^^
|
= note: see issue #87121 <https://github.com/rust-lang/rust/issues/87121> for more information
= help: add `#![feature(deref_patterns)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date

error[E0308]: mismatched types
--> $DIR/needs-gate.rs:11:9
|
LL | match Box::new(0) {
| ----------- this expression has type `Box<{integer}>`
LL | 0 => {}
| ^ expected `Box<{integer}>`, found integer
|
= note: expected struct `Box<{integer}>`
found type `{integer}`
help: consider dereferencing to access the inner value using the Deref trait
|
LL | match *Box::new(0) {
| +

error: aborting due to 2 previous errors

Some errors have detailed explanations: E0308, E0658.
For more information about an error, try `rustc --explain E0308`.