Prevent crash when bad shader redeclares built-in array names it is not supposed...
authorJohn Kessenich <cepheus@frii.com>
Tue, 6 May 2014 22:58:55 +0000 (22:58 +0000)
committerJohn Kessenich <cepheus@frii.com>
Tue, 6 May 2014 22:58:55 +0000 (22:58 +0000)
git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@26520 e7fa87d3-cd2b-0410-9028-fcbf551c1848

Test/400.tese
Test/baseResults/150.tesc.out
Test/baseResults/400.tese.out
glslang/MachineIndependent/ParseHelper.cpp

index e953ab5..3e913e8 100644 (file)
@@ -97,3 +97,5 @@ layout(location = 24) in vec4 ivlc[];  // ERROR
 \r
 layout(location = 23) out vec4 ovla[2];\r
 layout(location = 24) out vec4 ovlb[2];  // ERROR\r
+\r
+in float gl_TessLevelOuter[4];           // ERROR\r
index 35c0848..003179e 100644 (file)
@@ -388,7 +388,8 @@ ERROR: 0:78: 'in' : type must be an array: bla
 ERROR: 0:86: '[]' : tessellation input array size must be gl_MaxPatchVertices or implicitly sized \r
 ERROR: 0:96: 'location' : overlapping use of location 24\r
 ERROR: 0:99: 'location' : overlapping use of location 24\r
-ERROR: 29 compilation errors.  No code generated.\r
+ERROR: 0:101: 'gl_TessLevelOuter' : identifiers starting with "gl_" are reserved \r
+ERROR: 30 compilation errors.  No code generated.\r
 \r
 \r
 Shader version: 400\r
index 6cad8dd..1b43662 100644 (file)
@@ -29,7 +29,8 @@ ERROR: 0:78: 'in' : type must be an array: bla
 ERROR: 0:86: '[]' : tessellation input array size must be gl_MaxPatchVertices or implicitly sized \r
 ERROR: 0:96: 'location' : overlapping use of location 24\r
 ERROR: 0:99: 'location' : overlapping use of location 24\r
-ERROR: 29 compilation errors.  No code generated.\r
+ERROR: 0:101: 'gl_TessLevelOuter' : identifiers starting with "gl_" are reserved \r
+ERROR: 30 compilation errors.  No code generated.\r
 \r
 \r
 Shader version: 400\r
index b778d18..ab9938b 100644 (file)
@@ -2213,6 +2213,11 @@ void TParseContext::declareArray(TSourceLoc loc, TString& identifier, const TTyp
     if (! symbol) {
         bool currentScope;
         symbol = symbolTable.find(identifier, 0, &currentScope);
+
+        if (symbol && builtInName(identifier) && ! symbolTable.atBuiltInLevel()) {
+            // bad shader (errors already reported) trying to redeclare a built-in name as an array
+            return;
+        }
         if (symbol == 0 || ! currentScope) {
             //
             // Successfully process a new definition.