| // run-pass |
| // revisions: mir thir |
| // [thir]compile-flags: -Z thir-unsafeck |
| |
| #[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 { //[mir]~ WARNING unnecessary `unsafe` block |
| match u { |
| Foo { baz: Pie { .. } } => {}, |
| }; |
| } |
| let u = Foo { bar: 10 }; |
| unsafe { //[mir]~ WARNING unnecessary `unsafe` block |
| match u { |
| Foo { baz: Pie { slices: _, size: _ } } => {}, |
| }; |
| } |
| |
| let u = Foo { bar: 11 }; |
| match u { |
| Foo { baz: _ } => {}, |
| }; |
| } |