2 // revisions: normal exhaustive_patterns
4 // This tests a match with no arms on various types.
5 #![feature(never_type)]
6 #![feature(never_type_fallback)]
7 #![cfg_attr(exhaustive_patterns, feature(exhaustive_patterns))]
8 #![deny(unreachable_patterns)]
14 struct NonEmptyStruct1;
15 struct NonEmptyStruct2(bool);
16 union NonEmptyUnion1 {
19 union NonEmptyUnion2 {
34 fn empty_enum(x: EmptyEnum) {
37 _ => {}, //~ ERROR unreachable pattern
40 _ if false => {}, //~ ERROR unreachable pattern
44 fn empty_foreign_enum(x: empty::EmptyForeignEnum) {
47 _ => {}, //~ ERROR unreachable pattern
50 _ if false => {}, //~ ERROR unreachable pattern
57 _ => {}, //~ ERROR unreachable pattern
60 _ if false => {}, //~ ERROR unreachable pattern
64 macro_rules! match_no_arms {
69 macro_rules! match_guarded_arm {
78 match_no_arms!(0u8); //~ ERROR type `u8` is non-empty
79 match_no_arms!(NonEmptyStruct1); //~ ERROR type `NonEmptyStruct1` is non-empty
80 match_no_arms!(NonEmptyStruct2(true)); //~ ERROR type `NonEmptyStruct2` is non-empty
81 match_no_arms!((NonEmptyUnion1 { foo: () })); //~ ERROR type `NonEmptyUnion1` is non-empty
82 match_no_arms!((NonEmptyUnion2 { foo: () })); //~ ERROR type `NonEmptyUnion2` is non-empty
83 match_no_arms!(NonEmptyEnum1::Foo(true)); //~ ERROR `Foo(_)` not covered
84 match_no_arms!(NonEmptyEnum2::Foo(true)); //~ ERROR `Foo(_)` and `Bar` not covered
85 match_no_arms!(NonEmptyEnum5::V1); //~ ERROR `V1`, `V2`, `V3` and 2 more not covered
87 match_guarded_arm!(0u8); //~ ERROR `_` not covered
88 match_guarded_arm!(NonEmptyStruct1); //~ ERROR `NonEmptyStruct1` not covered
89 match_guarded_arm!(NonEmptyStruct2(true)); //~ ERROR `NonEmptyStruct2(_)` not covered
90 match_guarded_arm!((NonEmptyUnion1 { foo: () })); //~ ERROR `NonEmptyUnion1 { .. }` not covered
91 match_guarded_arm!((NonEmptyUnion2 { foo: () })); //~ ERROR `NonEmptyUnion2 { .. }` not covered
92 match_guarded_arm!(NonEmptyEnum1::Foo(true)); //~ ERROR `Foo(_)` not covered
93 match_guarded_arm!(NonEmptyEnum2::Foo(true)); //~ ERROR `Foo(_)` and `Bar` not covered
94 match_guarded_arm!(NonEmptyEnum5::V1); //~ ERROR `V1`, `V2`, `V3` and 2 more not covered