Hi Benno, On Thu, Sep 12, 2024 at 11:08 AM Benno Lossin <benno.lossin@xxxxxxxxx> wrote: > > On 12.09.24 18:06, Sami Tolvanen wrote: > > > > I thought about this a bit and I wonder if we need a separate > > mechanism for that, or is it sufficient to just #define any additional > > hidden values you want to add instead of including them in the enum? > > > > enum e { > > A, > > B, > > #define C (B + 1) > > #define D (C + 1) > > }; > > > > > > Do you see any issues with this approach? I think Clang would complain > > about this with -Wassign-enum, but I'm not sure if we even enable that > > in the kernel, and as long as you don't overflow the underlying type, > > which is a requirement for not breaking the ABI anyway, it should be > > fine. > > Rust has problems with `#define`-style enums, because bindgen (the tool > that generates definitions for Rust to be able to call C code) isn't > able to convert them to Rust enums. > > So if you can come up with an approach that allows you to continue to > use C enums instead of `#define`, we would appreciate that, since it > would make our lives a lot easier. That's an interesting point. Is the problem that you cannot assign arbitrary values to the Rust enum that bindgen generates, or is using a #define the problem? We could probably just make the hidden enum values visible to bindgen only if needed. Sami