Skip to content

ref_as_ptr suggests using ptr::from_ref(r) where it should instead suggest ptr::from_mut(r) for r: &mut T. #12882

@briansmith

Description

@briansmith

Summary

ptr::from_ref creates a pointer that isn't safe to cast to *mut T but ptr::from_mut(x).cast_const() creates a pointer that is safe to cast to *mut T. Unless Clippy is sure that the resultant pointer is never going to be cast to *mut T, it should recommend from_mut when it sees an expression r as *const T where r: &mut T. See rust-lang/rust#56604 (comment), #12791, rust-lang/rust#125897.

Reproducer

I tried this code:

#![deny(clippy::ref_as_ptr)]

fn bar<T>(_x: *const T) {}

fn foo<T>(x: &mut T) {
   bar(x as *const T);
}

I expected to see this happen:

Clippy should recommended ptr::from_mut(x) or ptr::from_mut(x).cast_const().

Instead, this happened:

Clippy recommended ptr::from_ref(x).

Version

Nightly channel
Build using the Nightly version: 1.80.0-nightly
(2024-06-02 032af18af578f4283a29)

Additional Labels

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: Clippy is not doing the correct thingI-suggestion-causes-bugIssue: The suggestion compiles but changes the code to behave in an unintended way

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions