| union Foo { | |
| bar: i8, | |
| zst: (), | |
| pizza: Pizza, | |
| } | |
| #[derive(Clone, Copy)] | |
| struct Pizza { | |
| topping: Option<PizzaTopping> | |
| } | |
| #[allow(dead_code)] | |
| #[derive(Clone, Copy)] | |
| enum PizzaTopping { | |
| Cheese, | |
| Pineapple, | |
| } | |
| fn do_nothing(_x: &mut Foo) {} | |
| pub fn main() { | |
| let mut foo = Foo { bar: 5 }; | |
| do_nothing(&mut foo); | |
| // This is UB, so this test isn't run | |
| match foo { | |
| Foo { bar: _a } => {}, //~ ERROR access to union field is unsafe | |
| } | |
| match foo { | |
| Foo { | |
| pizza: Pizza { //~ ERROR access to union field is unsafe | |
| topping: Some(PizzaTopping::Cheese) | Some(PizzaTopping::Pineapple) | None | |
| } | |
| } => {}, | |
| } | |
| match foo { | |
| Foo { zst: () } => {} //~ ERROR access to union field is unsafe | |
| } | |
| match foo { | |
| Foo { pizza: Pizza { .. } } => {} //~ ERROR access to union field is unsafe | |
| } | |
| // binding to wildcard is okay | |
| match foo { | |
| Foo { bar: _ } => {}, | |
| } | |
| let Foo { bar: _ } = foo; | |
| } |