]> git.proxmox.com Git - rustc.git/blob - src/test/ui/moves/issue-72649-uninit-in-loop.rs
New upstream version 1.64.0+dfsg1
[rustc.git] / src / test / ui / moves / issue-72649-uninit-in-loop.rs
1 // Regression test for issue #72649
2 // Tests that we don't emit spurious
3 // 'value moved in previous iteration of loop' message
4
5 struct NonCopy;
6
7 fn good() {
8 loop {
9 let value = NonCopy{};
10 let _used = value;
11 }
12 }
13
14 fn moved_here_1() {
15 loop {
16 let value = NonCopy{};
17 //~^ NOTE move occurs because `value` has type `NonCopy`, which does not implement the `Copy` trait
18 let _used = value;
19 //~^ NOTE value moved here
20 let _used2 = value; //~ ERROR use of moved value: `value`
21 //~^ NOTE value used here after move
22 }
23 }
24
25 fn moved_here_2() {
26 let value = NonCopy{};
27 //~^ NOTE move occurs because `value` has type `NonCopy`, which does not implement the `Copy` trait
28 loop {
29 let _used = value;
30 //~^ NOTE value moved here
31 loop {
32 let _used2 = value; //~ ERROR use of moved value: `value`
33 //~^ NOTE value used here after move
34 }
35 }
36 }
37
38 fn moved_loop_1() {
39 let value = NonCopy{};
40 //~^ NOTE move occurs because `value` has type `NonCopy`, which does not implement the `Copy` trait
41 loop {
42 let _used = value; //~ ERROR use of moved value: `value`
43 //~^ NOTE value moved here, in previous iteration of loop
44 }
45 }
46
47 fn moved_loop_2() {
48 let mut value = NonCopy{};
49 //~^ NOTE move occurs because `value` has type `NonCopy`, which does not implement the `Copy` trait
50 let _used = value;
51 value = NonCopy{};
52 loop {
53 let _used2 = value; //~ ERROR use of moved value: `value`
54 //~^ NOTE value moved here, in previous iteration of loop
55 }
56 }
57
58 fn uninit_1() {
59 loop {
60 let value: NonCopy; //~ NOTE declared here
61 let _used = value; //~ ERROR binding `value` isn't initialized
62 //~^ NOTE `value` used here but it isn't initialized
63 }
64 }
65
66 fn uninit_2() {
67 let mut value: NonCopy; //~ NOTE declared here
68 loop {
69 let _used = value; //~ ERROR binding `value` isn't initialized
70 //~^ NOTE `value` used here but it isn't initialized
71 }
72 }
73
74 fn main() {}