From ffa66d3bc7a9e966b7088ba83061b5959f9527c1 Mon Sep 17 00:00:00 2001
From: John Kessenich <cepheus@frii.com>
Date: Tue, 12 Nov 2013 22:02:36 +0000
Subject: [PATCH] Disallow arrays in initializers for non-array-object versions
 (assignment, etc. were already caught, but not initialization).

git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@24022 e7fa87d3-cd2b-0410-9028-fcbf551c1848
---
 Test/array100.frag                         | 1 +
 Test/baseResults/100.frag.out              | 3 ++-
 Test/baseResults/array100.frag.out         | 7 ++++++-
 glslang/MachineIndependent/ParseHelper.cpp | 1 +
 4 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/Test/array100.frag b/Test/array100.frag
index beedfeca9..b77aedf6e 100644
--- a/Test/array100.frag
+++ b/Test/array100.frag
@@ -66,4 +66,5 @@ void bar11()
     s1 = s2;   // ERROR
     bar10(s1);
     s2 = bar9(); // ERROR
+    SB initSb = s1;  // ERROR
 }
diff --git a/Test/baseResults/100.frag.out b/Test/baseResults/100.frag.out
index 1c08f355f..9a5c37e50 100644
--- a/Test/baseResults/100.frag.out
+++ b/Test/baseResults/100.frag.out
@@ -1,5 +1,6 @@
 ERROR: 0:3: '{ } style initializers' : not supported with this profile: es
 ERROR: 0:3: 'initializer' : not supported for this version or the enabled extensions 
+ERROR: 0:3: 'array initializer' : not supported for this version or the enabled extensions 
 ERROR: 0:7: 'attribute' : not supported in this stage: fragment
 ERROR: 0:7: 'float' : type requires declaration of default precision qualifier 
 ERROR: 0:9: '=' :  cannot convert from 'const int' to 'mediump float'
@@ -60,7 +61,7 @@ ERROR: 0:144: 'a' : redefinition
 ERROR: 0:149: 'floating-point suffix' : not supported for this version or the enabled extensions 
 ERROR: 0:150: 'floating-point suffix' : not supported for this version or the enabled extensions 
 ERROR: 0:152: '' :  syntax error
-ERROR: 55 compilation errors.  No code generated.
+ERROR: 56 compilation errors.  No code generated.
 
 ERROR: node is still EOpNull!
 0:3  Sequence
diff --git a/Test/baseResults/array100.frag.out b/Test/baseResults/array100.frag.out
index 5302806a6..8223f4b45 100644
--- a/Test/baseResults/array100.frag.out
+++ b/Test/baseResults/array100.frag.out
@@ -19,7 +19,8 @@ ERROR: 0:39: '[' :  index out of range '-1'
 ERROR: 0:53: 'array in function return type' : not supported for this version or the enabled extensions 
 ERROR: 0:66: 'array assignment' : not supported for this version or the enabled extensions 
 ERROR: 0:68: 'array assignment' : not supported for this version or the enabled extensions 
-ERROR: 21 compilation errors.  No code generated.
+ERROR: 0:69: 'array initializer' : not supported for this version or the enabled extensions 
+ERROR: 22 compilation errors.  No code generated.
 
 ERROR: node is still EOpNull!
 0:9  Function Definition: foo(f1[5]; (4-element array of mediump float)
@@ -143,6 +144,10 @@ ERROR: node is still EOpNull!
 0:68      move second child to first child (structure{v4,sa})
 0:68        's2' (structure{v4,sa})
 0:68        Function Call: bar9( (structure{v4,sa})
+0:69      Sequence
+0:69        move second child to first child (structure{v4,sa})
+0:69          'initSb' (structure{v4,sa})
+0:69          's1' (structure{v4,sa})
 0:?   Linker Objects
 0:?     'gu' (unsized array of mediump float)
 0:?     'g4' (4-element array of mediump float)
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index f23b37e9f..765c8858d 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -2927,6 +2927,7 @@ TIntermNode* TParseContext::executeInitializer(TSourceLoc loc, TString& identifi
         error(loc, " cannot initialize this type of qualifier ", variable->getType().getStorageQualifierString(), "");
         return 0;
     }
+    arrayObjectCheck(loc, variable->getType(), "array initializer");
 
     //
     // If the initializer was from braces { ... }, we convert the whole subtree to a
-- 
GitLab