Skip to content

False negative for trivial_casts with pointer #117187

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
Noratrieb opened this issue Oct 25, 2023 · 3 comments
Open

False negative for trivial_casts with pointer #117187

Noratrieb opened this issue Oct 25, 2023 · 3 comments
Labels
A-lints Area: Lints (warnings about flaws in source code) such as unused_mut. A-raw-pointers Area: raw pointers, MaybeUninit, NonNull C-bug Category: This is a bug. P-medium Medium priority regression-from-stable-to-stable Performance or correctness regression from one stable version to another. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@Noratrieb
Copy link
Member

Noratrieb commented Oct 25, 2023

After #113262, this will no longer fail to compile:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=8ee721b21617d98d18c5256778b57efe

#[deny(trivial_casts)]
fn main() {
    let a = std::ptr::null::<()>();
    let _b = a as *const ();
}

The cast is trivial, but we miss it because we have to conservatively assume that raw pointer casts are not trivial. A possible fix would be to check for trivial raw pointer casts in MIR (but correctly considering lifetimes is still not quite easy there I think).

@Noratrieb Noratrieb added A-lints Area: Lints (warnings about flaws in source code) such as unused_mut. regression-from-stable-to-nightly Performance or correctness regression from stable to nightly. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. C-bug Category: This is a bug. A-raw-pointers Area: raw pointers, MaybeUninit, NonNull labels Oct 25, 2023
@rustbot rustbot added I-prioritize Issue: Indicates that prioritization has been requested for this issue. needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. labels Oct 25, 2023
@Noratrieb Noratrieb removed the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Oct 25, 2023
@apiraino
Copy link
Contributor

WG-prioritization assigning priority (Zulip discussion).

@rustbot label -I-prioritize +P-medium

@rustbot rustbot added P-medium Medium priority and removed I-prioritize Issue: Indicates that prioritization has been requested for this issue. labels Oct 26, 2023
@apiraino
Copy link
Contributor

apiraino commented Apr 3, 2024

while randomly checking other things I've tried compiling the snippet in the first comment with the current stable 1.76.0: it compiles (since 1.75)

@Nilstrieb wdyt? could this issue been fixed at some point since opening this issue? Don't have time rn to bisect the fix 🙃 but if yes, I'd add the e-need-test to remind us to add a test case

@Noratrieb
Copy link
Member Author

Noratrieb commented Apr 4, 2024

The issue is that it does compile it shouldn't compile. I regressed this, it used to error with the lint, but now it doesn't anymore. I checked latest nightly and it still passes.

@apiraino apiraino added regression-from-stable-to-stable Performance or correctness regression from one stable version to another. and removed regression-from-stable-to-nightly Performance or correctness regression from stable to nightly. labels Dec 11, 2024
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
A-lints Area: Lints (warnings about flaws in source code) such as unused_mut. A-raw-pointers Area: raw pointers, MaybeUninit, NonNull C-bug Category: This is a bug. P-medium Medium priority regression-from-stable-to-stable Performance or correctness regression from one stable version to another. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

3 participants