mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 23:34:48 +00:00
077fc26f0a
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) |
||
---|---|---|
.. | ||
2229_closure_analysis | ||
binder | ||
closure-expected-type | ||
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 | ||
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 | ||
issue-109188.stderr | ||
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 | ||
semistatement-in-lambda.rs | ||
static-closures-with-nonstatic-return.rs | ||
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 |