[Mesa-dev] [PATCH] glsl: empty declarations should be valid

Kenneth Graunke kenneth at whitecape.org
Fri Aug 5 13:17:06 PDT 2011


On 08/04/2011 09:48 PM, Chad Versace wrote:
> On 08/04/2011 06:18 PM, Chad Versace wrote:
>> On 08/04/2011 01:29 PM, Eric Anholt wrote:
>>> On Thu,  4 Aug 2011 12:59:35 +0900, Chia-I Wu <olvaffe at gmail.com> wrote:
>>>> From: Chia-I Wu <olv at lunarg.com>
>>>>
>>>> Unlike C++, empty declarations such as
>>>>
>>>>   float;
>>>>
>>>> should be valid.  The spec is not explicit about this actually.
>>>>
>>>> Some apps that generate their shader sources may rely on this.  This was
>>>> noted when porting one of them to Linux from Windows.
>>>
>>> Ew.  Looking the GLSL 1.20 spec, I see:
>>>
>>> statement:
>>>         declaration_statement
>>>
>>> declaration_statement:
>>>         declaration
>>>
>>> declaration:
>>>         init_declarator_list SEMICOLON
>>>
>>> init_declarator_list:
>>>         single_declaration
>>>
>>> single_declaration:
>>>         fully_specified_type
>>>         fully_specified_type IDENTIFIER
>>>
>>> so it looks like that is actually valid code.  That's awful.
>>
>> I first suspected that this was a spec grammar bug. But it is still present in
>> the GLSL 4.10 spec, so it's unlikely to be a bug.

You do know that (at least according to Dan M.) they haven't updated the
grammar in the appendix since GLSL 1.50, right?  And it already allows
completely bogus things that don't match the rest of the spec (see the
switch statement grammar).

>> Surprisingly, C also allows empty declarations. Compiling this
>>     float;
>>     int main() { return 0; }
>> with `gcc --std=c99` succeeds and emits this warning:
>>      warning: useless type name in empty declaration [enabled by default]
>>
>> I hate to say this, but I believe the spec grammar intentionally allows empty
>> declarations. C allows it, and GLSL tries to mimic C.
>>
>> Even though I don't like empty declarations, this patch is
>> Reviewed-by: Chad Versace <chad at chad-versace.us>
> 
> 
> Also, please update the commit message to say that `gcc --std=c99` allows empty
> declrations and include the appropriate quotation from the GLSL 1.20 spec's
> grammar. Without that extra info, someone may stumble onto this commit and say WTF.

I still say WTF.  Do ATI, nVidia, or Apple support this?  If even one of
them doesn't, I say we shouldn't either.

GLSL is so nasty sometimes.


More information about the mesa-dev mailing list