On Fri, Aug 15, 2025 at 1:28 PM Jan Beulich <jbeul...@suse.com> wrote:
>
> On 15.08.2025 12:53, Andrew Cooper wrote:
> > On 15/08/2025 11:25 am, Jan Beulich wrote:
> >> On 15.08.2025 11:51, Andrew Cooper wrote:
> >>> On 15/08/2025 10:36 am, Jan Beulich wrote:
> >>>> On 15.08.2025 10:33, Nicola Vetrini wrote:
> >>>>> On 2025-08-15 10:17, Andrew Cooper wrote:
> >>>>>> On 15/08/2025 8:20 am, Nicola Vetrini wrote:
> >>>>>>> On 2025-08-15 00:25, Andrew Cooper wrote:
> >>>>>>>> In macros it is common to declare local variables using typeof(param)
> >>>>>>>> in order
> >>>>>>>> to ensure that side effects are only evaluated once.  A consequence
> >>>>>>>> of this is
> >>>>>>>> double textural expansion of the parameter, which can get out of hand
> >>>>>>>> very
> >>>>>>>> quickly with nested macros.
> >>>>>>>>
> >>>>>>>> In C23, the auto keyword has been repurposed to perform type
> >>>>>>>> inference.
> >>>>>>>>
> >>>>>>>> A GCC extension, __auto_type, is now avaialble in the new toolchain
> >>>>>>>> baseline
> >>>>>>>> and avoids the double textural expansion.
> >>>>>>>>
> >>>>>>>> Signed-off-by: Andrew Cooper <andrew.coop...@citrix.com>
> >>>>>>> Reviewed-by: Nicola Vetrini <nicola.vetr...@bugseng.com>
> >>>>>> Thankyou.
> >>>>>>
> >>>>>>>> diff --git a/xen/include/xen/compiler.h b/xen/include/xen/compiler.h
> >>>>>>>> index 88bf26bc5109..38ef5d82ad95 100644
> >>>>>>>> --- a/xen/include/xen/compiler.h
> >>>>>>>> +++ b/xen/include/xen/compiler.h
> >>>>>>>> @@ -64,6 +64,20 @@
> >>>>>>>>  # define asm_inline asm
> >>>>>>>>  #endif
> >>>>>>>>
> >>>>>>>> +/*
> >>>>>>>> + * In C23, the auto keyword has been repurposed to perform type
> >>>>>>>> inference.
> >>>>>>>> + *
> >>>>>>>> + * This behaviour is available via the __auto_type extension in
> >>>>>>>> supported
> >>>>>>>> + * toolchains.
> >>>>>>>> + *
> >>>>>>>> + *
> >>>>>>>> https://www.gnu.org/software/c-intro-and-ref/manual/html_node/Auto-Type.html
> >>>>>>>> + * https://clang.llvm.org/docs/LanguageExtensions.html#auto-type
> >>>>>>>> + */
> >>>>>>>> +#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 202311L
> >>>>>>>> +/* SAF-3-safe MISRA C Rule 20.4: Giving the keyword it's C23
> >>>>>>>> meaning. */
> >>>>>>>> +#define auto __auto_type
> >>>>>>>> +#endif
> >>>>>>>> +
> >>>>>>> A more detailed explanation should live in deviations.rst under this
> >>>>>>> bullet point
> >>>>>>>
> >>>>>>>    * - R20.4
> >>>>>>>      - The override of the keyword \"inline\" in xen/compiler.h is
> >>>>>>> present so
> >>>>>>>        that section contents checks pass when the compiler chooses not
> >>>>>>> to
> >>>>>>>        inline a particular function.
> >>>>>>>      - Comment-based deviation.
> >>>>>>>
> >>>>>>> as described in the SAF entry:
> >>>>>>>
> >>>>>>>         {
> >>>>>>>             "id": "SAF-3-safe",
> >>>>>>>             "analyser": {
> >>>>>>>                 "eclair": "MC3A2.R20.4"
> >>>>>>>             },
> >>>>>>>             "name": "MC3A2.R20.4: allow the definition of a macro with
> >>>>>>> the same name as a keyword in some special cases",
> >>>>>>>             "text": "The definition of a macro with the same name as a
> >>>>>>> keyword can be useful in certain configurations to improve the
> >>>>>>> guarantees that can be provided by Xen. See docs/misra/deviations.rst
> >>>>>>> for a precise rationale for all such cases."
> >>>>>>>         },
> >>>>>> Ah right.  What about this:
> >>>>>>
> >>>>>> "Xen does not use the \"auto\" keyword as a storage qualifier.  The
> >>>>>> override of the keyword \"auto\" in xen/compiler.h is to give it it's
> >>>>>> C23 behaviour of type inference."
> >>>>>>
> >>>>>> ?
> >>>>> Seems good to me. Maybe this should be spelled out in ./CODING_STYLE as
> >>>>> well, so that newcomers don't trip over this?
> >>>> I'm not sure newcomers would look there, but in the absence of any better
> >>>> place that's perhaps indeed where to mention this.
> >>> How about this:
> >>>
> >>> diff --git a/CODING_STYLE b/CODING_STYLE
> >>> index 7bf3848444ad..e33b9d1170cf 100644
> >>> --- a/CODING_STYLE
> >>> +++ b/CODING_STYLE
> >>> @@ -129,6 +129,10 @@ Fixed width types should only be used when a fixed 
> >>> width quantity is
> >>>  meant (which for example may be a value read from or to be written to a
> >>>  register).
> >>>
> >>> +Macros which otherwise would use "typeof(arg) newarg =" to avoid double
> >>> +evaluation of side effects should use "auto newarg =" per it's C23 
> >>> behaviour,
> >>> +to also avoid double textural expansion.
> >>> +
> >>>  Especially with pointer types, whenever the pointed to object is not
> >>>  (supposed to be) modified, qualify the pointed to type with "const".
> >> That doesn't focus on the pitfall though, in that people shouldn't be using
> >> the "auto" keyword (except in said cases).
> >
> > /sigh, this is why noone does patches to CODING_STYLE.
> >
> > If you don't like the wording, propose some wording that you do like.
> >
> > Or I will commit the patch without this hunk, because I'm not going to
> > get drawn into the cycle of blind guessing that every change to
> > CODING_STYLE seems to get caught in.
>
> I don't care about the wording; what I do care about is to get the caveat
> across. Maybe:
>
> '"auto" isn't used in its traditional sense, but rather with its C23 meaning.
>  Such uses are intended to be limited to macro-local variables.'
>

Why limiting to macros?

> Jan
>

Frediano

Reply via email to