Hi Julius

Sounds good to me.
Btw a similar discussion happened on the LKML.
https://lore.kernel.org/lkml/CAHk-=whFKYMrF6euVvziW+drw7-yi1pYdf=uccnzj8k09do...@mail.gmail.com/
is the upshot,
which is complete agreement with what you said.

Kind regards
Arthur

On Fri, Apr 15, 2022 at 11:30 PM Julius Werner <[email protected]> wrote:

> Hi,
>
> We occasionally get into discussions in code reviews when code uses a
> GCC extension, and a reviewer asks that it be rewritten to be C
> standard compliant instead. A recent example was on the use of `void
> *` arithmetic in this patch
>
> https://review.coreboot.org/c/coreboot/+/56791/9/src/soc/mediatek/common/pcie.c#109
> , and there have been others in the past. I would like to come to a
> consensus on this topic here and add some blurb to the coding style
> document so we don't have to rehash the same discussion over and over
> again.
>
> In my opinion, GCC extensions are absolutely necessary for coreboot
> development and there should be no reason to reject them. Inline
> assembly is the most obvious example -- without it we would have to
> convert a ton of static inline functions that wrap special
> instructions into full linker-level functions in a separate assembly
> file instead, and eat all the unnecessary function call overhead that
> comes with that. Others enable such important features that it would
> become much more dangerous and cumbersome to develop without them --
> most importantly statement expressions
> (https://gcc.gnu.org/onlinedocs/gcc-11.2.0/gcc/Statement-Exprs.html)
> which are necessary to write things like double-evaluation safe
> macros, expression-assertions like dead_code_t() and simple
> convenience shortcuts like wait_us(). And some extensions just offer a
> small bit of convenience to reduce boilerplate -- for example, `void
> *` arithmetic just tends to be useful to prevent cluttering the code
> with a bunch of unnecessary casts to other types that don't add any
> additional meaning to the data (e.g. for an unspecified buffer of
> opaque data I think `void *` is a much more appropriate type than
> `uint8_t *`, even if I want to add a byte offset to it), and I've
> never seen a case where I think it would have actually been unclear to
> anyone what step width the pointer arithmetic was done at (there's no
> reason to assume anything other than bytewise for a `void *`).
>
> If we need some extensions anyway, and coreboot will never be "fully C
> standards compliant" (not that that would actually be very useful for
> anything in practice), I don't see a reason why we should still avoid
> some extensions when we're using others. I think if an (official,
> long-term supported) extension exists and it allows us to write better
> code than standard C, there should be no reason not to use it. (Note
> that for those people who are trying to get coreboot working with
> clang, it generally supports all the same extensions as GCC.) I've
> written a draft CL to add a section for this to the coding style,
> please let me know what you think:
> https://review.coreboot.org/c/coreboot/+/63660
> _______________________________________________
> coreboot mailing list -- [email protected]
> To unsubscribe send an email to [email protected]
>
_______________________________________________
coreboot mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to