mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-29 18:23:49 +00:00
982b49494e
This is to make the diff when stabilizing it easier to review.
27 lines
723 B
Rust
27 lines
723 B
Rust
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
|
|
}
|