]> git.lizzy.rs Git - rust.git/blob - src/test/ui/nll/move-errors.rs
Auto merge of #105121 - oli-obk:simpler-cheaper-dump_mir, r=nnethercote
[rust.git] / src / test / ui / nll / move-errors.rs
1 struct A(String);
2 struct C(D);
3
4 fn suggest_remove_deref() {
5     let a = &A("".to_string());
6     let b = *a;
7     //~^ ERROR
8 }
9
10 fn suggest_borrow() {
11     let a = [A("".to_string())];
12     let b = a[0];
13     //~^ ERROR
14 }
15
16 fn suggest_borrow2() {
17     let mut a = A("".to_string());
18     let r = &&mut a;
19     let s = **r;
20     //~^ ERROR
21 }
22
23 fn suggest_borrow3() {
24     use std::rc::Rc;
25     let mut a = A("".to_string());
26     let r = Rc::new(a);
27     let s = *r;
28     //~^ ERROR
29 }
30
31 fn suggest_borrow4() {
32     let a = [A("".to_string())][0];
33     //~^ ERROR
34 }
35
36 fn suggest_borrow5() {
37     let a = &A("".to_string());
38     let A(s) = *a;
39     //~^ ERROR
40 }
41
42 fn suggest_ref() {
43     let c = C(D(String::new()));
44     let C(D(s)) = c;
45     //~^ ERROR
46 }
47
48 fn suggest_nothing() {
49     let a = &A("".to_string());
50     let b;
51     b = *a;
52     //~^ ERROR
53 }
54
55 enum B {
56     V(String),
57     U(D),
58 }
59
60 struct D(String);
61
62 impl Drop for D {
63     fn drop(&mut self) {}
64 }
65
66 struct F(String, String);
67
68 impl Drop for F {
69     fn drop(&mut self) {}
70 }
71
72 fn probably_suggest_borrow() {
73     let x = [B::V(String::new())];
74     match x[0] {
75     //~^ ERROR
76         B::U(d) => (),
77         B::V(s) => (),
78     }
79 }
80
81 fn have_to_suggest_ref() {
82     let x = B::V(String::new());
83     match x {
84     //~^ ERROR
85         B::V(s) => drop(s),
86         B::U(D(s)) => (),
87     };
88 }
89
90 fn two_separate_errors() {
91     let x = (D(String::new()), &String::new());
92     match x {
93     //~^ ERROR
94     //~^^ ERROR
95         (D(s), &t) => (),
96         _ => (),
97     }
98 }
99
100 fn have_to_suggest_double_ref() {
101     let x = F(String::new(), String::new());
102     match x {
103     //~^ ERROR
104         F(s, mut t) => (),
105         _ => (),
106     }
107 }
108
109 fn double_binding(x: &Result<String, String>) {
110     match *x {
111     //~^ ERROR
112         Ok(s) | Err(s) => (),
113     }
114 }
115
116 fn main() {
117 }