diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:13 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:13 +0000 |
commit | 218caa410aa38c29984be31a5229b9fa717560ee (patch) | |
tree | c54bd55eeb6e4c508940a30e94c0032fbd45d677 /tests/ui/closure_context | |
parent | Releasing progress-linux version 1.67.1+dfsg1-1~progress7.99u1. (diff) | |
download | rustc-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.rs | 11 | ||||
-rw-r--r-- | tests/ui/closure_context/issue-26046-fn-mut.stderr | 16 | ||||
-rw-r--r-- | tests/ui/closure_context/issue-26046-fn-once.rs | 11 | ||||
-rw-r--r-- | tests/ui/closure_context/issue-26046-fn-once.stderr | 16 | ||||
-rw-r--r-- | tests/ui/closure_context/issue-42065.rs | 13 | ||||
-rw-r--r-- | tests/ui/closure_context/issue-42065.stderr | 22 |
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`. |