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.
This commit is contained in:
John Kessenich 2015-06-29 17:19:17 -06:00
parent 63cebdb4c2
commit 1189a7bc4a
5 changed files with 35 additions and 7 deletions

View File

@ -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
}

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -1788,24 +1788,32 @@ 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)
// 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(), "");
}
}
}
//
// Reserved errors for the preprocessor.
//
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,10 +1822,14 @@ 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 {
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);
}
}
}
//
// See if this version/profile allows use of the line-continuation character '\'.