[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 01/11] Compiler Attributes: Add __require_explicit_initialization macro



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@xxxxxxxxxx>
> ---
>  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
> 




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.