From 1189a7bc4a1ae2de8ccceb49d514488387261603 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Mon, 29 Jun 2015 17:19:17 -0600 Subject: [PATCH] Make double underscore "__" an error for ES 300, but a warning for 310. The 310 spec (and desktop specs) have clarified this is a waring, not an error, but 300 tests still expect an error. --- Test/300BuiltIns.frag | 9 +++++++-- Test/310.comp | 5 +++++ Test/baseResults/300BuiltIns.frag.out | 4 +++- Test/baseResults/310.comp.out | 4 ++++ glslang/MachineIndependent/ParseHelper.cpp | 20 ++++++++++++++++---- 5 files changed, 35 insertions(+), 7 deletions(-) diff --git a/Test/300BuiltIns.frag b/Test/300BuiltIns.frag index 07cb7186a..89233e265 100644 --- a/Test/300BuiltIns.frag +++ b/Test/300BuiltIns.frag @@ -3,7 +3,7 @@ int imax, imin; uint umax, umin; -vec3 x, y; +vec3 x, y; // ERROR, needs default precision bvec3 bv; uint uy; @@ -67,5 +67,10 @@ void main() vec2 v18 = unpackHalf2x16(uy); // not present - noise2(v18); + noise2(v18); // ERROR, not present + + float t__; // ERROR, no __ until revision 310 + + // ERROR, no __ until revision 310 + #define __D } diff --git a/Test/310.comp b/Test/310.comp index ebea3e4cf..4c2cfd71f 100644 --- a/Test/310.comp +++ b/Test/310.comp @@ -231,3 +231,8 @@ in inb { // ERROR out outb { // ERROR int a; } outbi; + +float t__; // ERROR, no __ until revision 310 + + // ERROR, no __ until revision 310 +#define __D diff --git a/Test/baseResults/300BuiltIns.frag.out b/Test/baseResults/300BuiltIns.frag.out index 63dd0e19e..a61515c1a 100644 --- a/Test/baseResults/300BuiltIns.frag.out +++ b/Test/baseResults/300BuiltIns.frag.out @@ -1,7 +1,9 @@ 300BuiltIns.frag ERROR: 0:6: 'float' : type requires declaration of default precision qualifier ERROR: 0:70: 'noise2' : no matching overloaded function found -ERROR: 2 compilation errors. No code generated. +ERROR: 0:72: 't__' : identifiers containing consecutive underscores ("__") are reserved, and an error if version <= 300 +ERROR: 0:75: '#define' : names containing consecutive underscores are reserved, and an error if version <= 300: __D +ERROR: 4 compilation errors. No code generated. Shader version: 300 diff --git a/Test/baseResults/310.comp.out b/Test/baseResults/310.comp.out index 70f09163d..75db91c18 100644 --- a/Test/baseResults/310.comp.out +++ b/Test/baseResults/310.comp.out @@ -74,6 +74,8 @@ ERROR: 0:221: 'assign' : can't read from writeonly object: wo ERROR: 0:222: '~' : can't read from writeonly object: wo ERROR: 0:227: 'input block' : not supported in this stage: compute ERROR: 0:231: 'output block' : not supported in this stage: compute +WARNING: 0:235: 't__' : identifiers containing consecutive underscores ("__") are reserved +WARNING: 0:238: '#define' : names containing consecutive underscores are reserved: __D ERROR: 74 compilation errors. No code generated. @@ -483,6 +485,7 @@ ERROR: node is still EOpNull! 0:? 'multio' (layout(column_major shared ) buffer block{layout(column_major shared ) readonly buffer highp int value, layout(column_major shared ) writeonly buffer implicitly-sized array of highp float values}) 0:? 'inbi' (in block{in highp int a}) 0:? 'outbi' (out block{out highp int a}) +0:? 't__' (global highp float) Linked compute stage: @@ -894,4 +897,5 @@ ERROR: node is still EOpNull! 0:? 'multio' (layout(column_major shared ) buffer block{layout(column_major shared ) readonly buffer highp int value, layout(column_major shared ) writeonly buffer implicitly-sized array of highp float values}) 0:? 'inbi' (in block{in highp int a}) 0:? 'outbi' (out block{out highp int a}) +0:? 't__' (global highp float) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 28d87922d..0965daa58 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -1788,11 +1788,17 @@ void TParseContext::reservedErrorCheck(TSourceLoc loc, const TString& identifier if (builtInName(identifier)) error(loc, "identifiers starting with \"gl_\" are reserved", identifier.c_str(), ""); + // "__" are not supposed to be an error. ES 310 (and desktop) added the clarification: // "In addition, all identifiers containing two consecutive underscores (__) are // reserved; using such a name does not itself result in an error, but may result // in undefined behavior." - if (identifier.find("__") != TString::npos) - warn(loc, "identifiers containing consecutive underscores (\"__\") are reserved", identifier.c_str(), ""); + // however, before that, ES tests required an error. + if (identifier.find("__") != TString::npos) { + if (profile == EEsProfile && version <= 300) + error(loc, "identifiers containing consecutive underscores (\"__\") are reserved, and an error if version <= 300", identifier.c_str(), ""); + else + warn(loc, "identifiers containing consecutive underscores (\"__\") are reserved", identifier.c_str(), ""); + } } } @@ -1801,11 +1807,13 @@ void TParseContext::reservedErrorCheck(TSourceLoc loc, const TString& identifier // void TParseContext::reservedPpErrorCheck(TSourceLoc loc, const char* identifier, const char* op) { + // "__" are not supposed to be an error. ES 310 (and desktop) added the clarification: // "All macro names containing two consecutive underscores ( __ ) are reserved; // defining such a name does not itself result in an error, but may result in // undefined behavior. All macro names prefixed with "GL_" ("GL" followed by a // single underscore) are also reserved, and defining such a name results in a // compile-time error." + // however, before that, ES tests required an error. if (strncmp(identifier, "GL_", 3) == 0) error(loc, "names beginning with \"GL_\" can't be (un)defined:", op, identifier); else if (strstr(identifier, "__") != 0) { @@ -1814,8 +1822,12 @@ void TParseContext::reservedPpErrorCheck(TSourceLoc loc, const char* identifier, strcmp(identifier, "__FILE__") == 0 || strcmp(identifier, "__VERSION__") == 0)) error(loc, "predefined names can't be (un)defined:", op, identifier); - else - warn(loc, "names containing consecutive underscores are reserved:", op, identifier); + else { + if (profile == EEsProfile && version <= 300) + error(loc, "names containing consecutive underscores are reserved, and an error if version <= 300:", op, identifier); + else + warn(loc, "names containing consecutive underscores are reserved:", op, identifier); + } } }