-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Closed
Labels
C-bugCategory: Clippy is not doing the correct thingCategory: Clippy is not doing the correct thingI-false-positiveIssue: The lint was triggered on code it shouldn't haveIssue: The lint was triggered on code it shouldn't haveI-suggestion-causes-errorIssue: The suggestions provided by this Lint cause an ICE/error when appliedIssue: The suggestions provided by this Lint cause an ICE/error when applied
Description
Summary
.
Lint Name
redundant_pattern_matching
Reproducer
I tried this code:
use std::mem;
// If this is `None`, the metadata becomes padding.
type T = Option<&'static str>;
fn main() {
unsafe {
let mut p: mem::MaybeUninit<T> = mem::MaybeUninit::zeroed();
// The copy when `T` is returned from `transmute` should destroy padding
// (even when we use `write_unaligned`, which under the hood uses an untyped copy).
p.as_mut_ptr().write_unaligned(mem::transmute((0usize, 0usize)));
// Null epresents `None`.
assert!(matches!(*p.as_ptr(), None));
// The second part, with the length, becomes padding.
let c = &p as *const _ as *const u8;
// Read a padding byte.
let _val = *c.add(mem::size_of::<*const u8>());
//~^ERROR: uninitialized
}
}
I saw this happen:
warning: redundant pattern matching, consider using `is_none()`
--> src/main.rs:13:17
|
13 | assert!(matches!(*p.as_ptr(), None));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `*p.as_ptr().is_none()`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching
= note: `#[warn(clippy::redundant_pattern_matching)]` on by default
This does not compile:
error[E0599]: no method named `is_none` found for raw pointer `*const std::option::Option<&str>` in the current scope
--> src/main.rs:13:29
|
13 | assert!(*p.as_ptr().is_none());
| ^^^^^^^ method not found in `*const Option<&str>`
|
note: the method `is_none` exists on the type `&std::option::Option<&str>`
--> /home/matthias/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/option.rs:651:5
|
651 | pub const fn is_none(&self) -> bool {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
= note: you might want to use the unsafe method `<*const T>::as_ref` to get an optional reference to the value behind the pointer
= note: read the documentation for `<*const T>::as_ref` and ensure you satisfy its safety preconditions before calling it to avoid undefined behavior: https://doc.rust-lang.org/std/primitive.pointer.html#method.as_ref
Version
rustc 1.85.0-nightly (8742e0556 2024-12-28)
binary: rustc
commit-hash: 8742e0556dee3c64f7144de2fb2e88936418865a
commit-date: 2024-12-28
host: x86_64-unknown-linux-gnu
release: 1.85.0-nightly
LLVM version: 19.1.6
Additional Labels
No response
Metadata
Metadata
Assignees
Labels
C-bugCategory: Clippy is not doing the correct thingCategory: Clippy is not doing the correct thingI-false-positiveIssue: The lint was triggered on code it shouldn't haveIssue: The lint was triggered on code it shouldn't haveI-suggestion-causes-errorIssue: The suggestions provided by this Lint cause an ICE/error when appliedIssue: The suggestions provided by this Lint cause an ICE/error when applied