Skip to content

Don't special-case ! in stability checks anymore - #162162

Merged
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
GrigorenkoPV:never-is-now
Sep 3, 2026
Merged

Don't special-case ! in stability checks anymore#162162
rust-bors[bot] merged 2 commits into
rust-lang:mainfrom
GrigorenkoPV:never-is-now

Conversation

@GrigorenkoPV

@GrigorenkoPV GrigorenkoPV commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Two instances of special-casing:

Since then, in #103239 (just a week ago, on track to be part of Rust v1.100), ! was stabilized, so the first check became wrong and the second became redundant. Let's remove them.

Fixes #162116.

@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 Sep 1, 2026
@rustbot

rustbot commented Sep 1, 2026

Copy link
Copy Markdown
Collaborator

r? @mejrs

rustbot has assigned @mejrs.
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

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: compiler
  • compiler expanded to 75 candidates
  • Random selection from 21 candidates

@GrigorenkoPV GrigorenkoPV changed the title Don't special-case ! in stability checks Don't special-case ! in stability checks anymore Sep 1, 2026

@WaffleLapkin WaffleLapkin left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

r=me with green ci

View changes since this review

@WaffleLapkin WaffleLapkin self-assigned this Sep 1, 2026

@mejrs mejrs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I now realize impls for function pointers

#[unstable(feature = "b", issue = "none")]
impl Trait for fn(!) {}

also emit no diagnostic, can you add a test for it?

I think this works correctly but it's untested, can you add one as well?

#[unstable(feature = "b", issue = "none")]
impl Trait for fn(UnstableType) {}

View changes since this review

@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 Sep 1, 2026
@rustbot

rustbot commented Sep 1, 2026

Copy link
Copy Markdown
Collaborator

Reminder, once the PR becomes ready for a review, use @rustbot ready.

@GrigorenkoPV

Copy link
Copy Markdown
Contributor Author

@rustbot ready

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Sep 1, 2026
@GrigorenkoPV
GrigorenkoPV requested a review from mejrs September 1, 2026 22:32

@mejrs mejrs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@bors r=mejrs,WaffleLapkin

View changes since this review

@rust-bors

rust-bors Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 3cc3682 has been approved by mejrs,WaffleLapkin

It is now in the queue for this repository.

@rust-bors rust-bors Bot 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-review Status: Awaiting review from the assignee but also interested parties. labels Sep 2, 2026
Zalathar added a commit to Zalathar/rust that referenced this pull request Sep 2, 2026
…,WaffleLapkin

Don't special-case `!` in stability checks anymore

Two instances of special-casing:
- one for `!`, added in rust-lang#76538 (nearly 6 years ago, Rust v1.48), back when `!` was unstable,
- one for `fn() -> !` in rust-lang#103239 (nearly 4 years ago, Rust v1.66), because `-> !` was allowed on stable even with `!` being unstable.

Since then, in rust-lang#103239 (just a week ago, on track to be part of Rust v1.100), `!` was stabilized, so the first check became wrong and the second became redundant. Let's remove them.

Fixes rust-lang#162116.
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Sep 2, 2026
…,WaffleLapkin

Don't special-case `!` in stability checks anymore

Two instances of special-casing:
- one for `!`, added in rust-lang#76538 (nearly 6 years ago, Rust v1.48), back when `!` was unstable,
- one for `fn() -> !` in rust-lang#103239 (nearly 4 years ago, Rust v1.66), because `-> !` was allowed on stable even with `!` being unstable.

Since then, in rust-lang#103239 (just a week ago, on track to be part of Rust v1.100), `!` was stabilized, so the first check became wrong and the second became redundant. Let's remove them.

Fixes rust-lang#162116.
Zalathar added a commit to Zalathar/rust that referenced this pull request Sep 2, 2026
…,WaffleLapkin

Don't special-case `!` in stability checks anymore

Two instances of special-casing:
- one for `!`, added in rust-lang#76538 (nearly 6 years ago, Rust v1.48), back when `!` was unstable,
- one for `fn() -> !` in rust-lang#103239 (nearly 4 years ago, Rust v1.66), because `-> !` was allowed on stable even with `!` being unstable.

Since then, in rust-lang#103239 (just a week ago, on track to be part of Rust v1.100), `!` was stabilized, so the first check became wrong and the second became redundant. Let's remove them.

Fixes rust-lang#162116.
Zalathar added a commit to Zalathar/rust that referenced this pull request Sep 2, 2026
…,WaffleLapkin

Don't special-case `!` in stability checks anymore

Two instances of special-casing:
- one for `!`, added in rust-lang#76538 (nearly 6 years ago, Rust v1.48), back when `!` was unstable,
- one for `fn() -> !` in rust-lang#103239 (nearly 4 years ago, Rust v1.66), because `-> !` was allowed on stable even with `!` being unstable.

Since then, in rust-lang#103239 (just a week ago, on track to be part of Rust v1.100), `!` was stabilized, so the first check became wrong and the second became redundant. Let's remove them.

Fixes rust-lang#162116.
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Sep 2, 2026
…,WaffleLapkin

Don't special-case `!` in stability checks anymore

Two instances of special-casing:
- one for `!`, added in rust-lang#76538 (nearly 6 years ago, Rust v1.48), back when `!` was unstable,
- one for `fn() -> !` in rust-lang#103239 (nearly 4 years ago, Rust v1.66), because `-> !` was allowed on stable even with `!` being unstable.

Since then, in rust-lang#103239 (just a week ago, on track to be part of Rust v1.100), `!` was stabilized, so the first check became wrong and the second became redundant. Let's remove them.

Fixes rust-lang#162116.
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Sep 2, 2026
…,WaffleLapkin

Don't special-case `!` in stability checks anymore

Two instances of special-casing:
- one for `!`, added in rust-lang#76538 (nearly 6 years ago, Rust v1.48), back when `!` was unstable,
- one for `fn() -> !` in rust-lang#103239 (nearly 4 years ago, Rust v1.66), because `-> !` was allowed on stable even with `!` being unstable.

Since then, in rust-lang#103239 (just a week ago, on track to be part of Rust v1.100), `!` was stabilized, so the first check became wrong and the second became redundant. Let's remove them.

Fixes rust-lang#162116.
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Sep 2, 2026
…,WaffleLapkin

Don't special-case `!` in stability checks anymore

Two instances of special-casing:
- one for `!`, added in rust-lang#76538 (nearly 6 years ago, Rust v1.48), back when `!` was unstable,
- one for `fn() -> !` in rust-lang#103239 (nearly 4 years ago, Rust v1.66), because `-> !` was allowed on stable even with `!` being unstable.

Since then, in rust-lang#103239 (just a week ago, on track to be part of Rust v1.100), `!` was stabilized, so the first check became wrong and the second became redundant. Let's remove them.

Fixes rust-lang#162116.
rust-bors Bot pushed a commit that referenced this pull request Sep 2, 2026
…uwer

Rollup of 23 pull requests

Successful merges:

 - #162164 (Revert "Implement Debug for C-like enums with a concatenated string")
 - #160564 (volatile: allow accesses to non-AM memory to trap)
 - #161579 (suggest calling a fn item used as the iterator of a `for` loop)
 - #162044 (coverage: Resolve spans to file-coordinates in a separate step)
 - #162120 (Introduce `PerOwnerLoweringState`)
 - #162151 (Test itanium mangling of `f16` and `f128`)
 - #162162 (Don't special-case `!` in stability checks anymore)
 - #162181 (Remove wrong UnusedBraces lint for iterator loop in edition 2024 )
 - #162187 (Rename `thir::ExprKind::Use` to `ValueExpr`)
 - #158401 (mgca: Don't ICE when evaluating ValTrees that contain error constants)
 - #159873 (fuchsia: Add safestack as a supported sanitizer for x86_64 fuchsia)
 - #161847 (Preserve visibility in nested macro import suggestions)
 - #161972 (Improve tests for `#[track_caller]` in async)
 - #162008 (Render the `box` pattern removal diagnostic more actionable & remove `box` expression recovery)
 - #162065 (std: don't reference `libc::O_NOFOLLOW` on VxWorks in `set_perm_nofollow`)
 - #162076 (docs(num): clarify conditions under which error occurs in `impl TryFrom<int> for int`)
 - #162152 (Revert "retrieve supported GCC targets from the sysroot")
 - #162153 (Prefer `LLVMGetVersion` for runtime info)
 - #162168 (fix ICE in project_goals/inherent)
 - #162171 (Explain LoongArch f16 NaN-boxing in inline asm)
 - #162173 (fix supposedly unreachable `bug!` being reachable)
 - #162191 (core: mark float `ClampBounds` methods as `#[inline]`)
 - #162199 (docs(time): clarify exact seconds for hour and minute)
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Sep 2, 2026
…,WaffleLapkin

Don't special-case `!` in stability checks anymore

Two instances of special-casing:
- one for `!`, added in rust-lang#76538 (nearly 6 years ago, Rust v1.48), back when `!` was unstable,
- one for `fn() -> !` in rust-lang#103239 (nearly 4 years ago, Rust v1.66), because `-> !` was allowed on stable even with `!` being unstable.

Since then, in rust-lang#103239 (just a week ago, on track to be part of Rust v1.100), `!` was stabilized, so the first check became wrong and the second became redundant. Let's remove them.

Fixes rust-lang#162116.
rust-bors Bot pushed a commit that referenced this pull request Sep 3, 2026
Rollup of 23 pull requests

Successful merges:

 - #157808 (sanitizers: Implement support for the sanitize ignorelist)
 - #160564 (volatile: allow accesses to non-AM memory to trap)
 - #161579 (suggest calling a fn item used as the iterator of a `for` loop)
 - #162044 (coverage: Resolve spans to file-coordinates in a separate step)
 - #162120 (Introduce `PerOwnerLoweringState`)
 - #162151 (Test itanium mangling of `f16` and `f128`)
 - #162162 (Don't special-case `!` in stability checks anymore)
 - #162181 (Remove wrong UnusedBraces lint for iterator loop in edition 2024 )
 - #162187 (Rename `thir::ExprKind::Use` to `ValueExpr`)
 - #158401 (mgca: Don't ICE when evaluating ValTrees that contain error constants)
 - #159873 (fuchsia: Add safestack as a supported sanitizer for x86_64 fuchsia)
 - #161847 (Preserve visibility in nested macro import suggestions)
 - #161972 (Improve tests for `#[track_caller]` in async)
 - #162008 (Render the `box` pattern removal diagnostic more actionable & remove `box` expression recovery)
 - #162065 (std: don't reference `libc::O_NOFOLLOW` on VxWorks in `set_perm_nofollow`)
 - #162076 (docs(num): clarify conditions under which error occurs in `impl TryFrom<int> for int`)
 - #162152 (Revert "retrieve supported GCC targets from the sysroot")
 - #162153 (Prefer `LLVMGetVersion` for runtime info)
 - #162168 (fix ICE in project_goals/inherent)
 - #162171 (Explain LoongArch f16 NaN-boxing in inline asm)
 - #162173 (fix supposedly unreachable `bug!` being reachable)
 - #162191 (core: mark float `ClampBounds` methods as `#[inline]`)
 - #162199 (docs(time): clarify exact seconds for hour and minute)
Zalathar added a commit to Zalathar/rust that referenced this pull request Sep 3, 2026
…,WaffleLapkin

Don't special-case `!` in stability checks anymore

Two instances of special-casing:
- one for `!`, added in rust-lang#76538 (nearly 6 years ago, Rust v1.48), back when `!` was unstable,
- one for `fn() -> !` in rust-lang#103239 (nearly 4 years ago, Rust v1.66), because `-> !` was allowed on stable even with `!` being unstable.

Since then, in rust-lang#103239 (just a week ago, on track to be part of Rust v1.100), `!` was stabilized, so the first check became wrong and the second became redundant. Let's remove them.

Fixes rust-lang#162116.
rust-bors Bot pushed a commit that referenced this pull request Sep 3, 2026
Rollup of 29 pull requests

Successful merges:

 - #161694 (add `Complex` ABI run-make test)
 - #162014 (Move more `rustdoc-html` tests using `--test` into the right folder)
 - #162164 (Revert "Implement Debug for C-like enums with a concatenated string")
 - #160564 (volatile: allow accesses to non-AM memory to trap)
 - #161579 (suggest calling a fn item used as the iterator of a `for` loop)
 - #162044 (coverage: Resolve spans to file-coordinates in a separate step)
 - #162120 (Introduce `PerOwnerLoweringState`)
 - #162132 (std: improve safety documentation in UNIX stack overflow code)
 - #162151 (Test itanium mangling of `f16` and `f128`)
 - #162162 (Don't special-case `!` in stability checks anymore)
 - #162181 (Remove wrong UnusedBraces lint for iterator loop in edition 2024 )
 - #162187 (Rename `thir::ExprKind::Use` to `ValueExpr`)
 - #158401 (mgca: Don't ICE when evaluating ValTrees that contain error constants)
 - #159873 (fuchsia: Add safestack as a supported sanitizer for x86_64 fuchsia)
 - #161847 (Preserve visibility in nested macro import suggestions)
 - #161951 (Windows: add fallback if `canonicalize` fails)
 - #161972 (Improve tests for `#[track_caller]` in async)
 - #162008 (Render the `box` pattern removal diagnostic more actionable & remove `box` expression recovery)
 - #162065 (std: don't reference `libc::O_NOFOLLOW` on VxWorks in `set_perm_nofollow`)
 - #162076 (docs(num): clarify conditions under which error occurs in `impl TryFrom<int> for int`)
 - #162152 (Revert "retrieve supported GCC targets from the sysroot")
 - #162153 (Prefer `LLVMGetVersion` for runtime info)
 - #162168 (fix ICE in project_goals/inherent)
 - #162171 (Explain LoongArch f16 NaN-boxing in inline asm)
 - #162173 (fix supposedly unreachable `bug!` being reachable)
 - #162180 (remove outdated next-solver FIXMEs)
 - #162191 (core: mark float `ClampBounds` methods as `#[inline]`)
 - #162195 (docs(time): clarify exact seconds for week and day)
 - #162199 (docs(time): clarify exact seconds for hour and minute)
rust-bors Bot pushed a commit that referenced this pull request Sep 3, 2026
…uwer

Rollup of 25 pull requests

Successful merges:

 - #161694 (add `Complex` ABI run-make test)
 - #162014 (Move more `rustdoc-html` tests using `--test` into the right folder)
 - #162164 (Revert "Implement Debug for C-like enums with a concatenated string")
 - #160564 (volatile: allow accesses to non-AM memory to trap)
 - #161579 (suggest calling a fn item used as the iterator of a `for` loop)
 - #162044 (coverage: Resolve spans to file-coordinates in a separate step)
 - #162120 (Introduce `PerOwnerLoweringState`)
 - #162132 (std: improve safety documentation in UNIX stack overflow code)
 - #162151 (Test itanium mangling of `f16` and `f128`)
 - #162162 (Don't special-case `!` in stability checks anymore)
 - #162181 (Remove wrong UnusedBraces lint for iterator loop in edition 2024 )
 - #162187 (Rename `thir::ExprKind::Use` to `ValueExpr`)
 - #158401 (mgca: Don't ICE when evaluating ValTrees that contain error constants)
 - #159873 (fuchsia: Add safestack as a supported sanitizer for x86_64 fuchsia)
 - #161135 (Add `f16` and `f128` inline ASM support for PowerPC)
 - #161847 (Preserve visibility in nested macro import suggestions)
 - #161972 (Improve tests for `#[track_caller]` in async)
 - #162008 (Render the `box` pattern removal diagnostic more actionable & remove `box` expression recovery)
 - #162065 (std: don't reference `libc::O_NOFOLLOW` on VxWorks in `set_perm_nofollow`)
 - #162076 (docs(num): clarify conditions under which error occurs in `impl TryFrom<int> for int`)
 - #162111 (Update mailmap for Will Crichton and Petr Hosek)
 - #162152 (Revert "retrieve supported GCC targets from the sysroot")
 - #162153 (Prefer `LLVMGetVersion` for runtime info)
 - #162168 (fix ICE in project_goals/inherent)
 - #162171 (Explain LoongArch f16 NaN-boxing in inline asm)
@rust-bors
rust-bors Bot merged commit 04abbba into rust-lang:main Sep 3, 2026
13 checks passed
@rustbot rustbot added this to the 1.100.0 milestone Sep 3, 2026
rust-bors Bot pushed a commit that referenced this pull request Sep 3, 2026
Rollup merge of #162162 - GrigorenkoPV:never-is-now, r=mejrs,WaffleLapkin

Don't special-case `!` in stability checks anymore

Two instances of special-casing:
- one for `!`, added in #76538 (nearly 6 years ago, Rust v1.48), back when `!` was unstable,
- one for `fn() -> !` in #103239 (nearly 4 years ago, Rust v1.66), because `-> !` was allowed on stable even with `!` being unstable.

Since then, in #103239 (just a week ago, on track to be part of Rust v1.100), `!` was stabilized, so the first check became wrong and the second became redundant. Let's remove them.

Fixes #162116.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

stability attribute checking assumes that ! is unstable

4 participants