diff --git a/Test/baseResults/150.tesc.out b/Test/baseResults/150.tesc.out
index 5cc9e804c95a28187ed28c7a7517d25ec320902a..25e44eddaf8dab0f10cf86977d95d7d5115e5fd6 100644
--- a/Test/baseResults/150.tesc.out
+++ b/Test/baseResults/150.tesc.out
@@ -754,7 +754,7 @@ ERROR: 0:29: 'constructor' :  cannot convert parameter 2 from ' const 2X2 matrix
 ERROR: 0:29: ' const 2-element array of 4-component vector of float' : cannot construct with these arguments 
 ERROR: 0:29: '=' :  cannot convert from ' const float' to ' global 2-element array of 4-component vector of float'
 ERROR: 0:30: 'initializer list' : wrong number of matrix columns:  temp 4X2 matrix of float
-ERROR: 0:40: 'constructor' :  cannot convert parameter 1 from ' temp float' to ' temp structure{ global float s,  global float t}'
+ERROR: 0:40: 'constructor' :  cannot convert parameter 1 from ' const structure{ global 4-component vector of float a,  global 4-component vector of float b}' to ' temp structure{ global float s,  global float t}'
 ERROR: 0:70: 'initializer list' : wrong number of structure members 
 ERROR: 13 compilation errors.  No code generated.
 
diff --git a/Test/baseResults/420.tese.out b/Test/baseResults/420.tese.out
index 66d41e55bf3868b6c3fc0a56882308a921c24063..f14e1c0d3d8ddbabbec740e8a56e5ad179a28cfd 100644
--- a/Test/baseResults/420.tese.out
+++ b/Test/baseResults/420.tese.out
@@ -10,7 +10,7 @@ ERROR: 0:29: 'constructor' :  cannot convert parameter 2 from ' const 2X2 matrix
 ERROR: 0:29: ' const 2-element array of 4-component vector of float' : cannot construct with these arguments 
 ERROR: 0:29: '=' :  cannot convert from ' const float' to ' global 2-element array of 4-component vector of float'
 ERROR: 0:30: 'initializer list' : wrong number of matrix columns:  temp 4X2 matrix of float
-ERROR: 0:40: 'constructor' :  cannot convert parameter 1 from ' temp float' to ' temp structure{ global float s,  global float t}'
+ERROR: 0:40: 'constructor' :  cannot convert parameter 1 from ' const structure{ global 4-component vector of float a,  global 4-component vector of float b}' to ' temp structure{ global float s,  global float t}'
 ERROR: 0:70: 'initializer list' : wrong number of structure members 
 ERROR: 13 compilation errors.  No code generated.
 
diff --git a/Test/baseResults/hlsl.array.frag.out b/Test/baseResults/hlsl.array.frag.out
index 88bed81cfecd47fdb858fea2bac0eafae774300a..54a907ecb5e7f84b280ca643b7d6ee912bbee947 100755
--- a/Test/baseResults/hlsl.array.frag.out
+++ b/Test/baseResults/hlsl.array.frag.out
@@ -10,87 +10,134 @@ gl_FragCoord origin is upper left
 0:?         2.000000
 0:?         3.000000
 0:?         4.000000
-0:10  Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
-0:10    Function Parameters: 
-0:10      'i' ( in int)
-0:10      'input' ( in 3-element array of 4-component vector of float)
+0:11  Sequence
+0:11    move second child to first child ( temp 2-element array of 4-component vector of float)
+0:11      'c2' ( global 2-element array of 4-component vector of float)
+0:11      Construct vec4 ( temp 2-element array of 4-component vector of float)
+0:11        'C' ( global 4-component vector of float)
+0:?         Constant:
+0:?           1.000000
+0:?           2.000000
+0:?           3.000000
+0:?           4.000000
+0:14  Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
+0:14    Function Parameters: 
+0:14      'i' ( in int)
+0:14      'input' ( in 3-element array of 4-component vector of float)
 0:?     Sequence
-0:11      Sequence
-0:11        move second child to first child ( temp 10-element array of 4-component vector of float)
-0:11          'b' ( temp 10-element array of 4-component vector of float)
-0:11          Construct vec4 ( temp 10-element array of 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:12      Branch: Return with expression
-0:12        add ( temp 4-component vector of float)
-0:12          add ( temp 4-component vector of float)
-0:12            add ( temp 4-component vector of float)
-0:12              add ( temp 4-component vector of float)
-0:12                add ( temp 4-component vector of float)
-0:12                  add ( temp 4-component vector of float)
-0:12                    direct index ( temp 4-component vector of float)
-0:12                      a: direct index for structure ( uniform 4-element array of 4-component vector of float)
-0:12                        'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:12                        Constant:
-0:12                          0 (const uint)
-0:12                      Constant:
-0:12                        1 (const int)
-0:12                    indirect index ( temp 4-component vector of float)
-0:12                      a: direct index for structure ( uniform 4-element array of 4-component vector of float)
-0:12                        'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:12                        Constant:
-0:12                          0 (const uint)
-0:12                      'i' ( in int)
-0:12                  direct index ( temp 4-component vector of float)
-0:12                    'input' ( in 3-element array of 4-component vector of float)
-0:12                    Constant:
-0:12                      2 (const int)
-0:12                indirect index ( temp 4-component vector of float)
-0:12                  'input' ( in 3-element array of 4-component vector of float)
-0:12                  'i' ( in int)
-0:12              direct index ( temp 4-component vector of float)
-0:12                'b' ( temp 10-element array of 4-component vector of float)
-0:12                Constant:
-0:12                  5 (const int)
-0:12            indirect index ( temp 4-component vector of float)
-0:12              'b' ( temp 10-element array of 4-component vector of float)
-0:12              'i' ( in int)
-0:12          indirect index ( temp 4-component vector of float)
-0:12            m: direct index for structure ( temp 7-element array of 4-component vector of float)
-0:12              indirect index ( temp structure{ temp 7-element array of 4-component vector of float m})
-0:12                s: direct index for structure ( uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m})
-0:12                  'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:12                  Constant:
-0:12                    1 (const uint)
-0:12                'i' ( in int)
-0:12              Constant:
-0:12                0 (const int)
-0:12            'i' ( in int)
-0:10  Function Definition: PixelShaderFunction( ( temp void)
-0:10    Function Parameters: 
+0:15      Sequence
+0:15        move second child to first child ( temp 10-element array of 4-component vector of float)
+0:15          'b' ( temp 10-element array of 4-component vector of float)
+0:15          Construct vec4 ( temp 10-element array of 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:16      Sequence
+0:16        move second child to first child ( temp 4-component vector of float)
+0:16          'tmp' ( temp 4-component vector of float)
+0:16          add ( temp 4-component vector of float)
+0:16            add ( temp 4-component vector of float)
+0:16              add ( temp 4-component vector of float)
+0:16                add ( temp 4-component vector of float)
+0:16                  'C' ( global 4-component vector of float)
+0:16                  direct index ( temp 4-component vector of float)
+0:16                    a1: direct index for structure ( uniform 1-element array of 4-component vector of float)
+0:16                      'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:16                      Constant:
+0:16                        2 (const uint)
+0:16                    Constant:
+0:16                      0 (const int)
+0:16                Constant:
+0:16                  1.000000
+0:16                  2.000000
+0:16                  3.000000
+0:16                  4.000000
+0:16              indirect index ( temp 4-component vector of float)
+0:16                a2: direct index for structure ( uniform 2-element array of 4-component vector of float)
+0:16                  'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:16                  Constant:
+0:16                    3 (const uint)
+0:16                'i' ( in int)
+0:16            indirect index ( temp 4-component vector of float)
+0:16              'c2' ( global 2-element array of 4-component vector of float)
+0:16              'i' ( in int)
+0:17      Branch: Return with expression
+0:17        add ( temp 4-component vector of float)
+0:17          add ( temp 4-component vector of float)
+0:17            add ( temp 4-component vector of float)
+0:17              add ( temp 4-component vector of float)
+0:17                add ( temp 4-component vector of float)
+0:17                  add ( temp 4-component vector of float)
+0:17                    add ( temp 4-component vector of float)
+0:17                      direct index ( temp 4-component vector of float)
+0:17                        a: direct index for structure ( uniform 4-element array of 4-component vector of float)
+0:17                          'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:17                          Constant:
+0:17                            0 (const uint)
+0:17                        Constant:
+0:17                          1 (const int)
+0:17                      indirect index ( temp 4-component vector of float)
+0:17                        a: direct index for structure ( uniform 4-element array of 4-component vector of float)
+0:17                          'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:17                          Constant:
+0:17                            0 (const uint)
+0:17                        'i' ( in int)
+0:17                    direct index ( temp 4-component vector of float)
+0:17                      'input' ( in 3-element array of 4-component vector of float)
+0:17                      Constant:
+0:17                        2 (const int)
+0:17                  indirect index ( temp 4-component vector of float)
+0:17                    'input' ( in 3-element array of 4-component vector of float)
+0:17                    'i' ( in int)
+0:17                direct index ( temp 4-component vector of float)
+0:17                  'b' ( temp 10-element array of 4-component vector of float)
+0:17                  Constant:
+0:17                    5 (const int)
+0:17              indirect index ( temp 4-component vector of float)
+0:17                'b' ( temp 10-element array of 4-component vector of float)
+0:17                'i' ( in int)
+0:17            indirect index ( temp 4-component vector of float)
+0:17              m: direct index for structure ( temp 7-element array of 4-component vector of float)
+0:17                indirect index ( temp structure{ temp 7-element array of 4-component vector of float m})
+0:17                  s: direct index for structure ( uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m})
+0:17                    'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:17                    Constant:
+0:17                      1 (const uint)
+0:17                  'i' ( in int)
+0:17                Constant:
+0:17                  0 (const int)
+0:17              'i' ( in int)
+0:17          'tmp' ( temp 4-component vector of float)
+0:14  Function Definition: PixelShaderFunction( ( temp void)
+0:14    Function Parameters: 
 0:?     Sequence
-0:10      move second child to first child ( temp int)
+0:14      move second child to first child ( temp int)
 0:?         'i' ( temp int)
 0:?         'i' (layout( location=0) flat in int)
-0:10      move second child to first child ( temp 3-element array of 4-component vector of float)
+0:14      move second child to first child ( temp 3-element array of 4-component vector of float)
 0:?         'input' ( temp 3-element array of 4-component vector of float)
 0:?         'input' (layout( location=1) in 3-element array of 4-component vector of float)
-0:10      move second child to first child ( temp 4-component vector of float)
+0:14      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:10        Function Call: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
+0:14        Function Call: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
 0:?           'i' ( temp int)
 0:?           'input' ( temp 3-element array of 4-component vector of float)
 0:?   Linker Objects
-0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
+0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
 0:?     'C' ( global 4-component vector of float)
+0:?     'c1' ( const 1-element array of 4-component vector of float)
+0:?       1.000000
+0:?       2.000000
+0:?       3.000000
+0:?       4.000000
+0:?     'c2' ( global 2-element array of 4-component vector of float)
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'i' (layout( location=0) flat in int)
 0:?     'input' (layout( location=1) in 3-element array of 4-component vector of float)
@@ -110,99 +157,146 @@ gl_FragCoord origin is upper left
 0:?         2.000000
 0:?         3.000000
 0:?         4.000000
-0:10  Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
-0:10    Function Parameters: 
-0:10      'i' ( in int)
-0:10      'input' ( in 3-element array of 4-component vector of float)
+0:11  Sequence
+0:11    move second child to first child ( temp 2-element array of 4-component vector of float)
+0:11      'c2' ( global 2-element array of 4-component vector of float)
+0:11      Construct vec4 ( temp 2-element array of 4-component vector of float)
+0:11        'C' ( global 4-component vector of float)
+0:?         Constant:
+0:?           1.000000
+0:?           2.000000
+0:?           3.000000
+0:?           4.000000
+0:14  Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
+0:14    Function Parameters: 
+0:14      'i' ( in int)
+0:14      'input' ( in 3-element array of 4-component vector of float)
 0:?     Sequence
-0:11      Sequence
-0:11        move second child to first child ( temp 10-element array of 4-component vector of float)
-0:11          'b' ( temp 10-element array of 4-component vector of float)
-0:11          Construct vec4 ( temp 10-element array of 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:11            'C' ( global 4-component vector of float)
-0:12      Branch: Return with expression
-0:12        add ( temp 4-component vector of float)
-0:12          add ( temp 4-component vector of float)
-0:12            add ( temp 4-component vector of float)
-0:12              add ( temp 4-component vector of float)
-0:12                add ( temp 4-component vector of float)
-0:12                  add ( temp 4-component vector of float)
-0:12                    direct index ( temp 4-component vector of float)
-0:12                      a: direct index for structure ( uniform 4-element array of 4-component vector of float)
-0:12                        'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:12                        Constant:
-0:12                          0 (const uint)
-0:12                      Constant:
-0:12                        1 (const int)
-0:12                    indirect index ( temp 4-component vector of float)
-0:12                      a: direct index for structure ( uniform 4-element array of 4-component vector of float)
-0:12                        'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:12                        Constant:
-0:12                          0 (const uint)
-0:12                      'i' ( in int)
-0:12                  direct index ( temp 4-component vector of float)
-0:12                    'input' ( in 3-element array of 4-component vector of float)
-0:12                    Constant:
-0:12                      2 (const int)
-0:12                indirect index ( temp 4-component vector of float)
-0:12                  'input' ( in 3-element array of 4-component vector of float)
-0:12                  'i' ( in int)
-0:12              direct index ( temp 4-component vector of float)
-0:12                'b' ( temp 10-element array of 4-component vector of float)
-0:12                Constant:
-0:12                  5 (const int)
-0:12            indirect index ( temp 4-component vector of float)
-0:12              'b' ( temp 10-element array of 4-component vector of float)
-0:12              'i' ( in int)
-0:12          indirect index ( temp 4-component vector of float)
-0:12            m: direct index for structure ( temp 7-element array of 4-component vector of float)
-0:12              indirect index ( temp structure{ temp 7-element array of 4-component vector of float m})
-0:12                s: direct index for structure ( uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m})
-0:12                  'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
-0:12                  Constant:
-0:12                    1 (const uint)
-0:12                'i' ( in int)
-0:12              Constant:
-0:12                0 (const int)
-0:12            'i' ( in int)
-0:10  Function Definition: PixelShaderFunction( ( temp void)
-0:10    Function Parameters: 
+0:15      Sequence
+0:15        move second child to first child ( temp 10-element array of 4-component vector of float)
+0:15          'b' ( temp 10-element array of 4-component vector of float)
+0:15          Construct vec4 ( temp 10-element array of 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:15            'C' ( global 4-component vector of float)
+0:16      Sequence
+0:16        move second child to first child ( temp 4-component vector of float)
+0:16          'tmp' ( temp 4-component vector of float)
+0:16          add ( temp 4-component vector of float)
+0:16            add ( temp 4-component vector of float)
+0:16              add ( temp 4-component vector of float)
+0:16                add ( temp 4-component vector of float)
+0:16                  'C' ( global 4-component vector of float)
+0:16                  direct index ( temp 4-component vector of float)
+0:16                    a1: direct index for structure ( uniform 1-element array of 4-component vector of float)
+0:16                      'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:16                      Constant:
+0:16                        2 (const uint)
+0:16                    Constant:
+0:16                      0 (const int)
+0:16                Constant:
+0:16                  1.000000
+0:16                  2.000000
+0:16                  3.000000
+0:16                  4.000000
+0:16              indirect index ( temp 4-component vector of float)
+0:16                a2: direct index for structure ( uniform 2-element array of 4-component vector of float)
+0:16                  'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:16                  Constant:
+0:16                    3 (const uint)
+0:16                'i' ( in int)
+0:16            indirect index ( temp 4-component vector of float)
+0:16              'c2' ( global 2-element array of 4-component vector of float)
+0:16              'i' ( in int)
+0:17      Branch: Return with expression
+0:17        add ( temp 4-component vector of float)
+0:17          add ( temp 4-component vector of float)
+0:17            add ( temp 4-component vector of float)
+0:17              add ( temp 4-component vector of float)
+0:17                add ( temp 4-component vector of float)
+0:17                  add ( temp 4-component vector of float)
+0:17                    add ( temp 4-component vector of float)
+0:17                      direct index ( temp 4-component vector of float)
+0:17                        a: direct index for structure ( uniform 4-element array of 4-component vector of float)
+0:17                          'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:17                          Constant:
+0:17                            0 (const uint)
+0:17                        Constant:
+0:17                          1 (const int)
+0:17                      indirect index ( temp 4-component vector of float)
+0:17                        a: direct index for structure ( uniform 4-element array of 4-component vector of float)
+0:17                          'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:17                          Constant:
+0:17                            0 (const uint)
+0:17                        'i' ( in int)
+0:17                    direct index ( temp 4-component vector of float)
+0:17                      'input' ( in 3-element array of 4-component vector of float)
+0:17                      Constant:
+0:17                        2 (const int)
+0:17                  indirect index ( temp 4-component vector of float)
+0:17                    'input' ( in 3-element array of 4-component vector of float)
+0:17                    'i' ( in int)
+0:17                direct index ( temp 4-component vector of float)
+0:17                  'b' ( temp 10-element array of 4-component vector of float)
+0:17                  Constant:
+0:17                    5 (const int)
+0:17              indirect index ( temp 4-component vector of float)
+0:17                'b' ( temp 10-element array of 4-component vector of float)
+0:17                'i' ( in int)
+0:17            indirect index ( temp 4-component vector of float)
+0:17              m: direct index for structure ( temp 7-element array of 4-component vector of float)
+0:17                indirect index ( temp structure{ temp 7-element array of 4-component vector of float m})
+0:17                  s: direct index for structure ( uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m})
+0:17                    'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
+0:17                    Constant:
+0:17                      1 (const uint)
+0:17                  'i' ( in int)
+0:17                Constant:
+0:17                  0 (const int)
+0:17              'i' ( in int)
+0:17          'tmp' ( temp 4-component vector of float)
+0:14  Function Definition: PixelShaderFunction( ( temp void)
+0:14    Function Parameters: 
 0:?     Sequence
-0:10      move second child to first child ( temp int)
+0:14      move second child to first child ( temp int)
 0:?         'i' ( temp int)
 0:?         'i' (layout( location=0) flat in int)
-0:10      move second child to first child ( temp 3-element array of 4-component vector of float)
+0:14      move second child to first child ( temp 3-element array of 4-component vector of float)
 0:?         'input' ( temp 3-element array of 4-component vector of float)
 0:?         'input' (layout( location=1) in 3-element array of 4-component vector of float)
-0:10      move second child to first child ( temp 4-component vector of float)
+0:14      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:10        Function Call: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
+0:14        Function Call: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float)
 0:?           'i' ( temp int)
 0:?           'input' ( temp 3-element array of 4-component vector of float)
 0:?   Linker Objects
-0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s})
+0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a,  uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s,  uniform 1-element array of 4-component vector of float a1,  uniform 2-element array of 4-component vector of float a2})
 0:?     'C' ( global 4-component vector of float)
+0:?     'c1' ( const 1-element array of 4-component vector of float)
+0:?       1.000000
+0:?       2.000000
+0:?       3.000000
+0:?       4.000000
+0:?     'c2' ( global 2-element array of 4-component vector of float)
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'i' (layout( location=0) flat in int)
 0:?     'input' (layout( location=1) in 3-element array of 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 99
+// Id's are bound by 126
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 86 90 93
+                              EntryPoint Fragment 4  "PixelShaderFunction" 112 116 119
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
@@ -210,32 +304,40 @@ gl_FragCoord origin is upper left
                               Name 15  "i"
                               Name 16  "input"
                               Name 20  "C"
-                              Name 29  "b"
-                              Name 45  ""
-                              MemberName 45 0  "m"
-                              Name 48  "$Global"
-                              MemberName 48($Global) 0  "a"
-                              MemberName 48($Global) 1  "s"
-                              Name 50  ""
-                              Name 84  "i"
-                              Name 86  "i"
-                              Name 88  "input"
-                              Name 90  "input"
-                              Name 93  "@entryPointOutput"
-                              Name 94  "param"
-                              Name 96  "param"
-                              Decorate 42 ArrayStride 16
-                              Decorate 44 ArrayStride 16
-                              MemberDecorate 45 0 Offset 0
-                              Decorate 47 ArrayStride 112
-                              MemberDecorate 48($Global) 0 Offset 0
-                              MemberDecorate 48($Global) 1 Offset 64
-                              Decorate 48($Global) Block
-                              Decorate 50 DescriptorSet 0
-                              Decorate 86(i) Flat
-                              Decorate 86(i) Location 0
-                              Decorate 90(input) Location 1
-                              Decorate 93(@entryPointOutput) Location 0
+                              Name 29  "c2"
+                              Name 35  "b"
+                              Name 48  "tmp"
+                              Name 54  ""
+                              MemberName 54 0  "m"
+                              Name 60  "$Global"
+                              MemberName 60($Global) 0  "a"
+                              MemberName 60($Global) 1  "s"
+                              MemberName 60($Global) 2  "a1"
+                              MemberName 60($Global) 3  "a2"
+                              Name 62  ""
+                              Name 110  "i"
+                              Name 112  "i"
+                              Name 114  "input"
+                              Name 116  "input"
+                              Name 119  "@entryPointOutput"
+                              Name 120  "param"
+                              Name 122  "param"
+                              Decorate 51 ArrayStride 16
+                              Decorate 53 ArrayStride 16
+                              MemberDecorate 54 0 Offset 0
+                              Decorate 56 ArrayStride 112
+                              Decorate 58 ArrayStride 16
+                              Decorate 59 ArrayStride 16
+                              MemberDecorate 60($Global) 0 Offset 0
+                              MemberDecorate 60($Global) 1 Offset 64
+                              MemberDecorate 60($Global) 2 Offset 1296
+                              MemberDecorate 60($Global) 3 Offset 1312
+                              Decorate 60($Global) Block
+                              Decorate 62 DescriptorSet 0
+                              Decorate 112(i) Flat
+                              Decorate 112(i) Location 0
+                              Decorate 116(input) Location 1
+                              Decorate 119(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -254,91 +356,120 @@ gl_FragCoord origin is upper left
               23:    8(float) Constant 1077936128
               24:    8(float) Constant 1082130432
               25:    9(fvec4) ConstantComposite 21 22 23 24
-              26:     10(int) Constant 10
+              26:     10(int) Constant 2
               27:             TypeArray 9(fvec4) 26
-              28:             TypePointer Function 27
-              41:     10(int) Constant 4
-              42:             TypeArray 9(fvec4) 41
-              43:     10(int) Constant 7
-              44:             TypeArray 9(fvec4) 43
-              45:             TypeStruct 44
-              46:     10(int) Constant 11
-              47:             TypeArray 45(struct) 46
-     48($Global):             TypeStruct 42 47
-              49:             TypePointer Uniform 48($Global)
-              50:     49(ptr) Variable Uniform
-              51:      6(int) Constant 0
-              52:      6(int) Constant 1
-              53:             TypePointer Uniform 9(fvec4)
-              60:      6(int) Constant 2
-              61:             TypePointer Function 9(fvec4)
-              69:      6(int) Constant 5
-              85:             TypePointer Input 6(int)
-           86(i):     85(ptr) Variable Input
-              89:             TypePointer Input 12
-       90(input):     89(ptr) Variable Input
-              92:             TypePointer Output 9(fvec4)
-93(@entryPointOutput):     92(ptr) Variable Output
+              28:             TypePointer Private 27
+          29(c2):     28(ptr) Variable Private
+              32:     10(int) Constant 10
+              33:             TypeArray 9(fvec4) 32
+              34:             TypePointer Function 33
+              47:             TypePointer Function 9(fvec4)
+              50:     10(int) Constant 4
+              51:             TypeArray 9(fvec4) 50
+              52:     10(int) Constant 7
+              53:             TypeArray 9(fvec4) 52
+              54:             TypeStruct 53
+              55:     10(int) Constant 11
+              56:             TypeArray 54(struct) 55
+              57:     10(int) Constant 1
+              58:             TypeArray 9(fvec4) 57
+              59:             TypeArray 9(fvec4) 26
+     60($Global):             TypeStruct 51 56 58 59
+              61:             TypePointer Uniform 60($Global)
+              62:     61(ptr) Variable Uniform
+              63:      6(int) Constant 2
+              64:      6(int) Constant 0
+              65:             TypePointer Uniform 9(fvec4)
+              70:      6(int) Constant 3
+              79:      6(int) Constant 1
+              93:      6(int) Constant 5
+             111:             TypePointer Input 6(int)
+          112(i):    111(ptr) Variable Input
+             115:             TypePointer Input 12
+      116(input):    115(ptr) Variable Input
+             118:             TypePointer Output 9(fvec4)
+119(@entryPointOutput):    118(ptr) Variable Output
+             125:          58 ConstantComposite 25
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-           84(i):      7(ptr) Variable Function
-       88(input):     13(ptr) Variable Function
-       94(param):      7(ptr) Variable Function
-       96(param):     13(ptr) Variable Function
+          110(i):      7(ptr) Variable Function
+      114(input):     13(ptr) Variable Function
+      120(param):      7(ptr) Variable Function
+      122(param):     13(ptr) Variable Function
                               Store 20(C) 25
-              87:      6(int) Load 86(i)
-                              Store 84(i) 87
-              91:          12 Load 90(input)
-                              Store 88(input) 91
-              95:      6(int) Load 84(i)
-                              Store 94(param) 95
-              97:          12 Load 88(input)
-                              Store 96(param) 97
-              98:    9(fvec4) FunctionCall 17(@PixelShaderFunction(i1;vf4[3];) 94(param) 96(param)
-                              Store 93(@entryPointOutput) 98
+              30:    9(fvec4) Load 20(C)
+              31:          27 CompositeConstruct 30 25
+                              Store 29(c2) 31
+             113:      6(int) Load 112(i)
+                              Store 110(i) 113
+             117:          12 Load 116(input)
+                              Store 114(input) 117
+             121:      6(int) Load 110(i)
+                              Store 120(param) 121
+             123:          12 Load 114(input)
+                              Store 122(param) 123
+             124:    9(fvec4) FunctionCall 17(@PixelShaderFunction(i1;vf4[3];) 120(param) 122(param)
+                              Store 119(@entryPointOutput) 124
                               Return
                               FunctionEnd
 17(@PixelShaderFunction(i1;vf4[3];):    9(fvec4) Function None 14
            15(i):      7(ptr) FunctionParameter
        16(input):     13(ptr) FunctionParameter
               18:             Label
-           29(b):     28(ptr) Variable Function
-              30:    9(fvec4) Load 20(C)
-              31:    9(fvec4) Load 20(C)
-              32:    9(fvec4) Load 20(C)
-              33:    9(fvec4) Load 20(C)
-              34:    9(fvec4) Load 20(C)
-              35:    9(fvec4) Load 20(C)
+           35(b):     34(ptr) Variable Function
+         48(tmp):     47(ptr) Variable Function
               36:    9(fvec4) Load 20(C)
               37:    9(fvec4) Load 20(C)
               38:    9(fvec4) Load 20(C)
               39:    9(fvec4) Load 20(C)
-              40:          27 CompositeConstruct 30 31 32 33 34 35 36 37 38 39
-                              Store 29(b) 40
-              54:     53(ptr) AccessChain 50 51 52
-              55:    9(fvec4) Load 54
-              56:      6(int) Load 15(i)
-              57:     53(ptr) AccessChain 50 51 56
-              58:    9(fvec4) Load 57
-              59:    9(fvec4) FAdd 55 58
-              62:     61(ptr) AccessChain 16(input) 60
-              63:    9(fvec4) Load 62
-              64:    9(fvec4) FAdd 59 63
-              65:      6(int) Load 15(i)
-              66:     61(ptr) AccessChain 16(input) 65
+              40:    9(fvec4) Load 20(C)
+              41:    9(fvec4) Load 20(C)
+              42:    9(fvec4) Load 20(C)
+              43:    9(fvec4) Load 20(C)
+              44:    9(fvec4) Load 20(C)
+              45:    9(fvec4) Load 20(C)
+              46:          33 CompositeConstruct 36 37 38 39 40 41 42 43 44 45
+                              Store 35(b) 46
+              49:    9(fvec4) Load 20(C)
+              66:     65(ptr) AccessChain 62 63 64
               67:    9(fvec4) Load 66
-              68:    9(fvec4) FAdd 64 67
-              70:     61(ptr) AccessChain 29(b) 69
-              71:    9(fvec4) Load 70
-              72:    9(fvec4) FAdd 68 71
-              73:      6(int) Load 15(i)
-              74:     61(ptr) AccessChain 29(b) 73
-              75:    9(fvec4) Load 74
-              76:    9(fvec4) FAdd 72 75
-              77:      6(int) Load 15(i)
-              78:      6(int) Load 15(i)
-              79:     53(ptr) AccessChain 50 52 77 51 78
-              80:    9(fvec4) Load 79
-              81:    9(fvec4) FAdd 76 80
-                              ReturnValue 81
+              68:    9(fvec4) FAdd 49 67
+              69:    9(fvec4) FAdd 68 25
+              71:      6(int) Load 15(i)
+              72:     65(ptr) AccessChain 62 70 71
+              73:    9(fvec4) Load 72
+              74:    9(fvec4) FAdd 69 73
+              75:      6(int) Load 15(i)
+              76:     19(ptr) AccessChain 29(c2) 75
+              77:    9(fvec4) Load 76
+              78:    9(fvec4) FAdd 74 77
+                              Store 48(tmp) 78
+              80:     65(ptr) AccessChain 62 64 79
+              81:    9(fvec4) Load 80
+              82:      6(int) Load 15(i)
+              83:     65(ptr) AccessChain 62 64 82
+              84:    9(fvec4) Load 83
+              85:    9(fvec4) FAdd 81 84
+              86:     47(ptr) AccessChain 16(input) 63
+              87:    9(fvec4) Load 86
+              88:    9(fvec4) FAdd 85 87
+              89:      6(int) Load 15(i)
+              90:     47(ptr) AccessChain 16(input) 89
+              91:    9(fvec4) Load 90
+              92:    9(fvec4) FAdd 88 91
+              94:     47(ptr) AccessChain 35(b) 93
+              95:    9(fvec4) Load 94
+              96:    9(fvec4) FAdd 92 95
+              97:      6(int) Load 15(i)
+              98:     47(ptr) AccessChain 35(b) 97
+              99:    9(fvec4) Load 98
+             100:    9(fvec4) FAdd 96 99
+             101:      6(int) Load 15(i)
+             102:      6(int) Load 15(i)
+             103:     65(ptr) AccessChain 62 79 101 64 102
+             104:    9(fvec4) Load 103
+             105:    9(fvec4) FAdd 100 104
+             106:    9(fvec4) Load 48(tmp)
+             107:    9(fvec4) FAdd 105 106
+                              ReturnValue 107
                               FunctionEnd
diff --git a/Test/hlsl.array.frag b/Test/hlsl.array.frag
index b5d931170789c2d06edb08649d99c1835f511a2f..ff0004fd83d44255b5d2ea16e827ed02e09441f1 100644
--- a/Test/hlsl.array.frag
+++ b/Test/hlsl.array.frag
@@ -5,9 +5,14 @@ struct {
 } s[11];
 
 static float4 C = float4(1,2,3,4);
+float4 a1[1] = { float4(1,2,3,4) };
+float4 a2[2] = { float4(1,2,3,4), float4(5,2,3,4), };
+const float4 c1[1] = { float4(1,2,3,4) };
+static const float4 c2[2] = { C, float4(1,2,3,4), };
 
 float4 PixelShaderFunction(int i : sem1, float4 input[3] : sem2) : SV_TARGET0
 {
     float4 b[10] = { C, C, C, C, C, C, C, C, C, C };
-    return a[1] + a[i] + input[2] + input[i] + b[5] + b[i] + s[i].m[i];
+    float4 tmp = C + a1[0] + c1[0] + a2[i] + c2[i];
+    return a[1] + a[i] + input[2] + input[i] + b[5] + b[i] + s[i].m[i] + tmp;
 }
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index 32cc4bf88db27a5e4a6b50132be8f6c7c2396dd3..8154e687a80a65436dd14b32d50f83fdba033a7b 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -5474,7 +5474,7 @@ TIntermTyped* TParseContext::addConstructor(const TSourceLoc& loc, TIntermNode*
 
     bool singleArg;
     if (aggrNode) {
-        if (aggrNode->getOp() != EOpNull || aggrNode->getSequence().size() == 1)
+        if (aggrNode->getOp() != EOpNull)
             singleArg = true;
         else
             singleArg = false;
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
index ca01f4975daffab9be323409a29960a8e55ba219..e6b98615fa2df6a7a31ff446e5aaa69c155de239 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -7828,7 +7828,7 @@ TIntermTyped* HlslParseContext::addConstructor(const TSourceLoc& loc, TIntermTyp
 
     bool singleArg;
     if (aggrNode != nullptr) {
-        if (aggrNode->getOp() != EOpNull || aggrNode->getSequence().size() == 1)
+        if (aggrNode->getOp() != EOpNull)
             singleArg = true;
         else
             singleArg = false;