[PATCH 01/11] Compiler Attributes: Add __require_explicit_initialization macro
Christian König
christian.koenig at amd.com
Wed Oct 14 00:27:06 PDT 2026
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 <irogers at google.com>
> ---
> 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
>
More information about the linux-mtd
mailing list