rust/tests/ui/closures/2229_closure_analysis
bors 077fc26f0a Auto merge of #109732 - Urgau:uplift_drop_forget_ref_lints, r=davidtwco
Uplift `clippy::{drop,forget}_{ref,copy}` lints

This PR aims at uplifting the `clippy::drop_ref`, `clippy::drop_copy`, `clippy::forget_ref` and `clippy::forget_copy` lints.

Those lints are/were declared in the correctness category of clippy because they lint on useless and most probably is not what the developer wanted.

## `drop_ref` and `forget_ref`

The `drop_ref` and `forget_ref` lint checks for calls to `std::mem::drop` or `std::mem::forget` with a reference instead of an owned value.

### Example

```rust
let mut lock_guard = mutex.lock();
std::mem::drop(&lock_guard) // Should have been drop(lock_guard), mutex
// still locked
operation_that_requires_mutex_to_be_unlocked();
```

### Explanation

Calling `drop` or `forget` on a reference will only drop the reference itself, which is a no-op. It will not call the `drop` or `forget` method on the underlying referenced value, which is likely what was intended.

## `drop_copy` and `forget_copy`

The `drop_copy` and `forget_copy` lint checks for calls to `std::mem::forget` or `std::mem::drop` with a value that derives the Copy trait.

### Example

```rust
let x: i32 = 42; // i32 implements Copy
std::mem::forget(x) // A copy of x is passed to the function, leaving the
                    // original unaffected
```

### Explanation

Calling `std::mem::forget` [does nothing for types that implement Copy](https://doc.rust-lang.org/std/mem/fn.drop.html) since the value will be copied and moved into the function on invocation.

-----

Followed the instructions for uplift a clippy describe here: https://github.com/rust-lang/rust/pull/99696#pullrequestreview-1134072751

cc `@m-ou-se` (as T-libs-api leader because the uplifting was discussed in a recent meeting)
2023-05-12 12:04:32 +00:00
..
diagnostics tweak "make mut" spans when assigning to locals 2023-05-05 22:40:04 +12:00
match Run check_match and check_liveness when MIR is built instead of having an explicit phase for them 2023-04-21 22:32:38 +00:00
migrations Adjust tests for new drop and forget lints 2023-05-10 19:36:02 +02:00
optimization Adjust tests for new drop and forget lints 2023-05-10 19:36:02 +02:00
run_pass Adjust tests for new drop and forget lints 2023-05-10 19:36:02 +02:00
array_subslice.rs Fix subslice capture in closure 2023-03-27 22:26:30 +01:00
array_subslice.stderr Fix subslice capture in closure 2023-03-27 22:26:30 +01:00
arrays-completely-captured.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
arrays-completely-captured.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
bad-pattern.rs Bail out of MIR construction if check_match fails 2023-04-30 19:17:40 +01:00
bad-pattern.stderr Bail out of MIR construction if check_match fails 2023-04-30 19:17:40 +01:00
by_value.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
by_value.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
capture-analysis-1.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
capture-analysis-1.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
capture-analysis-2.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
capture-analysis-2.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
capture-analysis-3.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
capture-analysis-3.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
capture-analysis-4.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
capture-analysis-4.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
capture-disjoint-field-struct.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
capture-disjoint-field-struct.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
capture-disjoint-field-tuple.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
capture-disjoint-field-tuple.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
capture-enum-field.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
capture-enums.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
capture-enums.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
deep-multilevel-struct.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
deep-multilevel-struct.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
deep-multilevel-tuple.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
deep-multilevel-tuple.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
destructure_patterns.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
destructure_patterns.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
feature-gate-capture_disjoint_fields.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
feature-gate-capture_disjoint_fields.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
filter-on-struct-member.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
filter-on-struct-member.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
issue_88118.rs Remove the capture_disjoint_fields feature 2023-02-28 01:21:15 +00:00
issue-87378.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
issue-87378.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
issue-87987.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
issue-87987.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
issue-88118-2.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
issue-88118-2.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
issue-88476.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
issue-88476.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
issue-89606.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
issue-90465.fixed Move /src/test to /tests 2023-01-11 09:32:08 +00:00
issue-90465.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
issue-90465.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
issue-92724-needsdrop-query-cycle.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
move_closure.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
move_closure.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
multilevel-path-1.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
multilevel-path-1.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
multilevel-path-2.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
multilevel-path-2.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
nested-closure.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
nested-closure.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
path-with-array-access.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
path-with-array-access.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
preserve_field_drop_order2.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
preserve_field_drop_order2.twenty_eighteen.run.stdout Move /src/test to /tests 2023-01-11 09:32:08 +00:00
preserve_field_drop_order2.twenty_twentyone.run.stdout Move /src/test to /tests 2023-01-11 09:32:08 +00:00
preserve_field_drop_order.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
preserve_field_drop_order.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
repr_packed.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
repr_packed.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
simple-struct-min-capture.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
simple-struct-min-capture.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
unsafe_ptr.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
unsafe_ptr.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00
wild_patterns.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
wild_patterns.stderr Move /src/test to /tests 2023-01-11 09:32:08 +00:00