[Mesa-dev] [PATCH 11/19] anv: Use GNU C empty brace initializer

Emil Velikov emil.l.velikov at gmail.com
Tue Aug 29 17:19:18 UTC 2017


On 29 August 2017 at 18:10, Matt Turner <mattst88 at gmail.com> wrote:
> On Tue, Aug 29, 2017 at 3:35 AM, Emil Velikov <emil.l.velikov at gmail.com> wrote:
>> On 29 August 2017 at 11:11, Eric Engestrom <eric.engestrom at imgtec.com> wrote:
>>> On Monday, 2017-08-28 14:57:13 -0700, Matt Turner wrote:
>>>> Avoids Clang's warning about the current code:
>>>>
>>>>    warning: suggest braces around initialization of subobject
>>>
>>> I'm not sure about this patch [1], but everything else in this series is:
>> IIRC "{}" is the least likely way to avoid the warnings, across
>> GCC/Clang versions.
>> It's not part of the C spec, but since it works - not sure how much to bother.
>
> I'm surprised to hear you say that. I've tested with gcc-4.9.4, 6.4.0,
> 7.1.0; and clang-4.0, and none of them warn about {}
>
Eric corrected me on IRC, but I forgot to mention here - "s/least/most/"

> I think when we went through this before (in NIR) we couldn't use {}
> because it needs to compile with MSVC, and MSVC doesn't allow that in
> C.
>
Precisely. The "most" portable solution that I know of is memset().

>> Would be great to have the issue reported (and fixed) in Clang though.
>> AFAICT both {0} and {0,} are valid, if memory serves me right.
>
> I don't really understand the nuances of {0}, {0,}, {{0}}, etc, and I
> get the sense that that's the case for nearly everyone else as well.
>
AFAICT {0} and {0,} should just work everywhere, modulo bugs.

[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53119
[2] https://bugs.llvm.org/show_bug.cgi?id=21689

> The most prominent bug I see in all of this is that {} isn't part of
> standard C (it is part of standard C++!)
Agreed. Not sure how easy it will be to convince the committee.

-Emil


More information about the mesa-dev mailing list