glslang: Bug 13724: ES global initializers must be constant.

git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@30990 e7fa87d3-cd2b-0410-9028-fcbf551c1848
diff --git a/Test/100.frag b/Test/100.frag
index 4097916..ce6a6ee 100644
--- a/Test/100.frag
+++ b/Test/100.frag
@@ -1,6 +1,6 @@
 // okay

 #version 100

-int a[3] = { 2, 3, 4, };  // ERROR

+int a[3] = { 2, 3, 4, };  // ERROR (lots)

 #version 100

 int uint;

 

@@ -194,6 +194,25 @@
     a.method(); // ERROR

 }

 

+float fooinit();

+

+float fooinittest()

+{

+    return fooinit();

+}

+

+// Test extra-function initializers

+const float fi1 = 3.0;

+const float fi2 = 4.0;

+const float fi3 = 5.0;

+

+float fooinit()

+{

+    return fi1 + fi2 + fi3;  // should make a constant of 12.0

+}

+

+int init1 = gl_FrontFacing ? 1 : 2; // ERROR, non-const initializer

+

 #pragma STDGL invariant(all)

 

 #line 3000

diff --git a/Test/140.frag b/Test/140.frag
index 0abc574..2bc2f59 100644
--- a/Test/140.frag
+++ b/Test/140.frag
@@ -33,8 +33,21 @@
 
 layout(location=4) in vec4 vl2;
 
+float fooi();
+
 void foo()
 {
     vec2 r1 = modf(v.xy, v.zw);  // ERROR, v.zw not l-value
     vec2 r2 = modf(o.xy, o.zw);
+    o.z = fooi();
+}
+
+// Test extra-function initializers
+
+float i1 = gl_FrontFacing ? -2.0 : 2.0;
+float i2 = 102;
+
+float fooi()
+{
+    return i1 + i2;
 }
diff --git a/Test/baseResults/100.frag.out b/Test/baseResults/100.frag.out
index 30af8ce..ae50dcb 100644
--- a/Test/baseResults/100.frag.out
+++ b/Test/baseResults/100.frag.out
@@ -2,6 +2,7 @@
 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:3: 'non-constant global initializer' : not supported with this profile: es

 ERROR: 0:4: '#version' : must occur first in shader 

 ERROR: 0:7: 'attribute' : not supported in this stage: fragment

 ERROR: 0:7: 'float' : type requires declaration of default precision qualifier 

@@ -82,9 +83,10 @@
 ERROR: 0:193: '.length' : not supported for this version or the enabled extensions 

 ERROR: 0:194: '.' : cannot apply to an array: method

 ERROR: 0:194: 'a' : can't use function syntax on variable 

+ERROR: 0:214: 'non-constant global initializer' : not supported with this profile: es

 ERROR: 0:3000: '#error' : line of this error should be 3000  

 ERROR: 0:3002: '' :  syntax error

-ERROR: 76 compilation errors.  No code generated.

+ERROR: 78 compilation errors.  No code generated.

 

 

 Shader version: 100

@@ -352,6 +354,29 @@
 0:193        5 (const int)

 0:194      Constant:

 0:194        0.000000

+0:199  Function Definition: fooinittest( (global mediump float)

+0:199    Function Parameters: 

+0:201    Sequence

+0:201      Branch: Return with expression

+0:201        Function Call: fooinit( (global mediump float)

+0:209  Function Definition: fooinit( (global mediump float)

+0:209    Function Parameters: 

+0:211    Sequence

+0:211      Branch: Return with expression

+0:211        Constant:

+0:211          12.000000

+0:214  Sequence

+0:214    move second child to first child (temp mediump int)

+0:214      'init1' (global mediump int)

+0:214      Test condition and select (temp mediump int)

+0:214        Condition

+0:214        'gl_FrontFacing' (gl_FrontFacing bool)

+0:214        true case

+0:214        Constant:

+0:214          1 (const int)

+0:214        false case

+0:214        Constant:

+0:214          2 (const int)

 0:?   Linker Objects

 0:?     'a' (global 3-element array of mediump int)

 0:?     'uint' (global mediump int)

@@ -376,6 +401,13 @@
 0:?     'f124' (global mediump float)

 0:?     'sCube' (uniform lowp samplerCube)

 0:?     's' (smooth in structure{global mediump float f})

+0:?     'fi1' (const mediump float)

+0:?       3.000000

+0:?     'fi2' (const mediump float)

+0:?       4.000000

+0:?     'fi3' (const mediump float)

+0:?       5.000000

+0:?     'init1' (global mediump int)

 

 

 Linked fragment stage:

@@ -646,6 +678,29 @@
 0:193        5 (const int)

 0:194      Constant:

 0:194        0.000000

+0:199  Function Definition: fooinittest( (global mediump float)

+0:199    Function Parameters: 

+0:201    Sequence

+0:201      Branch: Return with expression

+0:201        Function Call: fooinit( (global mediump float)

+0:209  Function Definition: fooinit( (global mediump float)

+0:209    Function Parameters: 

+0:211    Sequence

+0:211      Branch: Return with expression

+0:211        Constant:

+0:211          12.000000

+0:214  Sequence

+0:214    move second child to first child (temp mediump int)

+0:214      'init1' (global mediump int)

+0:214      Test condition and select (temp mediump int)

+0:214        Condition

+0:214        'gl_FrontFacing' (gl_FrontFacing bool)

+0:214        true case

+0:214        Constant:

+0:214          1 (const int)

+0:214        false case

+0:214        Constant:

+0:214          2 (const int)

 0:?   Linker Objects

 0:?     'a' (global 3-element array of mediump int)

 0:?     'uint' (global mediump int)

@@ -670,4 +725,11 @@
 0:?     'f124' (global mediump float)

 0:?     'sCube' (uniform lowp samplerCube)

 0:?     's' (smooth in structure{global mediump float f})

+0:?     'fi1' (const mediump float)

+0:?       3.000000

+0:?     'fi2' (const mediump float)

+0:?       4.000000

+0:?     'fi3' (const mediump float)

+0:?       5.000000

+0:?     'init1' (global mediump int)

 

diff --git a/Test/baseResults/140.frag.out b/Test/baseResults/140.frag.out
index ef3ebeb..d158f6e 100644
--- a/Test/baseResults/140.frag.out
+++ b/Test/baseResults/140.frag.out
@@ -6,8 +6,8 @@
 ERROR: 0:24: 'location qualifier on input' : not supported for this version or the enabled extensions 

 ERROR: 0:26: 'location' : not supported for this version or the enabled extensions 

 ERROR: 0:26: 'location qualifier on output' : not supported for this version or the enabled extensions 

-ERROR: 0:38: 'assign' :  l-value required "v" (can't modify shader input)

-ERROR: 0:38: 'out' : Non-L-value cannot be passed for 'out' or 'inout' parameters. 

+ERROR: 0:40: 'assign' :  l-value required "v" (can't modify shader input)

+ERROR: 0:40: 'out' : Non-L-value cannot be passed for 'out' or 'inout' parameters. 

 ERROR: 8 compilation errors.  No code generated.

 

 

@@ -30,45 +30,75 @@
 0:22      'patch' (global float)

 0:22      Constant:

 0:22        3.100000

-0:36  Function Definition: foo( (global void)

-0:36    Function Parameters: 

-0:38    Sequence

-0:38      Sequence

-0:38        move second child to first child (temp 2-component vector of float)

-0:38          'r1' (temp 2-component vector of float)

-0:38          modf (global 2-component vector of float)

-0:38            vector swizzle (temp 2-component vector of float)

-0:38              'v' (smooth in 4-component vector of float)

-0:38              Sequence

-0:38                Constant:

-0:38                  0 (const int)

-0:38                Constant:

-0:38                  1 (const int)

-0:38            vector swizzle (temp 2-component vector of float)

-0:38              'v' (smooth in 4-component vector of float)

-0:38              Sequence

-0:38                Constant:

-0:38                  2 (const int)

-0:38                Constant:

-0:38                  3 (const int)

-0:39      Sequence

-0:39        move second child to first child (temp 2-component vector of float)

-0:39          'r2' (temp 2-component vector of float)

-0:39          modf (global 2-component vector of float)

-0:39            vector swizzle (temp 2-component vector of float)

-0:39              'o' (out 4-component vector of float)

-0:39              Sequence

-0:39                Constant:

-0:39                  0 (const int)

-0:39                Constant:

-0:39                  1 (const int)

-0:39            vector swizzle (temp 2-component vector of float)

-0:39              'o' (out 4-component vector of float)

-0:39              Sequence

-0:39                Constant:

-0:39                  2 (const int)

-0:39                Constant:

-0:39                  3 (const int)

+0:38  Function Definition: foo( (global void)

+0:38    Function Parameters: 

+0:40    Sequence

+0:40      Sequence

+0:40        move second child to first child (temp 2-component vector of float)

+0:40          'r1' (temp 2-component vector of float)

+0:40          modf (global 2-component vector of float)

+0:40            vector swizzle (temp 2-component vector of float)

+0:40              'v' (smooth in 4-component vector of float)

+0:40              Sequence

+0:40                Constant:

+0:40                  0 (const int)

+0:40                Constant:

+0:40                  1 (const int)

+0:40            vector swizzle (temp 2-component vector of float)

+0:40              'v' (smooth in 4-component vector of float)

+0:40              Sequence

+0:40                Constant:

+0:40                  2 (const int)

+0:40                Constant:

+0:40                  3 (const int)

+0:41      Sequence

+0:41        move second child to first child (temp 2-component vector of float)

+0:41          'r2' (temp 2-component vector of float)

+0:41          modf (global 2-component vector of float)

+0:41            vector swizzle (temp 2-component vector of float)

+0:41              'o' (out 4-component vector of float)

+0:41              Sequence

+0:41                Constant:

+0:41                  0 (const int)

+0:41                Constant:

+0:41                  1 (const int)

+0:41            vector swizzle (temp 2-component vector of float)

+0:41              'o' (out 4-component vector of float)

+0:41              Sequence

+0:41                Constant:

+0:41                  2 (const int)

+0:41                Constant:

+0:41                  3 (const int)

+0:42      move second child to first child (temp float)

+0:42        direct index (temp float)

+0:42          'o' (out 4-component vector of float)

+0:42          Constant:

+0:42            2 (const int)

+0:42        Function Call: fooi( (global float)

+0:47  Sequence

+0:47    move second child to first child (temp float)

+0:47      'i1' (global float)

+0:47      Test condition and select (temp float)

+0:47        Condition

+0:47        'gl_FrontFacing' (gl_FrontFacing bool)

+0:47        true case

+0:47        Constant:

+0:47          -2.000000

+0:47        false case

+0:47        Constant:

+0:47          2.000000

+0:48  Sequence

+0:48    move second child to first child (temp float)

+0:48      'i2' (global float)

+0:48      Constant:

+0:48        102.000000

+0:50  Function Definition: fooi( (global float)

+0:50    Function Parameters: 

+0:52    Sequence

+0:52      Branch: Return with expression

+0:52        add (temp float)

+0:52          'i1' (global float)

+0:52          'i2' (global float)

 0:?   Linker Objects

 0:?     'v' (smooth in 4-component vector of float)

 0:?     'i' (smooth in 4-component vector of float)

@@ -81,6 +111,8 @@
 0:?     'factorBad' (layout(location=3 ) out 4-component vector of float)

 0:?     'factor' (layout(location=5 ) out 4-component vector of float)

 0:?     'vl2' (layout(location=4 ) smooth in 4-component vector of float)

+0:?     'i1' (global float)

+0:?     'i2' (global float)

 

 

 Linked fragment stage:

@@ -105,45 +137,75 @@
 0:22      'patch' (global float)

 0:22      Constant:

 0:22        3.100000

-0:36  Function Definition: foo( (global void)

-0:36    Function Parameters: 

-0:38    Sequence

-0:38      Sequence

-0:38        move second child to first child (temp 2-component vector of float)

-0:38          'r1' (temp 2-component vector of float)

-0:38          modf (global 2-component vector of float)

-0:38            vector swizzle (temp 2-component vector of float)

-0:38              'v' (smooth in 4-component vector of float)

-0:38              Sequence

-0:38                Constant:

-0:38                  0 (const int)

-0:38                Constant:

-0:38                  1 (const int)

-0:38            vector swizzle (temp 2-component vector of float)

-0:38              'v' (smooth in 4-component vector of float)

-0:38              Sequence

-0:38                Constant:

-0:38                  2 (const int)

-0:38                Constant:

-0:38                  3 (const int)

-0:39      Sequence

-0:39        move second child to first child (temp 2-component vector of float)

-0:39          'r2' (temp 2-component vector of float)

-0:39          modf (global 2-component vector of float)

-0:39            vector swizzle (temp 2-component vector of float)

-0:39              'o' (out 4-component vector of float)

-0:39              Sequence

-0:39                Constant:

-0:39                  0 (const int)

-0:39                Constant:

-0:39                  1 (const int)

-0:39            vector swizzle (temp 2-component vector of float)

-0:39              'o' (out 4-component vector of float)

-0:39              Sequence

-0:39                Constant:

-0:39                  2 (const int)

-0:39                Constant:

-0:39                  3 (const int)

+0:38  Function Definition: foo( (global void)

+0:38    Function Parameters: 

+0:40    Sequence

+0:40      Sequence

+0:40        move second child to first child (temp 2-component vector of float)

+0:40          'r1' (temp 2-component vector of float)

+0:40          modf (global 2-component vector of float)

+0:40            vector swizzle (temp 2-component vector of float)

+0:40              'v' (smooth in 4-component vector of float)

+0:40              Sequence

+0:40                Constant:

+0:40                  0 (const int)

+0:40                Constant:

+0:40                  1 (const int)

+0:40            vector swizzle (temp 2-component vector of float)

+0:40              'v' (smooth in 4-component vector of float)

+0:40              Sequence

+0:40                Constant:

+0:40                  2 (const int)

+0:40                Constant:

+0:40                  3 (const int)

+0:41      Sequence

+0:41        move second child to first child (temp 2-component vector of float)

+0:41          'r2' (temp 2-component vector of float)

+0:41          modf (global 2-component vector of float)

+0:41            vector swizzle (temp 2-component vector of float)

+0:41              'o' (out 4-component vector of float)

+0:41              Sequence

+0:41                Constant:

+0:41                  0 (const int)

+0:41                Constant:

+0:41                  1 (const int)

+0:41            vector swizzle (temp 2-component vector of float)

+0:41              'o' (out 4-component vector of float)

+0:41              Sequence

+0:41                Constant:

+0:41                  2 (const int)

+0:41                Constant:

+0:41                  3 (const int)

+0:42      move second child to first child (temp float)

+0:42        direct index (temp float)

+0:42          'o' (out 4-component vector of float)

+0:42          Constant:

+0:42            2 (const int)

+0:42        Function Call: fooi( (global float)

+0:47  Sequence

+0:47    move second child to first child (temp float)

+0:47      'i1' (global float)

+0:47      Test condition and select (temp float)

+0:47        Condition

+0:47        'gl_FrontFacing' (gl_FrontFacing bool)

+0:47        true case

+0:47        Constant:

+0:47          -2.000000

+0:47        false case

+0:47        Constant:

+0:47          2.000000

+0:48  Sequence

+0:48    move second child to first child (temp float)

+0:48      'i2' (global float)

+0:48      Constant:

+0:48        102.000000

+0:50  Function Definition: fooi( (global float)

+0:50    Function Parameters: 

+0:52    Sequence

+0:52      Branch: Return with expression

+0:52        add (temp float)

+0:52          'i1' (global float)

+0:52          'i2' (global float)

 0:?   Linker Objects

 0:?     'v' (smooth in 4-component vector of float)

 0:?     'i' (smooth in 4-component vector of float)

@@ -156,4 +218,6 @@
 0:?     'factorBad' (layout(location=3 ) out 4-component vector of float)

 0:?     'factor' (layout(location=5 ) out 4-component vector of float)

 0:?     'vl2' (layout(location=4 ) smooth in 4-component vector of float)

+0:?     'i1' (global float)

+0:?     'i2' (global float)

 

diff --git a/Test/baseResults/lineContinuation.vert.out b/Test/baseResults/lineContinuation.vert.out
index d6e5147..06ede30 100644
--- a/Test/baseResults/lineContinuation.vert.out
+++ b/Test/baseResults/lineContinuation.vert.out
@@ -42,25 +42,6 @@
 0:24          'a' (in highp 4-component vector of float)

 0:25      Branch: Return with expression

 0:25        'b' (temp highp 4-component vector of float)

-0:42  Sequence

-0:42    move second child to first child (temp highp int)

-0:42      'a1' (global highp int)

-0:42      Constant:

-0:42        4 (const int)

-0:43  Sequence

-0:43    move second child to first child (temp highp int)

-0:43      'a2' (global highp int)

-0:43      Constant:

-0:43        3 (const int)

-0:44  Sequence

-0:44    move second child to first child (temp highp int)

-0:44      'a3' (global highp int)

-0:44      Constant:

-0:44        4 (const int)

-0:45  Sequence

-0:45    move second child to first child (temp highp int)

-0:45      'a4' (global highp int)

-0:45      'a2' (global highp int)

 0:47  Sequence

 0:47    move second child to first child (temp highp int)

 0:47      'q1' (global highp int)

@@ -81,15 +62,6 @@
 0:50      'q4' (global highp int)

 0:50      Constant:

 0:50        1 (const int)

-0:65  Sequence

-0:65    move second child to first child (temp highp int)

-0:65      'abdece' (global highp int)

-0:65      Constant:

-0:65        10 (const int)

-0:66  Sequence

-0:66    move second child to first child (temp highp int)

-0:66      'aoeuntaoehu' (global highp int)

-0:66      'abdece' (global highp int)

 0:74  Sequence

 0:74    move second child to first child (temp highp float)

 0:74      'funkyf' (global highp float)

@@ -162,16 +134,22 @@
 0:?   Linker Objects

 0:?     'foo' (global highp float)

 0:?     'goodDecl' (global highp int)

-0:?     'a1' (global highp int)

-0:?     'a2' (global highp int)

-0:?     'a3' (global highp int)

-0:?     'a4' (global highp int)

+0:?     'a1' (const highp int)

+0:?       4 (const int)

+0:?     'a2' (const highp int)

+0:?       3 (const int)

+0:?     'a3' (const highp int)

+0:?       4 (const int)

+0:?     'a4' (const highp int)

+0:?       3 (const int)

 0:?     'q1' (global highp int)

 0:?     'q2' (global highp int)

 0:?     'q3' (global highp int)

 0:?     'q4' (global highp int)

-0:?     'abdece' (global highp int)

-0:?     'aoeuntaoehu' (global highp int)

+0:?     'abdece' (const highp int)

+0:?       10 (const int)

+0:?     'aoeuntaoehu' (const highp int)

+0:?       10 (const int)

 0:?     'funkyf' (global highp float)

 0:?     'funkyh' (global highp int)

 0:?     'funkyo' (global highp int)

@@ -208,25 +186,6 @@
 0:24          'a' (in highp 4-component vector of float)

 0:25      Branch: Return with expression

 0:25        'b' (temp highp 4-component vector of float)

-0:42  Sequence

-0:42    move second child to first child (temp highp int)

-0:42      'a1' (global highp int)

-0:42      Constant:

-0:42        4 (const int)

-0:43  Sequence

-0:43    move second child to first child (temp highp int)

-0:43      'a2' (global highp int)

-0:43      Constant:

-0:43        3 (const int)

-0:44  Sequence

-0:44    move second child to first child (temp highp int)

-0:44      'a3' (global highp int)

-0:44      Constant:

-0:44        4 (const int)

-0:45  Sequence

-0:45    move second child to first child (temp highp int)

-0:45      'a4' (global highp int)

-0:45      'a2' (global highp int)

 0:47  Sequence

 0:47    move second child to first child (temp highp int)

 0:47      'q1' (global highp int)

@@ -247,15 +206,6 @@
 0:50      'q4' (global highp int)

 0:50      Constant:

 0:50        1 (const int)

-0:65  Sequence

-0:65    move second child to first child (temp highp int)

-0:65      'abdece' (global highp int)

-0:65      Constant:

-0:65        10 (const int)

-0:66  Sequence

-0:66    move second child to first child (temp highp int)

-0:66      'aoeuntaoehu' (global highp int)

-0:66      'abdece' (global highp int)

 0:74  Sequence

 0:74    move second child to first child (temp highp float)

 0:74      'funkyf' (global highp float)

@@ -328,16 +278,22 @@
 0:?   Linker Objects

 0:?     'foo' (global highp float)

 0:?     'goodDecl' (global highp int)

-0:?     'a1' (global highp int)

-0:?     'a2' (global highp int)

-0:?     'a3' (global highp int)

-0:?     'a4' (global highp int)

+0:?     'a1' (const highp int)

+0:?       4 (const int)

+0:?     'a2' (const highp int)

+0:?       3 (const int)

+0:?     'a3' (const highp int)

+0:?       4 (const int)

+0:?     'a4' (const highp int)

+0:?       3 (const int)

 0:?     'q1' (global highp int)

 0:?     'q2' (global highp int)

 0:?     'q3' (global highp int)

 0:?     'q4' (global highp int)

-0:?     'abdece' (global highp int)

-0:?     'aoeuntaoehu' (global highp int)

+0:?     'abdece' (const highp int)

+0:?       10 (const int)

+0:?     'aoeuntaoehu' (const highp int)

+0:?       10 (const int)

 0:?     'funkyf' (global highp float)

 0:?     'funkyh' (global highp int)

 0:?     'funkyo' (global highp int)

diff --git a/Test/baseResults/lineContinuation100.vert.out b/Test/baseResults/lineContinuation100.vert.out
index 54f7494..d0efb95 100644
--- a/Test/baseResults/lineContinuation100.vert.out
+++ b/Test/baseResults/lineContinuation100.vert.out
@@ -42,25 +42,6 @@
 0:24          'a' (in highp 4-component vector of float)

 0:25      Branch: Return with expression

 0:25        'b' (temp highp 4-component vector of float)

-0:40  Sequence

-0:40    move second child to first child (temp highp int)

-0:40      'a1' (global highp int)

-0:40      Constant:

-0:40        4 (const int)

-0:41  Sequence

-0:41    move second child to first child (temp highp int)

-0:41      'a2' (global highp int)

-0:41      Constant:

-0:41        3 (const int)

-0:42  Sequence

-0:42    move second child to first child (temp highp int)

-0:42      'a3' (global highp int)

-0:42      Constant:

-0:42        4 (const int)

-0:43  Sequence

-0:43    move second child to first child (temp highp int)

-0:43      'a4' (global highp int)

-0:43      'a2' (global highp int)

 0:45  Sequence

 0:45    move second child to first child (temp highp int)

 0:45      'q1' (global highp int)

@@ -83,10 +64,14 @@
 0:48        1 (const int)

 0:?   Linker Objects

 0:?     'foo' (global highp float)

-0:?     'a1' (global highp int)

-0:?     'a2' (global highp int)

-0:?     'a3' (global highp int)

-0:?     'a4' (global highp int)

+0:?     'a1' (const highp int)

+0:?       4 (const int)

+0:?     'a2' (const highp int)

+0:?       3 (const int)

+0:?     'a3' (const highp int)

+0:?       4 (const int)

+0:?     'a4' (const highp int)

+0:?       3 (const int)

 0:?     'q1' (global highp int)

 0:?     'q2' (global highp int)

 0:?     'q3' (global highp int)

@@ -115,25 +100,6 @@
 0:24          'a' (in highp 4-component vector of float)

 0:25      Branch: Return with expression

 0:25        'b' (temp highp 4-component vector of float)

-0:40  Sequence

-0:40    move second child to first child (temp highp int)

-0:40      'a1' (global highp int)

-0:40      Constant:

-0:40        4 (const int)

-0:41  Sequence

-0:41    move second child to first child (temp highp int)

-0:41      'a2' (global highp int)

-0:41      Constant:

-0:41        3 (const int)

-0:42  Sequence

-0:42    move second child to first child (temp highp int)

-0:42      'a3' (global highp int)

-0:42      Constant:

-0:42        4 (const int)

-0:43  Sequence

-0:43    move second child to first child (temp highp int)

-0:43      'a4' (global highp int)

-0:43      'a2' (global highp int)

 0:45  Sequence

 0:45    move second child to first child (temp highp int)

 0:45      'q1' (global highp int)

@@ -156,10 +122,14 @@
 0:48        1 (const int)

 0:?   Linker Objects

 0:?     'foo' (global highp float)

-0:?     'a1' (global highp int)

-0:?     'a2' (global highp int)

-0:?     'a3' (global highp int)

-0:?     'a4' (global highp int)

+0:?     'a1' (const highp int)

+0:?       4 (const int)

+0:?     'a2' (const highp int)

+0:?       3 (const int)

+0:?     'a3' (const highp int)

+0:?       4 (const int)

+0:?     'a4' (const highp int)

+0:?       3 (const int)

 0:?     'q1' (global highp int)

 0:?     'q2' (global highp int)

 0:?     'q3' (global highp int)

diff --git a/Test/lineContinuation.vert b/Test/lineContinuation.vert
index f83212e..471f3a3 100644
--- a/Test/lineContinuation.vert
+++ b/Test/lineContinuation.vert
@@ -39,10 +39,10 @@
 #define C int q3 = $ 1
 #define D int q4 = @ 1
 
-int a1 = \ 4;  // ERROR
-int a2 = @ 3;  // ERROR
-int a3 = $4;   // ERROR
-int a4 = a2\;  // ERROR
+const highp int a1 = \ 4;  // ERROR
+const highp int a2 = @ 3;  // ERROR
+const highp int a3 = $4;   // ERROR
+const highp int a4 = a2\;  // ERROR
 
 A;
 B;
@@ -62,8 +62,8 @@
 // anoetuh nonaetu \\\\\\
 still in comment
 
-int abdece = 10;
-int aoeuntaoehu = abd\
+const int abdece = 10;
+const int aoeuntaoehu = abd\
 \
 \
 \
diff --git a/Test/lineContinuation100.vert b/Test/lineContinuation100.vert
index 32b1946..e632023 100644
--- a/Test/lineContinuation100.vert
+++ b/Test/lineContinuation100.vert
@@ -37,10 +37,10 @@
 #define C int q3 = $ 1

 #define D int q4 = @ 1

 

-int a1 = \ 4;  // ERROR

-int a2 = @ 3;  // ERROR

-int a3 = $4;   // ERROR

-int a4 = a2\;  // ERROR

+const highp int a1 = \ 4;  // ERROR

+const highp int a2 = @ 3;  // ERROR

+const highp int a3 = $4;   // ERROR

+const highp int a4 = a2\;  // ERROR

 

 A;

 B;

diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index 43911d6..8b1723c 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -4154,6 +4154,15 @@
             variable->getWritableType().getQualifier().storage = EvqConstReadOnly;
             qualifier = EvqConstReadOnly;
         }
+    } else {
+        // Non-const global variables in ES need a const initializer.
+        //
+        // "In declarations of global variables with no storage qualifier or with a const
+        // qualifier any initializer must be a constant expression."
+        if (symbolTable.atGlobalLevel() && initializer->getType().getQualifier().storage != EvqConst) {
+            const char* initFeature = "non-constant global initializer";
+            requireProfile(loc, ~EEsProfile, initFeature);
+        }
     }
 
     if (qualifier == EvqConst || qualifier == EvqUniform) {