|  | //@ 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: _ } => {} | 
|  | }; | 
|  | } |