]> git.lizzy.rs Git - rust.git/blob - src/test/ui/borrowck/borrowck-union-move.rs
Rollup merge of #91312 - terrarier2111:anon-const-ice, r=jackh726
[rust.git] / src / test / ui / borrowck / borrowck-union-move.rs
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`
27         }
28         {
29             let mut u = Unn { n1: NonCopy };
30             let a = u.n1;
31             let a = u; //~ ERROR use of 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`
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`
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`
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 moved value: `u`
84         }
85     }
86 }