1
linux/rust/macros
Benno Lossin 52b7bb46ae rust: macros: replace Self with the concrete type in #[pin_data]
When using `#[pin_data]` on a struct that used `Self` in the field
types, a type error would be emitted when trying to use `pin_init!`.
Since an internal type would be referenced by `Self` instead of the
defined struct.

This patch fixes this issue by replacing all occurrences of `Self` in
the `#[pin_data]` macro with the concrete type circumventing the issue.
Since rust allows type definitions inside of blocks, which are
expressions, the macro also checks for these and emits a compile error
when it finds `trait`, `enum`, `union`, `struct` or `impl`. These
keywords allow creating new `Self` contexts, which conflicts with the
current implementation of replacing every `Self` ident. If these were
allowed, some `Self` idents would be replaced incorrectly.

Signed-off-by: Benno Lossin <benno.lossin@proton.me>
Reported-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
Reviewed-by: Gary Guo <gary@garyguo.net>
Link: https://lore.kernel.org/r/20230424081112.99890-3-benno.lossin@proton.me
[ Added newline in commit message ]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
2023-05-31 18:53:09 +02:00
..
concat_idents.rs
helpers.rs rust: macros: refactor generics parsing of #[pin_data] into its own function 2023-05-31 18:53:09 +02:00
lib.rs rust: init: add PinnedDrop trait and macros 2023-04-12 18:41:05 +02:00
module.rs rust: error: Rename to_kernel_errno() -> to_errno() 2023-04-12 18:41:04 +02:00
pin_data.rs rust: macros: replace Self with the concrete type in #[pin_data] 2023-05-31 18:53:09 +02:00
pinned_drop.rs rust: init: add PinnedDrop trait and macros 2023-04-12 18:41:05 +02:00
quote.rs rust: macros: fix usage of #[allow] in quote! 2023-05-31 18:53:09 +02:00
vtable.rs rust: macros: add #[vtable] proc macro 2022-12-04 01:59:15 +01:00