rust/tests/ui/closures
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
..
2229_closure_analysis Auto merge of #109732 - Urgau:uplift_drop_forget_ref_lints, r=davidtwco 2023-05-12 12:04:32 +00:00
binder vars are ? 2023-04-25 19:53:09 +00:00
closure-expected-type
print vars are ? 2023-04-25 19:53:09 +00:00
add_semicolon_non_block_closure.rs
add_semicolon_non_block_closure.stderr
closure_cap_coerce_many_fail.rs
closure_cap_coerce_many_fail.stderr
closure_no_cap_coerce_many_check_pass.rs
closure_no_cap_coerce_many_run_pass.rs
closure_no_cap_coerce_many_unsafe_0.mir.stderr
closure_no_cap_coerce_many_unsafe_0.rs
closure_no_cap_coerce_many_unsafe_0.thir.stderr
closure_no_cap_coerce_many_unsafe_1.rs
closure_promotion.rs
closure-array-break-length.rs
closure-array-break-length.stderr
closure-bounds-cant-promote-superkind-in-struct.rs
closure-bounds-cant-promote-superkind-in-struct.stderr
closure-bounds-static-cant-capture-borrowed.rs
closure-bounds-static-cant-capture-borrowed.stderr
closure-bounds-subtype.rs
closure-bounds-subtype.stderr
closure-expected.rs
closure-expected.stderr
closure-immutable-outer-variable.fixed
closure-immutable-outer-variable.rs
closure-immutable-outer-variable.rs.fixed
closure-immutable-outer-variable.stderr
closure-move-sync.rs
closure-move-sync.stderr
closure-no-fn-1.rs
closure-no-fn-1.stderr
closure-no-fn-2.rs
closure-no-fn-2.stderr
closure-no-fn-3.rs
closure-no-fn-3.stderr
closure-no-fn-4.rs
closure-no-fn-4.stderr
closure-no-fn-5.rs
closure-no-fn-5.stderr
closure-referencing-itself-issue-25954.rs
closure-referencing-itself-issue-25954.stderr
closure-reform-bad.rs
closure-reform-bad.stderr
closure-return-type-mismatch.rs
closure-return-type-mismatch.stderr
closure-return-type-must-be-sized.rs
closure-return-type-must-be-sized.stderr
closure-wrong-kind.rs
closure-wrong-kind.stderr
coerce-unsafe-closure-to-unsafe-fn-ptr.mir.stderr
coerce-unsafe-closure-to-unsafe-fn-ptr.rs
coerce-unsafe-closure-to-unsafe-fn-ptr.thir.stderr
coerce-unsafe-to-closure.rs
coerce-unsafe-to-closure.stderr
deeply-nested_closures.rs
diverging-closure.rs
issue-868.rs Move tests 2023-05-08 17:58:01 -03:00
issue-6801.rs
issue-6801.stderr
issue-10398.rs
issue-10398.stderr
issue-23012-supertrait-signature-inference.rs
issue-41366.rs
issue-42463.rs
issue-46742.rs
issue-48109.rs
issue-52437.rs
issue-52437.stderr
issue-67123.rs
issue-67123.stderr
issue-68025.rs
issue-72408-nested-closures-exponential.rs
issue-78720.rs
issue-78720.stderr
issue-80313-mutable-borrow-in-closure.rs
issue-80313-mutable-borrow-in-closure.stderr
issue-80313-mutable-borrow-in-move-closure.rs
issue-80313-mutable-borrow-in-move-closure.stderr
issue-80313-mutation-in-closure.rs
issue-80313-mutation-in-closure.stderr
issue-80313-mutation-in-move-closure.rs
issue-80313-mutation-in-move-closure.stderr
issue-81700-mut-borrow.rs
issue-81700-mut-borrow.stderr
issue-82438-mut-without-upvar.rs
issue-82438-mut-without-upvar.stderr
issue-84044-drop-non-mut.rs
issue-84044-drop-non-mut.stderr
issue-84128.rs
issue-84128.stderr
issue-87461.rs
issue-87461.stderr
issue-87814-1.rs
issue-87814-2.rs
issue-90871.rs
issue-90871.stderr
issue-97607.rs
issue-99565.rs
issue-99565.stderr
issue-101696.rs
issue-102089-multiple-opaque-cast.rs
issue-109188.rs Return equal for two identical projections 2023-03-21 15:28:11 +08:00
issue-109188.stderr Return equal for two identical projections 2023-03-21 15:28:11 +08:00
local-type-mix.rs
local-type-mix.stderr
multiple-fn-bounds.rs
multiple-fn-bounds.stderr
old-closure-arg-call-as.rs
old-closure-arg.rs
old-closure-explicit-types.rs
old-closure-expr-precedence.rs
old-closure-expr-precedence.stderr
old-closure-expression-remove-semicolon.fixed
old-closure-expression-remove-semicolon.rs
old-closure-expression-remove-semicolon.stderr
old-closure-fn-coerce.rs
old-closure-iter-1.rs
old-closure-iter-2.rs
once-move-out-on-heap.rs
self-supertrait-bounds.rs Broken tests 2023-04-11 17:45:42 +00:00
semistatement-in-lambda.rs
static-closures-with-nonstatic-return.rs add known-bug test for unsound issue 84366 2023-04-22 00:47:07 -04:00
supertrait-hint-cycle-2.rs
supertrait-hint-cycle-3.rs
supertrait-hint-cycle.rs
supertrait-hint-references-assoc-ty.rs
thir-unsafeck-issue-85871.rs