| use std::ops::AddAssign; |
| use std::mem::ManuallyDrop; |
| |
| struct NonCopy; |
| impl AddAssign for NonCopy { |
| fn add_assign(&mut self, _: Self) {} |
| } |
| |
| union Foo { |
| a: u8, // non-dropping |
| b: ManuallyDrop<NonCopy>, |
| } |
| |
| fn main() { |
| let mut foo = Foo { a: 42 }; |
| foo.a += 5; //~ ERROR access to union field is unsafe |
| *foo.b += NonCopy; //~ ERROR access to union field is unsafe |
| *foo.b = NonCopy; //~ ERROR access to union field is unsafe |
| foo.b = ManuallyDrop::new(NonCopy); |
| foo.a; //~ ERROR access to union field is unsafe |
| let foo = Foo { a: 42 }; |
| foo.b; //~ ERROR access to union field is unsafe |
| let mut foo = Foo { a: 42 }; |
| foo.b = foo.b; |
| //~^ ERROR access to union field is unsafe |
| } |