]>
Commit | Line | Data |
---|---|---|
064997fb | 1 | use std::mem::ManuallyDrop; |
9e0c209e SL |
2 | |
3 | // Non-copy | |
4 | struct A; | |
5 | struct B; | |
6 | ||
7 | union U { | |
064997fb FG |
8 | a: ManuallyDrop<A>, |
9 | b: ManuallyDrop<B>, | |
9e0c209e SL |
10 | } |
11 | ||
12 | fn main() { | |
13 | unsafe { | |
14 | { | |
064997fb | 15 | let mut u = U { a: ManuallyDrop::new(A) }; |
9e0c209e | 16 | let a = u.a; |
48663c56 | 17 | let a = u.a; //~ ERROR use of moved value: `u` |
9e0c209e SL |
18 | } |
19 | { | |
064997fb | 20 | let mut u = U { a: ManuallyDrop::new(A) }; |
9e0c209e | 21 | let a = u.a; |
064997fb | 22 | u.a = ManuallyDrop::new(A); |
9e0c209e SL |
23 | let a = u.a; // OK |
24 | } | |
25 | { | |
064997fb | 26 | let mut u = U { a: ManuallyDrop::new(A) }; |
9e0c209e | 27 | let a = u.a; |
064997fb | 28 | u.b = ManuallyDrop::new(B); |
9e0c209e SL |
29 | let a = u.a; // OK |
30 | } | |
31 | } | |
32 | } |