On 08/04/2011 01:29 PM, Eric Anholt wrote: > On Thu, 4 Aug 2011 12:59:35 +0900, Chia-I Wu <[email protected]> wrote: >> From: Chia-I Wu <[email protected]> >> >> 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 <[email protected]>
--
Chad Versace
[email protected]
signature.asc
Description: OpenPGP digital signature
_______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
