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