about summary refs log tree commit diff
path: root/tests/ui/nll/move-errors.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/nll/move-errors.rs')
-rw-r--r--tests/ui/nll/move-errors.rs117
1 files changed, 117 insertions, 0 deletions
diff --git a/tests/ui/nll/move-errors.rs b/tests/ui/nll/move-errors.rs
new file mode 100644
index 00000000000..e0fcd625032
--- /dev/null
+++ b/tests/ui/nll/move-errors.rs
@@ -0,0 +1,117 @@
+struct A(String);
+struct C(D);
+
+fn suggest_remove_deref() {
+    let a = &A("".to_string());
+    let b = *a;
+    //~^ ERROR
+}
+
+fn suggest_borrow() {
+    let a = [A("".to_string())];
+    let b = a[0];
+    //~^ ERROR
+}
+
+fn suggest_borrow2() {
+    let mut a = A("".to_string());
+    let r = &&mut a;
+    let s = **r;
+    //~^ ERROR
+}
+
+fn suggest_borrow3() {
+    use std::rc::Rc;
+    let mut a = A("".to_string());
+    let r = Rc::new(a);
+    let s = *r;
+    //~^ ERROR
+}
+
+fn suggest_borrow4() {
+    let a = [A("".to_string())][0];
+    //~^ ERROR
+}
+
+fn suggest_borrow5() {
+    let a = &A("".to_string());
+    let A(s) = *a;
+    //~^ ERROR
+}
+
+fn suggest_ref() {
+    let c = C(D(String::new()));
+    let C(D(s)) = c;
+    //~^ ERROR
+}
+
+fn suggest_nothing() {
+    let a = &A("".to_string());
+    let b;
+    b = *a;
+    //~^ ERROR
+}
+
+enum B {
+    V(String),
+    U(D),
+}
+
+struct D(String);
+
+impl Drop for D {
+    fn drop(&mut self) {}
+}
+
+struct F(String, String);
+
+impl Drop for F {
+    fn drop(&mut self) {}
+}
+
+fn probably_suggest_borrow() {
+    let x = [B::V(String::new())];
+    match x[0] {
+    //~^ ERROR
+        B::U(d) => (),
+        B::V(s) => (),
+    }
+}
+
+fn have_to_suggest_ref() {
+    let x = B::V(String::new());
+    match x {
+    //~^ ERROR
+        B::V(s) => drop(s),
+        B::U(D(s)) => (),
+    };
+}
+
+fn two_separate_errors() {
+    let x = (D(String::new()), &String::new());
+    match x {
+    //~^ ERROR
+    //~^^ ERROR
+        (D(s), &t) => (),
+        _ => (),
+    }
+}
+
+fn have_to_suggest_double_ref() {
+    let x = F(String::new(), String::new());
+    match x {
+    //~^ ERROR
+        F(s, mut t) => (),
+        _ => (),
+    }
+}
+
+fn double_binding(x: &Result<String, String>) {
+    match *x {
+    //~^ ERROR
+        Ok(s) | Err(s) => (),
+    }
+}
+
+fn main() {
+}