| //@ run-pass |
| #![allow(unreachable_patterns)] |
| |
| #[derive(Copy, Clone)] |
| #[allow(dead_code)] |
| struct Pie { |
| slices: u8, |
| size: u8, |
| } |
| |
| union Foo { |
| #[allow(dead_code)] |
| bar: i8, |
| baz: Pie, |
| } |
| |
| fn main() { |
| let u = Foo { bar: 5 }; |
| let (Some(Foo { bar: _ }) | None) = Some(u); |
| let u = Foo { bar: 6 }; |
| let (Some(Foo { bar: _ }) | Some(Foo { bar: _ }) | None) = Some(u); |
| unsafe { |
| let u = Foo { bar: 7 }; |
| let (Foo { bar } | Foo { bar }) = u; |
| assert_eq!(bar, 7) |
| } |
| let u = Foo { bar: 8 }; |
| match Some(u) { |
| Some(Foo { bar: _ }) => 3, |
| None => 4, |
| }; |
| |
| let u = Foo { bar: 9 }; |
| unsafe { |
| match u { |
| Foo { baz: Pie { .. } } => {} |
| }; |
| } |
| let u = Foo { bar: 10 }; |
| unsafe { |
| match u { |
| Foo { baz: Pie { slices: _, size: _ } } => {} |
| }; |
| } |
| |
| let u = Foo { bar: 11 }; |
| match u { |
| Foo { baz: _ } => {} |
| }; |
| } |