- Notifications
You must be signed in to change notification settings - Fork 13.8k
Description
I tried this code:
use std::rc::Rc; struct Pending(Rc<()>); fn pending() -> Pending { Pending(Rc::new(())) } fn main() { let _ = pending(); }
(The original code: https://github.com/rust-lang/futures-rs/blob/72e7e397cdfe7574e9b5d8845cafefc6e5dda70a/futures-executor/tests/local_pool.rs#L13)
I expected to see this happen: no warning or a warning suggests Pending(PhantomData<Rc<()>>)
.
Instead, this happened:
A warning suggests Pending(())
.
error: field `0` is never read --> futures-executor/tests/local_pool.rs:13:16 | 13 | struct Pending(Rc<()>); | ------- ^^^^^^ | | | field in this struct | = note: `-D dead-code` implied by `-D warnings` = help: to override `-D warnings` add `#[allow(dead_code)]` help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field | 13 | struct Pending(()); | ~~
Changing Rc<()>
to ()
changes auto trait implementations of Pending
, so dead_code should not suggest such a code or should suggest both code (PhantomData<Rc<()>>
and ()
) with explanations.
Also, if it suggests PhantomData, it should also be noted that PhantomData is not able to propagate all auto-traits (e.g., Unpin). (although this is not a problem in the above case) EDIT: see #119645 (comment)
https://github.com/rust-lang/futures-rs/actions/runs/7428509435/job/20215931270
Meta
rustc --version --verbose
:
rustc 1.77.0-nightly (595bc6f00 2024-01-05) binary: rustc commit-hash: 595bc6f00369475047538fdae1ff8cea692ac385 commit-date: 2024-01-05 host: aarch64-apple-darwin release: 1.77.0-nightly LLVM version: 17.0.6
This has been shown in the latest nightly (nightly-2024-01-06) since #118297 (cc @shepmaster). IMO, it should not be changed to be warned by default with such a lint with a wrong suggestion.