Skip to content

Don't warn on never to any as casts as unreachable #144804

New issue

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

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

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

WaffleLapkin
Copy link
Member

@WaffleLapkin WaffleLapkin commented Aug 2, 2025

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes #67227

@rustbot
Copy link
Collaborator

rustbot commented Aug 2, 2025

r? @BoxyUwU

rustbot has assigned @BoxyUwU.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Aug 2, 2025
@WaffleLapkin WaffleLapkin added F-never_type `#![feature(never_type)]` L-unreachable_code Lint: unreachable_code labels Aug 2, 2025
@compiler-errors
Copy link
Member

compiler-errors commented Aug 2, 2025

This seems reasonable to me.

I don't think it's really particularly important to warn that the as cast is unreachable, even if it was expected to have operational side effects (e.g. an unsizing operation). A more important part is to warn that, e.g., a method call is unreachable, since it's expected that the operation have meaningful side effects.

@compiler-errors
Copy link
Member

compiler-errors commented Aug 2, 2025

Not sure if this should be T-lang nominated but if it is, it should be an easy decision. Thoughts?

@BoxyUwU
Copy link
Member

BoxyUwU commented Aug 2, 2025

on the one hand it technically has lang approval already, on the other hand that was almost 6 years ago and also not an FCP :clueless:

@WaffleLapkin
Copy link
Member Author

WaffleLapkin commented Aug 3, 2025

I guess just to be safe, let's nominate this for T-lang.

T-lang nomination

This PR makes it so we don't warn on as casts from the never type to any type as unreachable code. This is nice because sometimes those casts are required to appeal the type checker, for example if you want to specify a type for an RPIT:

fn blah() -> impl Iterator<Item = u32> {
    todo!() as std::iter::Empty<_> // just using `todo!()` would't work since `!` does not implement `Iterator`
}

Non-cast expressions are still warned against if they have the cast inside:

fn f() {
    Some(todo!() as u8);
    //~^ warn: unreachable call
}

This was considered a desirable change by T-lang 6 years ago (see #67227), but just to doable check, are you still on board?

@WaffleLapkin WaffleLapkin added I-lang-nominated Nominated for discussion during a lang team meeting. I-lang-easy-decision Issue: The decision needed by the team is conjectured to be easy; this does not imply nomination labels Aug 3, 2025
@traviscross traviscross added T-lang Relevant to the language team P-lang-drag-1 Lang team prioritization drag level 1. https://rust-lang.zulipchat.com/#narrow/channel/410516-t-lang and removed T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Aug 4, 2025
@traviscross
Copy link
Contributor

Thanks for the PR and nomination. Seems reasonable to me.

@rfcbot fcp merge

@rfcbot
Copy link
Collaborator

rfcbot commented Aug 4, 2025

Team member @traviscross has proposed to merge this. The next step is review by the rest of the tagged team members:

No concerns currently listed.

Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up!

cc @rust-lang/lang-advisors: FCP proposed for lang, please feel free to register concerns.
See this document for info about what commands tagged team members can give me.

@rfcbot rfcbot added proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off. disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. labels Aug 4, 2025
@nikomatsakis
Copy link
Contributor

nikomatsakis commented Aug 6, 2025

@rfcbot reviewed — FTR I'm in favor of todo!() being less annoying in more places, but this is a starting point.

@scottmcm
Copy link
Member

scottmcm commented Aug 6, 2025

For just as, sure let's do it.

@rfcbot reviewed

(That's not general "all things after !" and such, but for just as this seems like a reasonable tradeoff.)

@rfcbot rfcbot added the final-comment-period In the final comment period and will be merged soon unless new substantive objections are raised. label Aug 6, 2025
@rfcbot
Copy link
Collaborator

rfcbot commented Aug 6, 2025

🔔 This is now entering its final comment period, as per the review above. 🔔

@rfcbot rfcbot removed the proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off. label Aug 6, 2025
@traviscross traviscross removed I-lang-nominated Nominated for discussion during a lang team meeting. I-lang-easy-decision Issue: The decision needed by the team is conjectured to be easy; this does not imply nomination labels Aug 6, 2025
@traviscross traviscross added I-lang-radar Items that are on lang's radar and will need eventual work or consideration. and removed P-lang-drag-1 Lang team prioritization drag level 1. https://rust-lang.zulipchat.com/#narrow/channel/410516-t-lang labels Aug 6, 2025
@compiler-errors
Copy link
Member

r=me when fcp finishes

@rustbot author

@rustbot rustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 14, 2025
@rfcbot rfcbot added finished-final-comment-period The final comment period is finished for this PR / Issue. to-announce Announce this issue on triage meeting and removed final-comment-period In the final comment period and will be merged soon unless new substantive objections are raised. labels Aug 16, 2025
@rfcbot
Copy link
Collaborator

rfcbot commented Aug 16, 2025

The final comment period, with a disposition to merge, as per the review above, is now complete.

As the automated representative of the governance process, I would like to thank the author for their work and everyone else who contributed.

This will be merged soon.

@WaffleLapkin
Copy link
Member Author

@bors r=compiler-errors

@bors
Copy link
Collaborator

bors commented Aug 17, 2025

📌 Commit d2e133d has been approved by compiler-errors

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 17, 2025
jhpratt added a commit to jhpratt/rust that referenced this pull request Aug 17, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
jhpratt added a commit to jhpratt/rust that referenced this pull request Aug 17, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
jhpratt added a commit to jhpratt/rust that referenced this pull request Aug 17, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
jhpratt added a commit to jhpratt/rust that referenced this pull request Aug 17, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
Zalathar added a commit to Zalathar/rust that referenced this pull request Aug 18, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
bors added a commit that referenced this pull request Aug 18, 2025
Rollup of 19 pull requests

Successful merges:

 - #140956 (`impl PartialEq<{str,String}> for {Path,PathBuf}`)
 - #141744 (Stabilize `ip_from`)
 - #144804 (Don't warn on never to any `as` casts as unreachable)
 - #144983 (Rehome 37 `tests/ui/issues/` tests to other subdirectories under `tests/ui/`)
 - #145025 (run spellcheck as a tidy extra check in ci)
 - #145041 (rework GAT borrowck limitation error)
 - #145243 (take attr style into account in diagnostics)
 - #145359 (Fix bug where `rustdoc-js` tester would not pick the right `search.js` file if there is more than one)
 - #145429 (Couple of codegen_fn_attrs improvements)
 - #145452 (Do not strip binaries in bootstrap everytime if they are unchanged)
 - #145486 (Fix `unicode_data.rs` mention message)
 - #145489 (library: Migrate from `cfg_if` to `cfg_select`)
 - #145493 (remove `should_render` in `PrintAttribute` derive)
 - #145500 (Port must_use to the new target checking)
 - #145505 (Simplify span caches)
 - #145511 (Rust build fails on OpenBSD after using file_lock feature)
 - #145516 (Weekly `cargo update`)
 - #145533 (Reorder `lto` options from most to least optimizing)
 - #145550 (Avoid using `()` in `derive(From)` output.)

r? `@ghost`
`@rustbot` modify labels: rollup
Zalathar added a commit to Zalathar/rust that referenced this pull request Aug 18, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
Zalathar added a commit to Zalathar/rust that referenced this pull request Aug 19, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
Zalathar added a commit to Zalathar/rust that referenced this pull request Aug 19, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
Zalathar added a commit to Zalathar/rust that referenced this pull request Aug 19, 2025
…r=compiler-errors

Don't warn on never to any `as` casts as unreachable

I'm doing this while being sleep deprived on a night train, let's hope this is coherent.

Fixes rust-lang#67227
bors added a commit that referenced this pull request Aug 19, 2025
Rollup of 19 pull requests

Successful merges:

 - #140956 (`impl PartialEq<{str,String}> for {Path,PathBuf}`)
 - #141744 (Stabilize `ip_from`)
 - #142681 (Remove the `#[no_sanitize]` attribute in favor of `#[sanitize(xyz = "on|off")]`)
 - #142871 (Trivial improve doc for transpose )
 - #144252 (Do not copy .rmeta files into the sysroot of the build compiler during check of rustc/std)
 - #144476 (rustdoc-search: search backend with partitioned suffix tree)
 - #144567 (Fix RISC-V Test Failures in ./x test for Multiple Codegen Cases)
 - #144804 (Don't warn on never to any `as` casts as unreachable)
 - #144960 ([RTE-513] Ignore sleep_until test on SGX)
 - #145013 (overhaul `&mut` suggestions in borrowck errors)
 - #145041 (rework GAT borrowck limitation error)
 - #145243 (take attr style into account in diagnostics)
 - #145405 (cleanup: use run_in_tmpdir in run-make/rustdoc-scrape-examples-paths)
 - #145432 (cg_llvm: Small cleanups to `owned_target_machine`)
 - #145484 (Remove `LlvmArchiveBuilder` and supporting code/bindings)
 - #145557 (Fix uplifting in `Assemble` step)
 - #145563 (Remove the `From` derive macro from prelude)
 - #145565 (Improve context of bootstrap errors in CI)
 - #145584 (interpret: avoid forcing all integer newtypes into memory during clear_provenance)

Failed merges:

 - #145359 (Fix bug where `rustdoc-js` tester would not pick the right `search.js` file if there is more than one)
 - #145573 (Add an experimental unsafe(force_target_feature) attribute.)

r? `@ghost`
`@rustbot` modify labels: rollup
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. F-never_type `#![feature(never_type)]` finished-final-comment-period The final comment period is finished for this PR / Issue. I-lang-radar Items that are on lang's radar and will need eventual work or consideration. L-unreachable_code Lint: unreachable_code S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-lang Relevant to the language team to-announce Announce this issue on triage meeting
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Casting or adding type ascription to panic!() triggers unreachable_code
9 participants