]> git.proxmox.com Git - rustc.git/blame - src/test/ui/borrowck/borrowck-union-move.rs
New upstream version 1.66.0+dfsg1
[rustc.git] / src / test / ui / borrowck / borrowck-union-move.rs
CommitLineData
064997fb 1use std::mem::ManuallyDrop;
9e0c209e
SL
2
3#[derive(Clone, Copy)]
4struct Copy;
5struct NonCopy;
6
7union Unn {
064997fb
FG
8 n1: ManuallyDrop<NonCopy>,
9 n2: ManuallyDrop<NonCopy>,
9e0c209e
SL
10}
11union Ucc {
12 c1: Copy,
13 c2: Copy,
14}
15union Ucn {
16 c: Copy,
064997fb 17 n: ManuallyDrop<NonCopy>,
9e0c209e
SL
18}
19
20fn main() {
21 unsafe {
22 // 2 NonCopy
23 {
064997fb 24 let mut u = Unn { n1: ManuallyDrop::new(NonCopy) };
9e0c209e 25 let a = u.n1;
48663c56 26 let a = u.n1; //~ ERROR use of moved value: `u`
9e0c209e
SL
27 }
28 {
064997fb 29 let mut u = Unn { n1: ManuallyDrop::new(NonCopy) };
9e0c209e 30 let a = u.n1;
48663c56 31 let a = u; //~ ERROR use of moved value: `u`
9e0c209e
SL
32 }
33 {
064997fb 34 let mut u = Unn { n1: ManuallyDrop::new(NonCopy) };
9e0c209e 35 let a = u.n1;
48663c56 36 let a = u.n2; //~ ERROR use of moved value: `u`
9e0c209e
SL
37 }
38 // 2 Copy
39 {
40 let mut u = Ucc { c1: Copy };
41 let a = u.c1;
42 let a = u.c1; // OK
43 }
44 {
45 let mut u = Ucc { c1: Copy };
46 let a = u.c1;
47 let a = u; // OK
48 }
49 {
50 let mut u = Ucc { c1: Copy };
51 let a = u.c1;
52 let a = u.c2; // OK
53 }
54 // 1 Copy, 1 NonCopy
55 {
56 let mut u = Ucn { c: Copy };
57 let a = u.c;
58 let a = u.c; // OK
59 }
60 {
61 let mut u = Ucn { c: Copy };
62 let a = u.n;
48663c56 63 let a = u.n; //~ ERROR use of moved value: `u`
9e0c209e
SL
64 }
65 {
66 let mut u = Ucn { c: Copy };
67 let a = u.n;
48663c56 68 let a = u.c; //~ ERROR use of moved value: `u`
9e0c209e
SL
69 }
70 {
71 let mut u = Ucn { c: Copy };
72 let a = u.c;
73 let a = u.n; // OK
74 }
75 {
76 let mut u = Ucn { c: Copy };
77 let a = u.c;
78 let a = u; // OK
79 }
80 {
81 let mut u = Ucn { c: Copy };
82 let a = u.n;
48663c56 83 let a = u; //~ ERROR use of moved value: `u`
9e0c209e
SL
84 }
85 }
86}