3 // [thir]compile-flags: -Z thir-unsafeck
5 #![feature(untagged_unions)]
14 topping: Option<PizzaTopping>
27 fn do_nothing(_x: &mut Foo) {}
30 let mut foo = Foo { bar: 5 };
33 unsafe { foo.bar += 1; }
34 assert_eq!(unsafe { foo.bar }, 7);
36 let Foo { bar: inner } = foo;
39 let foo = if let true = true { foo } else { foo };
43 Foo { bar: _a } => {},
50 topping: Some(PizzaTopping::Cheese) | Some(PizzaTopping::Pineapple) | None
55 // binding to wildcard is okay
59 let Foo { bar: _ } = foo;
60 // MIR unsafeck incorrectly thinks that it is safe to do these
61 unsafe { //[mir]~ WARNING
63 Foo { zst: () } => {},
66 unsafe { //[mir]~ WARNING
68 Foo { pizza: Pizza { .. } } => {},
71 let foo = Foo { bar: 5 };
72 let foo = if let 3 = if let true = true { 3 } else { 4 } { foo } else { foo };
74 let (_foo2, _random) = (foo, 42);
76 let mut foo_holder = FooHolder { inner_foo: Foo { bar: 5 } };
77 foo_holder.inner_foo.bar = 4;
78 assert_eq!(unsafe { foo_holder.inner_foo.bar }, 4);