Skip to content

fix build with latest nightly - #171

Closed
mqqz wants to merge 1 commit into
Rust-for-Linux:mainfrom
mqqz:fix-ci
Closed

fix build with latest nightly#171
mqqz wants to merge 1 commit into
Rust-for-Linux:mainfrom
mqqz:fix-ci

Conversation

@mqqz

@mqqz mqqz commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Binding a value of an uninhabited type now makes everything following it unreachable. In stack_pin_init! the Infallible annotation is such a binding, so the match x {} after it is reported as unreachable and -Dwarnings turns that into an error.

Annotate the Result instead of the error value, which requires the initializer to be infallible just the same but has nothing following it.

Infallible is also printed as ! in diagnostics now, so bless the two tests that show it.

Binding a value of an uninhabited type now makes everything following it
unreachable. In `stack_pin_init!` the `Infallible` annotation is such a
binding, so the `match x {}` after it is reported as unreachable and
`-Dwarnings` turns that into an error.

Annotate the `Result` instead of the error value, which requires the
initializer to be infallible just the same but has nothing following it.

`Infallible` is also printed as `!` in diagnostics now, so bless the two
tests that show it.

Signed-off-by: Mohamad Alsadhan <mo@sdhn.cc>
@nbdd0121

Copy link
Copy Markdown
Member

I created #172 as an alternative fix which I think is clearer.

@mqqz

mqqz commented Aug 28, 2026

Copy link
Copy Markdown
Contributor Author

I created #172 as an alternative fix which I think is clearer.

Nice, I'll rebase #155 when it lands.

@nbdd0121 nbdd0121 closed this in 0cae953 Aug 31, 2026
ojeda pushed a commit to Rust-for-Linux/linux that referenced this pull request Aug 31, 2026
In Rust 1.100.0, `Infallible` will become an alias of `!`. The let
binding in `stack_pin_init` will thus become unreachable and produce
an "unreachable expression" warning for the subsequent match, and thus
will fail a `-Dwarnings` build. For this macro, all we need to know is
that the error type is uninhabited, so replace this with an irrefutable
pattern instead.

[ The error looks like (dummy reproducer):

      error: unreachable expression
         --> rust/kernel/sync.rs:177:5
          |
      177 |     pin_init::stack_pin_init!(let num = 42u32);
          |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          |     |
          |     unreachable expression
          |     any code following this expression is unreachable
          |
          = note: `-D unreachable-code` implied by `-D warnings`
          = help: to override `-D warnings` add `#[allow(unreachable_code)]`
          = note: this error originates in the macro `pin_init::stack_pin_init` (in Nightly builds, run with -Z macro-backtrace for more info)

    - Miguel ]

Reported-by: Mohamad Alsadhan <mo@sdhn.cc>
Closes: Rust-for-Linux/pin-init#171
Signed-off-by: Gary Guo <gary@garyguo.net>
Cc: stable@vger.kernel.org # Needed in 7.1.y and later (for 6.12.y and 6.18.y a custom one is needed).
Link: https://patch.msgid.link/20260828155033.2101924-1-gary@kernel.org
[ Reworded for typos. - Miguel ]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants