On 10/14/26 00:39, Ian Rogers wrote: > Clang supports the 'require_explicit_initialization' attribute on struct > fields to indicate that a field must be initialized explicitly by the > user when the object is constructed. When an aggregate initializer or > uninitialized variable omits an annotated field, Clang emits a > -Wuninitialized-explicit-init warning (enabled by default). > > Add the __require_explicit_initialization macro to > include/linux/compiler_attributes.h (which is included by > include/linux/compiler_types.h and include/linux/compiler.h) so kernel > structs with error-prone initialization (such as mandatory callbacks or > cleanup handlers) can enforce explicit initialization at compile time, > as discussed at the Linux Plumbers Conference.
Oh yes please! That is so nice to have, I have like halve a dozen use cases for this in the stuff I'm maintaining just of hand :D I'm not an expert for compiler interaction so I can't really review this patch, but please leave me a note when that is merged. Thanks a lot for that, Christian. > > Also teach Sphinx (Documentation/conf.py), kernel-doc > (tools/lib/python/kdoc/xforms_lists.py), and checkpatch.pl about the new > attribute macro. > > Link: https://lpc.events/event/20/contributions/2392/ > Assisted-by: Antigravity:gemini-3.1-pro > Signed-off-by: Ian Rogers <[email protected]> > --- > Documentation/conf.py | 1 + > include/linux/compiler_attributes.h | 11 +++++++++++ > scripts/checkpatch.pl | 1 + > tools/lib/python/kdoc/xforms_lists.py | 1 + > 4 files changed, 14 insertions(+) > > diff --git a/Documentation/conf.py b/Documentation/conf.py > index 5ab26ce89daf..3e5cb9ca0970 100644 > --- a/Documentation/conf.py > +++ b/Documentation/conf.py > @@ -203,6 +203,7 @@ c_id_attributes = [ > "__noreturn", > "__packed", > "__pure", > + "__require_explicit_initialization", > "__section", > "__always_unused", > "__maybe_unused", > diff --git a/include/linux/compiler_attributes.h > b/include/linux/compiler_attributes.h > index 476c4c560d17..60522ab80c5a 100644 > --- a/include/linux/compiler_attributes.h > +++ b/include/linux/compiler_attributes.h > @@ -322,6 +322,17 @@ > */ > #define __pure __attribute__((__pure__)) > > +/* > + * Optional: not supported by gcc > + * > + * clang: > https://clang.llvm.org/docs/AttributeReference.html#require-explicit-initialization > + */ > +#if __has_attribute(__require_explicit_initialization__) > +# define __require_explicit_initialization > __attribute__((__require_explicit_initialization__)) > +#else > +# define __require_explicit_initialization > +#endif > + > /* > * gcc: > https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-section-function-attribute > * gcc: > https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html#index-section-variable-attribute > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl > index 8a7787d228a6..4a3ae6b0100a 100755 > --- a/scripts/checkpatch.pl > +++ b/scripts/checkpatch.pl > @@ -6871,6 +6871,7 @@ sub process { > "noreturn" => > "__noreturn", > "packed" => "__packed", > "pure" => "__pure", > + "require_explicit_initialization" => > "__require_explicit_initialization", > "section" => > "__section", > "used" => "__used", > "weak" => "__weak" > diff --git a/tools/lib/python/kdoc/xforms_lists.py > b/tools/lib/python/kdoc/xforms_lists.py > index e3dda2fe8a53..32066fbbe763 100644 > --- a/tools/lib/python/kdoc/xforms_lists.py > +++ b/tools/lib/python/kdoc/xforms_lists.py > @@ -36,6 +36,7 @@ class CTransforms: > (CMatch("CRYPTO_MINALIGN_ATTR"), ""), > (CMatch("__private"), ""), > (CMatch("__rcu"), ""), > + (CMatch("__require_explicit_initialization"), ""), > (CMatch("____cacheline_aligned_in_smp"), ""), > (CMatch("____cacheline_aligned"), ""), > (CMatch("__cacheline_group_(?:begin|end)"), ""), > -- > 2.56.0.385.gd3acb90ef8-goog >

