about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFelix S. Klock II <pnkfelix@pnkfx.org>2019-09-30 11:05:04 +0200
committerFelix S. Klock II <pnkfelix@pnkfx.org>2019-10-01 15:57:27 +0200
commit9fe138aa4350bd981ceea6cba0ba8c2b464da94b (patch)
treec165cc5ce13b95d2a801c335a9973d30e35b23d8
parent42ec6831b019114a4b6f6b58bfb5bc2927d70388 (diff)
downloadrust-9fe138aa4350bd981ceea6cba0ba8c2b464da94b.tar.gz
rust-9fe138aa4350bd981ceea6cba0ba8c2b464da94b.zip
regression test for 64453 borrow check error.
-rw-r--r--src/test/ui/borrowck/issue-64453.rs24
-rw-r--r--src/test/ui/borrowck/issue-64453.stderr34
2 files changed, 58 insertions, 0 deletions
diff --git a/src/test/ui/borrowck/issue-64453.rs b/src/test/ui/borrowck/issue-64453.rs
new file mode 100644
index 00000000000..d8ab6b6e25f
--- /dev/null
+++ b/src/test/ui/borrowck/issue-64453.rs
@@ -0,0 +1,24 @@
+struct Project;
+struct Value;
+
+static settings_dir: String = format!("");
+//~^ ERROR [E0019]
+//~| ERROR [E0015]
+//~| ERROR [E0015]
+
+fn from_string(_: String) -> Value {
+    Value
+}
+fn set_editor(_: Value) {}
+
+fn main() {
+    let settings_data = from_string(settings_dir);
+    //~^ ERROR cannot move out of static item `settings_dir` [E0507]
+    let args: i32 = 0;
+
+    match args {
+        ref x if x == &0 => set_editor(settings_data),
+        ref x if x == &1 => set_editor(settings_data),
+        _ => unimplemented!(),
+    }
+}
diff --git a/src/test/ui/borrowck/issue-64453.stderr b/src/test/ui/borrowck/issue-64453.stderr
new file mode 100644
index 00000000000..6987417fe19
--- /dev/null
+++ b/src/test/ui/borrowck/issue-64453.stderr
@@ -0,0 +1,34 @@
+error[E0507]: cannot move out of static item `settings_dir`
+  --> $DIR/issue-64453.rs:15:37
+   |
+LL |     let settings_data = from_string(settings_dir);
+   |                                     ^^^^^^^^^^^^ move occurs because `settings_dir` has type `std::string::String`, which does not implement the `Copy` trait
+
+error[E0019]: static contains unimplemented expression type
+  --> $DIR/issue-64453.rs:4:31
+   |
+LL | static settings_dir: String = format!("");
+   |                               ^^^^^^^^^^^
+   |
+   = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
+
+error[E0015]: calls in statics are limited to constant functions, tuple structs and tuple variants
+  --> $DIR/issue-64453.rs:4:31
+   |
+LL | static settings_dir: String = format!("");
+   |                               ^^^^^^^^^^^
+   |
+   = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
+
+error[E0015]: calls in statics are limited to constant functions, tuple structs and tuple variants
+  --> $DIR/issue-64453.rs:4:31
+   |
+LL | static settings_dir: String = format!("");
+   |                               ^^^^^^^^^^^
+   |
+   = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
+
+error: aborting due to 4 previous errors
+
+Some errors have detailed explanations: E0015, E0019, E0507.
+For more information about an error, try `rustc --explain E0015`.