| fn main() { |
| #[derive(Copy, Clone)] |
| union U8AsBool { |
| n: u8, |
| b: bool, |
| } |
| |
| let x = U8AsBool { n: 1 }; |
| unsafe { |
| match x { |
| // exhaustive |
| U8AsBool { n: 2 } => {} |
| U8AsBool { b: true } => {} |
| U8AsBool { b: false } => {} |
| } |
| match x { |
| // exhaustive |
| U8AsBool { b: true } => {} |
| U8AsBool { n: 0 } => {} |
| U8AsBool { n: 1.. } => {} |
| } |
| match x { |
| //~^ ERROR non-exhaustive patterns: `U8AsBool { n: 0_u8 }` and `U8AsBool { b: false }` not covered |
| U8AsBool { b: true } => {} |
| U8AsBool { n: 1.. } => {} |
| } |
| // Our approach can report duplicate witnesses sometimes. |
| match (x, true) { |
| //~^ ERROR non-exhaustive patterns: `(U8AsBool { n: 0_u8 }, false)`, `(U8AsBool { b: false }, false)`, `(U8AsBool { n: 0_u8 }, false)` and 1 more not covered |
| (U8AsBool { b: true }, true) => {} |
| (U8AsBool { b: false }, true) => {} |
| (U8AsBool { n: 1.. }, true) => {} |
| } |
| } |
| } |