Files
rust/tests/ui/issues
Esteban Küber 5082e6a300 Generalize logic pointing at binding moved into closure
Account not only for `fn` parameters when moving non-`Copy` values into closure, but also for let bindings.

```
error[E0507]: cannot move out of `bar`, a captured variable in an `FnMut` closure
  --> $DIR/borrowck-move-by-capture.rs:9:29
   |
LL |     let bar: Box<_> = Box::new(3);
   |         ---  ------ move occurs because `bar` has type `Box<isize>`, which does not implement the `Copy` trait
   |         |
   |         captured outer variable
LL |     let _g = to_fn_mut(|| {
   |                        -- captured by this `FnMut` closure
LL |         let _h = to_fn_once(move || -> isize { *bar });
   |                             ^^^^^^^^^^^^^^^^   ---- variable moved due to use in closure
   |                             |
   |                             `bar` is moved here
   |
help: consider cloning the value before moving it into the closure
   |
LL ~         let value = bar.clone();
LL ~         let _h = to_fn_once(move || -> isize { value });
   |
```

```
error[E0507]: cannot move out of `y`, a captured variable in an `Fn` closure
  --> $DIR/unboxed-closures-move-upvar-from-non-once-ref-closure.rs:12:9
   |
LL |     let y = vec![format!("World")];
   |         -   ---------------------- move occurs because `y` has type `Vec<String>`, which does not implement the `Copy` trait
   |         |
   |         captured outer variable
LL |     call(|| {
   |          -- captured by this `Fn` closure
LL |         y.into_iter();
   |         ^ ----------- `y` moved due to this method call
   |         |
   |         `y` is moved here
   |
note: `into_iter` takes ownership of the receiver `self`, which moves `y`
  --> $SRC_DIR/core/src/iter/traits/collect.rs:LL:COL
help: you can `clone` the value and consume it, but this might not be your desired behavior
   |
LL |         <Vec<String> as Clone>::clone(&y).into_iter();
   |         +++++++++++++++++++++++++++++++ +
help: consider cloning the value if the performance cost is acceptable
   |
LL |         y.clone().into_iter();
   |          ++++++++
```
2025-07-21 16:21:23 +00:00
..
2024-02-07 10:42:01 +08:00
2024-01-05 10:00:59 +00:00
2025-07-07 08:13:12 +00:00
2024-02-07 10:42:01 +08:00
2024-02-07 10:42:01 +08:00
2025-04-03 21:41:58 +00:00
2025-06-13 01:16:36 +02:00
2025-04-03 21:41:58 +00:00
2025-06-06 20:52:34 +00:00
2025-02-04 10:57:49 +00:00
2025-02-03 19:00:22 +00:00
2024-02-07 10:42:01 +08:00
2024-01-13 12:46:58 -05:00
2024-07-06 14:24:20 +02:00
2024-02-07 10:42:01 +08:00
2023-11-16 17:00:23 +00:00
2024-01-05 10:00:59 +00:00
2024-01-13 12:46:58 -05:00
2023-11-16 17:00:23 +00:00
2024-02-07 10:42:01 +08:00
2024-07-10 17:15:02 -04:00
2024-07-10 17:15:02 -04:00
2024-04-29 14:53:38 +02:00
2024-11-22 02:32:26 +00:00
2024-11-22 02:32:26 +00:00
2023-11-24 21:04:51 +01:00
2024-04-22 18:48:47 +02:00