Am Do., 22. Aug. 2024 um 07:27 Uhr schrieb Paul Eggert <egg...@cs.ucla.edu>:

> On 2024-08-21 06:36, Bruno Haible wrote:
> > In summary, this paragraph makes no sense for structs.
>
> Hmm, well, the paragraph makes sense to me. I suppose somebody could
> fire off a question to the C committee about the intent of the paragraph.
>

I see how it can make sense.  In Bruno's vector struct example, a compiler
would be able to allocate registers for the individual struct members that
are used and would not have to allocate a contiguous memory block for the
entire struct.

However, see the second code block in Example 4 of section 6.7.3.1 (in the
latest draft of C23).  This may, of course, be itself an error as the
example is about restrict and not about uninitialized structs.

Marc


> In the meantime it's an engineering decision - should we port to verrry
> picky implementations that complain about components of the struct not
> being initialized? This is a valid question regardless of the standard's
> intent.
>
> I expect that it's not high priority to change the code, if the only
> picky implementation is SAST (which I've never used and which I suspect
> is chock-full of false positives anyway). If it's GCC's -fanalyzer or
> sanitizer or valgrind or something else we (or at least I) commonly use,
> though, that'd be a different matter.
>
> Also, if the C committee comes back and says behavior is undefined, we
> might want to make the change, if only as insurance.
>
>
> >  that 'return (struct ...) { initializers }'
> >     produces particularly good code with modern compilers)
>
> Yeah, that's partly why I weighed in on this seemingly-obscure topic. I
> like the more-functional style and wouldn't want "undefined behavior" to
> get in its way.
>
>

Reply via email to