about summary refs log tree commit diff
path: root/tests/ui/closures
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2025-08-01 09:59:03 +0200
committerGitHub <noreply@github.com>2025-08-01 09:59:03 +0200
commit37ad0776acbf15b7082bcfed25132193787aab13 (patch)
tree1db017f85a5c62792fdc09e282797925e93dd3d9 /tests/ui/closures
parent6c02dd4eae83befde07dc4782395e2005055e9fa (diff)
parenta4a5bf5a71bd0c3fb52a28f81d88ce1755b3bc30 (diff)
downloadrust-37ad0776acbf15b7082bcfed25132193787aab13.tar.gz
rust-37ad0776acbf15b7082bcfed25132193787aab13.zip
Rollup merge of #144397 - Kivooeo:issue2, r=jieyouxu
`tests/ui/issues/`: The Issues Strike Back [2/N]

Some `tests/ui/issues/` housekeeping, to trim down number of tests directly under `tests/ui/issues/`. Part of https://github.com/rust-lang/rust/issues/133895.

r? ``@jieyouxu``
Diffstat (limited to 'tests/ui/closures')
-rw-r--r--tests/ui/closures/fnonce-moved-twice-12127.rs16
-rw-r--r--tests/ui/closures/fnonce-moved-twice-12127.stderr18
-rw-r--r--tests/ui/closures/moved-upvar-mut-rebind-11958.rs13
-rw-r--r--tests/ui/closures/moved-upvar-mut-rebind-11958.stderr20
4 files changed, 67 insertions, 0 deletions
diff --git a/tests/ui/closures/fnonce-moved-twice-12127.rs b/tests/ui/closures/fnonce-moved-twice-12127.rs
new file mode 100644
index 00000000000..369ddcafaab
--- /dev/null
+++ b/tests/ui/closures/fnonce-moved-twice-12127.rs
@@ -0,0 +1,16 @@
+//! Regression test for https://github.com/rust-lang/rust/issues/12127
+
+#![feature(unboxed_closures, tuple_trait)]
+
+fn to_fn_once<A:std::marker::Tuple,F:FnOnce<A>>(f: F) -> F { f }
+fn do_it(x: &isize) { }
+
+fn main() {
+    let x: Box<_> = Box::new(22);
+    let f = to_fn_once(move|| do_it(&*x));
+    to_fn_once(move|| {
+        f();
+        f();
+        //~^ ERROR: use of moved value: `f`
+    })()
+}
diff --git a/tests/ui/closures/fnonce-moved-twice-12127.stderr b/tests/ui/closures/fnonce-moved-twice-12127.stderr
new file mode 100644
index 00000000000..c2e12827527
--- /dev/null
+++ b/tests/ui/closures/fnonce-moved-twice-12127.stderr
@@ -0,0 +1,18 @@
+error[E0382]: use of moved value: `f`
+  --> $DIR/fnonce-moved-twice-12127.rs:13:9
+   |
+LL |         f();
+   |         --- `f` moved due to this call
+LL |         f();
+   |         ^ value used here after move
+   |
+note: this value implements `FnOnce`, which causes it to be moved when called
+  --> $DIR/fnonce-moved-twice-12127.rs:12:9
+   |
+LL |         f();
+   |         ^
+   = note: move occurs because `f` has type `{closure@$DIR/fnonce-moved-twice-12127.rs:10:24: 10:30}`, which does not implement the `Copy` trait
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0382`.
diff --git a/tests/ui/closures/moved-upvar-mut-rebind-11958.rs b/tests/ui/closures/moved-upvar-mut-rebind-11958.rs
new file mode 100644
index 00000000000..701dc1a2cef
--- /dev/null
+++ b/tests/ui/closures/moved-upvar-mut-rebind-11958.rs
@@ -0,0 +1,13 @@
+//! Regression test for https://github.com/rust-lang/rust/issues/11958
+
+//@ run-pass
+
+// We shouldn't need to rebind a moved upvar as mut if it's already
+// marked as mut
+
+pub fn main() {
+    let mut x = 1;
+    let _thunk = Box::new(move|| { x = 2; });
+    //~^ WARN value assigned to `x` is never read
+    //~| WARN unused variable: `x`
+}
diff --git a/tests/ui/closures/moved-upvar-mut-rebind-11958.stderr b/tests/ui/closures/moved-upvar-mut-rebind-11958.stderr
new file mode 100644
index 00000000000..b12bbcad925
--- /dev/null
+++ b/tests/ui/closures/moved-upvar-mut-rebind-11958.stderr
@@ -0,0 +1,20 @@
+warning: value assigned to `x` is never read
+  --> $DIR/moved-upvar-mut-rebind-11958.rs:10:36
+   |
+LL |     let _thunk = Box::new(move|| { x = 2; });
+   |                                    ^
+   |
+   = help: maybe it is overwritten before being read?
+   = note: `#[warn(unused_assignments)]` on by default
+
+warning: unused variable: `x`
+  --> $DIR/moved-upvar-mut-rebind-11958.rs:10:36
+   |
+LL |     let _thunk = Box::new(move|| { x = 2; });
+   |                                    ^
+   |
+   = help: did you mean to capture by reference instead?
+   = note: `#[warn(unused_variables)]` on by default
+
+warning: 2 warnings emitted
+