]> git.proxmox.com Git - rustc.git/blame - src/test/ui/borrowck/borrowck-union-move.rs
New upstream version 1.35.0+dfsg1
[rustc.git] / src / test / ui / borrowck / borrowck-union-move.rs
CommitLineData
9e0c209e
SL
1#![feature(untagged_unions)]
2
3#[derive(Clone, Copy)]
4struct Copy;
5struct NonCopy;
6
7union Unn {
8 n1: NonCopy,
9 n2: NonCopy,
10}
11union Ucc {
12 c1: Copy,
13 c2: Copy,
14}
15union Ucn {
16 c: Copy,
17 n: NonCopy,
18}
19
20fn main() {
21 unsafe {
22 // 2 NonCopy
23 {
24 let mut u = Unn { n1: NonCopy };
25 let a = u.n1;
26 let a = u.n1; //~ ERROR use of moved value: `u.n1`
27 }
28 {
29 let mut u = Unn { n1: NonCopy };
30 let a = u.n1;
31 let a = u; //~ ERROR use of partially moved value: `u`
32 }
33 {
34 let mut u = Unn { n1: NonCopy };
35 let a = u.n1;
36 let a = u.n2; //~ ERROR use of moved value: `u.n2`
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;
63 let a = u.n; //~ ERROR use of moved value: `u.n`
64 }
65 {
66 let mut u = Ucn { c: Copy };
67 let a = u.n;
68 let a = u.c; //~ ERROR use of moved value: `u.c`
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;
83 let a = u; //~ ERROR use of partially moved value: `u`
84 }
85 }
86}