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 data = match wrapper {
27 SingleVariantEnum::Variant(i) => i,
30 // This shouldn't (inside macro)
34 let data = match wrapper {
35 SingleVariantEnum::Variant(_) => -1,
38 // Neither should this!
39 let data = match wrapper {
40 SingleVariantEnum::Variant(i) => -1,
43 let SingleVariantEnum::Variant(data) = wrapper;
46 macro_rules! match_struct {
48 let data = match $param {
54 fn infallible_destructuring_match_struct() {
55 let wrapper = TupleStruct(0);
58 let data = match wrapper {
62 // This shouldn't (inside macro)
63 match_struct!(wrapper);
66 let data = match wrapper {
70 // Neither should this!
71 let data = match wrapper {
75 let TupleStruct(data) = wrapper;
78 macro_rules! match_never_enum {
80 let data = match $param {
87 let wrapper: Result<i32, !> = Ok(23);
90 let data = match wrapper {
94 // This shouldn't (inside macro)
95 match_never_enum!(wrapper);
98 let data = match wrapper {
102 // Neither should this!
103 let data = match wrapper {
107 let Ok(data) = wrapper;
111 fn match_on(&self) -> ! {
112 // The lint shouldn't pick this up, as `let` won't work here!
113 let data = match *self {};