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`.