2 #![feature(exhaustive_patterns, never_type)]
3 #![allow(dead_code, unreachable_code, unused_variables)]
4 #![allow(clippy::let_and_return)]
6 enum SingleVariantEnum {
10 struct TupleStruct(i32);
14 macro_rules! match_enum {
16 let data = match $param {
17 SingleVariantEnum::Variant(i) => i,
22 fn infallible_destructuring_match_enum() {
23 let wrapper = SingleVariantEnum::Variant(0);
26 let SingleVariantEnum::Variant(data) = wrapper;
28 // This shouldn't (inside macro)
32 let data = match wrapper {
33 SingleVariantEnum::Variant(_) => -1,
36 // Neither should this!
37 let data = match wrapper {
38 SingleVariantEnum::Variant(i) => -1,
41 let SingleVariantEnum::Variant(data) = wrapper;
44 macro_rules! match_struct {
46 let data = match $param {
52 fn infallible_destructuring_match_struct() {
53 let wrapper = TupleStruct(0);
56 let TupleStruct(data) = wrapper;
58 // This shouldn't (inside macro)
59 match_struct!(wrapper);
62 let data = match wrapper {
66 // Neither should this!
67 let data = match wrapper {
71 let TupleStruct(data) = wrapper;
74 macro_rules! match_never_enum {
76 let data = match $param {
83 let wrapper: Result<i32, !> = Ok(23);
86 let Ok(data) = wrapper;
88 // This shouldn't (inside macro)
89 match_never_enum!(wrapper);
92 let data = match wrapper {
96 // Neither should this!
97 let data = match wrapper {
101 let Ok(data) = wrapper;
105 fn match_on(&self) -> ! {
106 // The lint shouldn't pick this up, as `let` won't work here!
107 let data = match *self {};