mirror_ubuntu-kernels/rust/kernel
Benno Lossin 22eed6068d rust: macros: allow generic parameter default values in #[pin_data]
Add support for generic parameters defaults in `#[pin_data]` by using
the newly introduced `decl_generics` instead of the `impl_generics`.

Before this would not compile:

    #[pin_data]
    struct Foo<const N: usize = 0> {
        // ...
    }

because it would be expanded to this:

    struct Foo<const N: usize = 0> {
        // ...
    }

    const _: () = {
        struct __ThePinData<const N: usize = 0> {
            __phantom: ::core::marker::PhantomData<fn(Foo<N>) -> Foo<N>>,
        }
        impl<const N: usize = 0> ::core::clone::Clone for __ThePinData<N> {
            fn clone(&self) -> Self {
                *self
            }
        }

        // [...] rest of expansion omitted
    };

The problem is with the `impl<const N: usize = 0>`, since that is
invalid Rust syntax. It should not mention the default value at all,
since default values only make sense on type definitions.

The new `impl_generics` do not contain the default values, thus
generating correct Rust code.

This is used by the next commit that puts `#[pin_data]` on
`kernel::workqueue::Work`.

Signed-off-by: Benno Lossin <benno.lossin@proton.me>
Reviewed-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
Reviewed-by: Gary Guo <gary@garyguo.net>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Tested-by: Alice Ryhl <aliceryhl@google.com>
Link: https://lore.kernel.org/r/20240309155243.482334-2-benno.lossin@proton.me
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
2024-04-07 22:03:42 +02:00
..
init rust: macros: allow generic parameter default values in #[pin_data] 2024-04-07 22:03:42 +02:00
net rust: phy: use VTABLE_DEFAULT_ERROR 2024-01-27 14:28:00 +00:00
sync rust: kernel: stop using ptr_metadata feature 2024-02-18 21:22:27 +01:00
allocator.rs rust: kernel: fix multiple typos in documentation 2024-02-18 21:22:27 +01:00
build_assert.rs rust: upgrade to Rust 1.68.2 2023-05-31 17:35:03 +02:00
error.rs rust: error: improve unsafe code in example 2024-02-18 21:22:27 +01:00
init.rs rust: kernel: add reexports for macros 2024-02-18 21:22:27 +01:00
ioctl.rs rust: kernel: mark code fragments in docs with backticks 2024-02-18 21:22:27 +01:00
kunit.rs rust: support srctree-relative links 2023-12-21 20:54:17 +01:00
lib.rs rust: upgrade to Rust 1.77.1 2024-03-29 20:12:30 +01:00
net.rs rust: core abstractions for network PHY drivers 2023-12-15 09:35:50 +00:00
prelude.rs rust: add derive macro for Zeroable 2023-08-21 14:31:48 +02:00
print.rs rust: support srctree-relative links 2023-12-21 20:54:17 +01:00
static_assert.rs rust: static_assert: add static_assert! macro 2022-12-04 01:59:16 +01:00
std_vendor.rs rust: upgrade to Rust 1.68.2 2023-05-31 17:35:03 +02:00
str.rs rust: str: add {make,to}_{upper,lower}case() to CString 2024-04-02 17:41:56 +02:00
sync.rs rust: kernel: add reexports for macros 2024-02-18 21:22:27 +01:00
task.rs rust: kernel: mark code fragments in docs with backticks 2024-02-18 21:22:27 +01:00
time.rs rust: time: add msecs to jiffies conversion 2024-01-28 19:50:48 +01:00
types.rs rust: types: add try_from_foreign() method 2024-02-25 19:17:31 +01:00
workqueue.rs workqueue: Changes for v6.9 2024-03-11 12:50:42 -07:00