Re: [PATCH net-next v6 3/5] rust: add second `bindgen` pass for enum exhaustiveness checking
From: Benno Lossin <hidden>
Date: 2023-10-25 07:38:51
Also in:
rust-for-linux
On 25.10.23 03:33, FUJITA Tomonori wrote:
On Tue, 24 Oct 2023 16:29:16 +0000 Benno Lossin [off-list ref] wrote:quoted
On 24.10.23 02:58, FUJITA Tomonori wrote:quoted
From: Miguel Ojeda <ojeda@kernel.org>I think this commit message should also explain what it is doing and not only the error below.Looks ok? This patch makes sure that the C's enum phy_state is sync with Rust sides. If not, compiling fails. Note that this is a temporary solution. It will be replaced with bindgen when it supports generating the enum conversion code.
The solution that is implemented does not only work for `phy_state`, but also other enums (you still have to manually add them). Also it would be good to say that the error below is the error that one will receive when the enum is out of sync/not all C variants are in Rust. -- Cheers, Benno
error[E0005]: refutable pattern in function argument
--> rust/bindings/bindings_enum_check.rs:29:6
|
29 | (phy_state::PHY_DOWN
| ______^
30 | | | phy_state::PHY_READY
31 | | | phy_state::PHY_HALTED
32 | | | phy_state::PHY_ERROR
... |
35 | | | phy_state::PHY_NOLINK
36 | | | phy_state::PHY_CABLETEST): phy_state,
| |______________________________^ pattern `phy_state::PHY_NEW` not covered
|
note: `phy_state` defined here
--> rust/bindings/bindings_generated_enum_check.rs:60739:10
|
60739 | pub enum phy_state {
| ^^^^^^^^^
...
60745 | PHY_NEW = 5,
| ------- not covered
= note: the matched value is of type `phy_state`