On 08/04/2011 01:29 PM, Eric Anholt wrote:
> On Thu,  4 Aug 2011 12:59:35 +0900, Chia-I Wu <olva...@gmail.com> wrote:
>> From: Chia-I Wu <o...@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.

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 <c...@chad-versace.us>

-- 
Chad Versace
c...@chad-versace.us

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to