]>
Commit | Line | Data |
---|---|---|
9e0c209e SL |
1 | #![feature(untagged_unions)] |
2 | ||
3 | #[derive(Clone, Copy)] | |
4 | struct Copy; | |
5 | struct NonCopy; | |
6 | ||
7 | union Unn { | |
8 | n1: NonCopy, | |
9 | n2: NonCopy, | |
10 | } | |
11 | union Ucc { | |
12 | c1: Copy, | |
13 | c2: Copy, | |
14 | } | |
15 | union Ucn { | |
16 | c: Copy, | |
17 | n: NonCopy, | |
18 | } | |
19 | ||
20 | fn 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 | } |