From f26f2f22c6d16d6019fbd1248681e57a1a533bd3 Mon Sep 17 00:00:00 2001 From: Luiz Georg Date: Fri, 10 Jul 2026 17:20:31 +0100 Subject: [PATCH] rust: pin-init: internal: error on duplicate `#[pin]` attribute Duplicated `#[pin]` has no effect, thus error if misused. Reported-by: Mohamad Alsadhan Closes: https://github.com/Rust-for-Linux/pin-init/issues/119 Signed-off-by: Luiz Georg Link: https://patch.msgid.link/20260710-pin-init-sync-v1-1-8fa16cde87ae@garyguo.net [ Reworded commit message, and change the logic so code generation still continue after reporting error - Gary ] Signed-off-by: Gary Guo --- rust/pin-init/internal/src/pin_data.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/rust/pin-init/internal/src/pin_data.rs b/rust/pin-init/internal/src/pin_data.rs index 9fbbd25bcaac..263f67300727 100644 --- a/rust/pin-init/internal/src/pin_data.rs +++ b/rust/pin-init/internal/src/pin_data.rs @@ -85,7 +85,10 @@ pub(crate) fn pin_data( .map(|field| { let len = field.attrs.len(); field.attrs.retain(|a| !a.path().is_ident("pin")); - let pinned = len != field.attrs.len(); + let pinned_count = len - field.attrs.len(); + if pinned_count > 1 { + dcx.error(&field, "#[pin] attribute specified more than once"); + } let cfg_attrs = field .attrs @@ -95,7 +98,7 @@ pub(crate) fn pin_data( FieldInfo { field: &*field, - pinned, + pinned: pinned_count != 0, cfg_attrs, } })