summaryrefslogtreecommitdiffstats
path: root/src/test/ui/closure_context
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/closure_context')
-rw-r--r--src/test/ui/closure_context/issue-26046-fn-mut.rs11
-rw-r--r--src/test/ui/closure_context/issue-26046-fn-mut.stderr14
-rw-r--r--src/test/ui/closure_context/issue-26046-fn-once.rs11
-rw-r--r--src/test/ui/closure_context/issue-26046-fn-once.stderr14
-rw-r--r--src/test/ui/closure_context/issue-42065.rs13
-rw-r--r--src/test/ui/closure_context/issue-42065.stderr22
6 files changed, 85 insertions, 0 deletions
diff --git a/src/test/ui/closure_context/issue-26046-fn-mut.rs b/src/test/ui/closure_context/issue-26046-fn-mut.rs
new file mode 100644
index 000000000..0a015ea14
--- /dev/null
+++ b/src/test/ui/closure_context/issue-26046-fn-mut.rs
@@ -0,0 +1,11 @@
+fn foo() -> Box<dyn Fn()> {
+ let num = 5;
+
+ let closure = || { //~ ERROR expected a closure that
+ num += 1;
+ };
+
+ Box::new(closure)
+}
+
+fn main() {}
diff --git a/src/test/ui/closure_context/issue-26046-fn-mut.stderr b/src/test/ui/closure_context/issue-26046-fn-mut.stderr
new file mode 100644
index 000000000..74d3c4977
--- /dev/null
+++ b/src/test/ui/closure_context/issue-26046-fn-mut.stderr
@@ -0,0 +1,14 @@
+error[E0525]: expected a closure that implements the `Fn` trait, but this closure only implements `FnMut`
+ --> $DIR/issue-26046-fn-mut.rs:4:19
+ |
+LL | let closure = || {
+ | ^^ this closure implements `FnMut`, not `Fn`
+LL | num += 1;
+ | --- closure is `FnMut` because it mutates the variable `num` here
+...
+LL | Box::new(closure)
+ | ----------------- the requirement to implement `Fn` derives from here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0525`.
diff --git a/src/test/ui/closure_context/issue-26046-fn-once.rs b/src/test/ui/closure_context/issue-26046-fn-once.rs
new file mode 100644
index 000000000..511690e9d
--- /dev/null
+++ b/src/test/ui/closure_context/issue-26046-fn-once.rs
@@ -0,0 +1,11 @@
+fn get_closure() -> Box<dyn Fn() -> Vec<u8>> {
+ let vec = vec![1u8, 2u8];
+
+ let closure = move || { //~ ERROR expected a closure
+ vec
+ };
+
+ Box::new(closure)
+}
+
+fn main() {}
diff --git a/src/test/ui/closure_context/issue-26046-fn-once.stderr b/src/test/ui/closure_context/issue-26046-fn-once.stderr
new file mode 100644
index 000000000..473e8e841
--- /dev/null
+++ b/src/test/ui/closure_context/issue-26046-fn-once.stderr
@@ -0,0 +1,14 @@
+error[E0525]: expected a closure that implements the `Fn` trait, but this closure only implements `FnOnce`
+ --> $DIR/issue-26046-fn-once.rs:4:19
+ |
+LL | let closure = move || {
+ | ^^^^^^^ this closure implements `FnOnce`, not `Fn`
+LL | vec
+ | --- closure is `FnOnce` because it moves the variable `vec` out of its environment
+...
+LL | Box::new(closure)
+ | ----------------- the requirement to implement `Fn` derives from here
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0525`.
diff --git a/src/test/ui/closure_context/issue-42065.rs b/src/test/ui/closure_context/issue-42065.rs
new file mode 100644
index 000000000..c506600f4
--- /dev/null
+++ b/src/test/ui/closure_context/issue-42065.rs
@@ -0,0 +1,13 @@
+use std::collections::HashMap;
+
+fn main() {
+ let dict: HashMap<i32, i32> = HashMap::new();
+ let debug_dump_dict = || {
+ for (key, value) in dict {
+ println!("{:?} - {:?}", key, value);
+ }
+ };
+ debug_dump_dict();
+ debug_dump_dict();
+ //~^ ERROR use of moved value: `debug_dump_dict`
+}
diff --git a/src/test/ui/closure_context/issue-42065.stderr b/src/test/ui/closure_context/issue-42065.stderr
new file mode 100644
index 000000000..896bb6dc6
--- /dev/null
+++ b/src/test/ui/closure_context/issue-42065.stderr
@@ -0,0 +1,22 @@
+error[E0382]: use of moved value: `debug_dump_dict`
+ --> $DIR/issue-42065.rs:11:5
+ |
+LL | debug_dump_dict();
+ | ----------------- `debug_dump_dict` moved due to this call
+LL | debug_dump_dict();
+ | ^^^^^^^^^^^^^^^ value used here after move
+ |
+note: closure cannot be invoked more than once because it moves the variable `dict` out of its environment
+ --> $DIR/issue-42065.rs:6:29
+ |
+LL | for (key, value) in dict {
+ | ^^^^
+note: this value implements `FnOnce`, which causes it to be moved when called
+ --> $DIR/issue-42065.rs:10:5
+ |
+LL | debug_dump_dict();
+ | ^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0382`.