mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-09 21:42:44 +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) |
||
---|---|---|
.. | ||
auxiliary | ||
drop_order.rs | ||
drop-foreign-fundamental.rs | ||
drop-foreign-fundamental.stderr | ||
drop-if-let-binding.rs | ||
drop-on-empty-block-exit.rs | ||
drop-on-ret.rs | ||
drop-struct-as-object.rs | ||
drop-trait-enum.rs | ||
drop-trait-generic.rs | ||
drop-trait.rs | ||
drop-uninhabited-enum.rs | ||
drop-with-type-ascription-1.rs | ||
drop-with-type-ascription-2.rs | ||
dropck_legal_cycles.rs | ||
dropck-eyepatch-extern-crate.rs | ||
dropck-eyepatch-reorder.rs | ||
dropck-eyepatch.rs | ||
dynamic-drop-async.rs | ||
dynamic-drop.rs | ||
issue-979.rs | ||
issue-2734.rs | ||
issue-2735-2.rs | ||
issue-2735-3.rs | ||
issue-2735.rs | ||
issue-10028.rs | ||
issue-17718-const-destructors.rs | ||
issue-21486.rs | ||
issue-23338-ensure-param-drop-order.rs | ||
issue-30018-nopanic.rs | ||
issue-35546.rs | ||
issue-48962.rs | ||
issue-90752-raw-ptr-shenanigans.rs | ||
issue-90752.rs | ||
issue-100276.rs | ||
issue-103107.rs | ||
no-drop-flag-size.rs | ||
nondrop-cycle.rs | ||
repeat-drop-2.rs | ||
repeat-drop-2.stderr | ||
repeat-drop.rs | ||
terminate-in-initializer.rs | ||
use_inline_dtor.rs |