From fff953f7c35cc156b40efc7fcb01db40003e223b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Sat, 28 Dec 2024 19:28:33 +0000 Subject: [PATCH] Add test ensuring correct suggestion for pattern dereference ``` error[E0308]: mismatched types --> $DIR/suggest-dereferencing-through-Deref.rs:13:16 | LL | if let A::V1(v) = b { | ^^^^^^^^ - this expression has type `&Box` | | | expected `Box`, found `A` | = note: expected struct `Box` found enum `A` help: consider dereferencing to access the inner value using the Deref trait | LL | if let A::V1(v) = &**b { | ~~~~ error[E0308]: mismatched types --> $DIR/suggest-dereferencing-through-Deref.rs:23:16 | LL | if let A::V1(v) = *b { | ^^^^^^^^ -- this expression has type `Box` | | | expected `Box`, found `A` | = note: expected struct `Box` found enum `A` help: consider dereferencing the boxed value | LL | if let A::V1(v) = **b { | ~~~ ``` Fix #68628 --- .../suggest-dereferencing-through-Deref.fixed | 29 ++++++++++++++++ .../suggest-dereferencing-through-Deref.rs | 29 ++++++++++++++++ ...suggest-dereferencing-through-Deref.stderr | 33 +++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 tests/ui/pattern/suggest-dereferencing-through-Deref.fixed create mode 100644 tests/ui/pattern/suggest-dereferencing-through-Deref.rs create mode 100644 tests/ui/pattern/suggest-dereferencing-through-Deref.stderr diff --git a/tests/ui/pattern/suggest-dereferencing-through-Deref.fixed b/tests/ui/pattern/suggest-dereferencing-through-Deref.fixed new file mode 100644 index 0000000000000..a538929609d82 --- /dev/null +++ b/tests/ui/pattern/suggest-dereferencing-through-Deref.fixed @@ -0,0 +1,29 @@ +//@ run-rustfix +#![allow(dead_code)] + +enum A { + V1(u8), + V2(u32), +} + +fn foo() { + let a = Some(Box::new(A::V1(1u8))); + + if let Some(b) = a.as_ref() { + if let A::V1(v) = &**b { //~ ERROR mismatched types + println!("{:?}", v); + } + } +} + +fn bar() { + let a = Some(Box::new(A::V1(1u8))); + + if let Some(b) = a.as_ref() { + if let A::V1(v) = **b { //~ ERROR mismatched types + println!("{:?}", v); + } + } +} + +fn main() {} diff --git a/tests/ui/pattern/suggest-dereferencing-through-Deref.rs b/tests/ui/pattern/suggest-dereferencing-through-Deref.rs new file mode 100644 index 0000000000000..c87fcf89497e3 --- /dev/null +++ b/tests/ui/pattern/suggest-dereferencing-through-Deref.rs @@ -0,0 +1,29 @@ +//@ run-rustfix +#![allow(dead_code)] + +enum A { + V1(u8), + V2(u32), +} + +fn foo() { + let a = Some(Box::new(A::V1(1u8))); + + if let Some(b) = a.as_ref() { + if let A::V1(v) = b { //~ ERROR mismatched types + println!("{:?}", v); + } + } +} + +fn bar() { + let a = Some(Box::new(A::V1(1u8))); + + if let Some(b) = a.as_ref() { + if let A::V1(v) = *b { //~ ERROR mismatched types + println!("{:?}", v); + } + } +} + +fn main() {} diff --git a/tests/ui/pattern/suggest-dereferencing-through-Deref.stderr b/tests/ui/pattern/suggest-dereferencing-through-Deref.stderr new file mode 100644 index 0000000000000..61f79f30137f2 --- /dev/null +++ b/tests/ui/pattern/suggest-dereferencing-through-Deref.stderr @@ -0,0 +1,33 @@ +error[E0308]: mismatched types + --> $DIR/suggest-dereferencing-through-Deref.rs:13:16 + | +LL | if let A::V1(v) = b { + | ^^^^^^^^ - this expression has type `&Box` + | | + | expected `Box`, found `A` + | + = note: expected struct `Box` + found enum `A` +help: consider dereferencing to access the inner value using the Deref trait + | +LL | if let A::V1(v) = &**b { + | ~~~~ + +error[E0308]: mismatched types + --> $DIR/suggest-dereferencing-through-Deref.rs:23:16 + | +LL | if let A::V1(v) = *b { + | ^^^^^^^^ -- this expression has type `Box` + | | + | expected `Box`, found `A` + | + = note: expected struct `Box` + found enum `A` +help: consider dereferencing the boxed value + | +LL | if let A::V1(v) = **b { + | ~~~ + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0308`.