summaryrefslogtreecommitdiffstats
path: root/tests/ui/closure_context
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:13 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:13 +0000
commit218caa410aa38c29984be31a5229b9fa717560ee (patch)
treec54bd55eeb6e4c508940a30e94c0032fbd45d677 /tests/ui/closure_context
parentReleasing progress-linux version 1.67.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-218caa410aa38c29984be31a5229b9fa717560ee.tar.xz
rustc-218caa410aa38c29984be31a5229b9fa717560ee.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/closure_context')
-rw-r--r--tests/ui/closure_context/issue-26046-fn-mut.rs11
-rw-r--r--tests/ui/closure_context/issue-26046-fn-mut.stderr16
-rw-r--r--tests/ui/closure_context/issue-26046-fn-once.rs11
-rw-r--r--tests/ui/closure_context/issue-26046-fn-once.stderr16
-rw-r--r--tests/ui/closure_context/issue-42065.rs13
-rw-r--r--tests/ui/closure_context/issue-42065.stderr22
6 files changed, 89 insertions, 0 deletions
diff --git a/tests/ui/closure_context/issue-26046-fn-mut.rs b/tests/ui/closure_context/issue-26046-fn-mut.rs
new file mode 100644
index 000000000..0a015ea14
--- /dev/null
+++ b/tests/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/tests/ui/closure_context/issue-26046-fn-mut.stderr b/tests/ui/closure_context/issue-26046-fn-mut.stderr
new file mode 100644
index 000000000..f744b71c2
--- /dev/null
+++ b/tests/ui/closure_context/issue-26046-fn-mut.stderr
@@ -0,0 +1,16 @@
+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
+ |
+ = note: required for the cast from `[closure@$DIR/issue-26046-fn-mut.rs:4:19: 4:21]` to the object type `dyn Fn()`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0525`.
diff --git a/tests/ui/closure_context/issue-26046-fn-once.rs b/tests/ui/closure_context/issue-26046-fn-once.rs
new file mode 100644
index 000000000..511690e9d
--- /dev/null
+++ b/tests/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/tests/ui/closure_context/issue-26046-fn-once.stderr b/tests/ui/closure_context/issue-26046-fn-once.stderr
new file mode 100644
index 000000000..34f94f9dc
--- /dev/null
+++ b/tests/ui/closure_context/issue-26046-fn-once.stderr
@@ -0,0 +1,16 @@
+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
+ |
+ = note: required for the cast from `[closure@$DIR/issue-26046-fn-once.rs:4:19: 4:26]` to the object type `dyn Fn() -> Vec<u8>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0525`.
diff --git a/tests/ui/closure_context/issue-42065.rs b/tests/ui/closure_context/issue-42065.rs
new file mode 100644
index 000000000..c506600f4
--- /dev/null
+++ b/tests/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/tests/ui/closure_context/issue-42065.stderr b/tests/ui/closure_context/issue-42065.stderr
new file mode 100644
index 000000000..896bb6dc6
--- /dev/null
+++ b/tests/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`.