diff --git a/src/common/version.h b/src/common/version.h
index 3216637..fde770d 100644
--- a/src/common/version.h
+++ b/src/common/version.h
@@ -1,7 +1,7 @@
 #define MAJOR_VERSION 1
 #define MINOR_VERSION 0
 #define BUILD_VERSION 0
-#define BUILD_REVISION 2245
+#define BUILD_REVISION 2249
 
 #define STRINGIFY(x) #x
 #define MACRO_STRINGIFY(x) STRINGIFY(x)
diff --git a/src/compiler/glslang_tab.cpp b/src/compiler/glslang_tab.cpp
index 3cc96a0..427c55a 100644
--- a/src/compiler/glslang_tab.cpp
+++ b/src/compiler/glslang_tab.cpp
@@ -325,14 +325,6 @@
       }                                                      \
   } while (0)
 
-#define FRAG_VERT_ONLY(S, L) {  \
-    if (context->shaderType != SH_FRAGMENT_SHADER &&  \
-        context->shaderType != SH_VERTEX_SHADER) {  \
-        context->error(L, " supported in vertex/fragment shaders only ", S);  \
-        context->recover();  \
-    }  \
-}
-
 #define VERTEX_ONLY(S, L) {  \
     if (context->shaderType != SH_VERTEX_SHADER) {  \
         context->error(L, " supported in vertex shaders only ", S);  \
@@ -721,27 +713,27 @@
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   187,   187,   188,   191,   234,   237,   250,   255,   260,
-     266,   269,   356,   359,   460,   470,   483,   491,   591,   594,
-     602,   605,   611,   615,   622,   628,   637,   645,   700,   710,
-     713,   723,   733,   754,   755,   756,   761,   762,   771,   783,
-     784,   792,   803,   807,   808,   818,   828,   838,   851,   852,
-     862,   875,   879,   883,   887,   888,   901,   902,   915,   916,
-     929,   930,   947,   948,   961,   962,   963,   964,   965,   969,
-     972,   983,   991,  1018,  1023,  1037,  1074,  1077,  1084,  1092,
-    1113,  1134,  1144,  1172,  1177,  1187,  1192,  1202,  1205,  1208,
-    1211,  1217,  1224,  1227,  1249,  1267,  1291,  1314,  1318,  1336,
-    1344,  1376,  1396,  1485,  1494,  1517,  1520,  1526,  1534,  1542,
-    1550,  1560,  1567,  1570,  1573,  1579,  1582,  1597,  1601,  1605,
-    1609,  1618,  1623,  1628,  1633,  1638,  1643,  1648,  1653,  1658,
-    1663,  1669,  1675,  1681,  1686,  1691,  1700,  1709,  1714,  1727,
-    1727,  1741,  1741,  1750,  1753,  1769,  1805,  1809,  1815,  1822,
-    1837,  1841,  1845,  1846,  1852,  1853,  1854,  1855,  1856,  1860,
-    1861,  1861,  1861,  1871,  1872,  1876,  1876,  1877,  1877,  1882,
-    1885,  1895,  1898,  1904,  1905,  1909,  1917,  1921,  1931,  1936,
-    1953,  1953,  1958,  1958,  1965,  1965,  1973,  1976,  1982,  1985,
-    1991,  1995,  2002,  2009,  2016,  2023,  2034,  2043,  2047,  2054,
-    2057,  2063,  2063
+       0,   179,   179,   180,   183,   226,   229,   242,   247,   252,
+     258,   261,   336,   339,   440,   450,   463,   471,   571,   574,
+     582,   585,   591,   595,   602,   608,   617,   625,   680,   690,
+     693,   703,   713,   734,   735,   736,   741,   742,   750,   761,
+     762,   770,   781,   785,   786,   796,   806,   816,   829,   830,
+     840,   853,   857,   861,   865,   866,   879,   880,   893,   894,
+     907,   908,   925,   926,   939,   940,   941,   942,   943,   947,
+     950,   961,   969,   996,  1001,  1015,  1052,  1055,  1062,  1070,
+    1091,  1112,  1122,  1150,  1155,  1165,  1170,  1180,  1183,  1186,
+    1189,  1195,  1202,  1205,  1227,  1245,  1269,  1292,  1296,  1314,
+    1322,  1354,  1374,  1395,  1404,  1427,  1430,  1436,  1444,  1452,
+    1460,  1470,  1477,  1480,  1483,  1489,  1492,  1507,  1511,  1515,
+    1519,  1523,  1528,  1533,  1538,  1543,  1548,  1553,  1558,  1563,
+    1568,  1573,  1578,  1583,  1587,  1591,  1599,  1607,  1611,  1624,
+    1624,  1638,  1638,  1647,  1650,  1666,  1702,  1706,  1712,  1719,
+    1734,  1738,  1742,  1743,  1749,  1750,  1751,  1752,  1753,  1757,
+    1758,  1758,  1758,  1768,  1769,  1773,  1773,  1774,  1774,  1779,
+    1782,  1792,  1795,  1801,  1802,  1806,  1814,  1818,  1828,  1833,
+    1850,  1850,  1855,  1855,  1862,  1862,  1870,  1873,  1879,  1882,
+    1888,  1892,  1899,  1906,  1913,  1920,  1931,  1940,  1944,  1951,
+    1954,  1960,  1960
 };
 #endif
 
@@ -2384,15 +2376,7 @@
                 }
             } else {
                 if ((yyvsp[(1) - (4)].interm.intermTypedNode)->isArray()) {
-                    if ((yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getArraySize() == 0) {
-                        if ((yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getMaxArraySize() <= index) {
-                            if (context->arraySetMaxSize((yyvsp[(1) - (4)].interm.intermTypedNode)->getAsSymbolNode(), (yyvsp[(1) - (4)].interm.intermTypedNode)->getTypePointer(), index, true, (yylsp[(2) - (4)])))
-                                context->recover();
-                        } else {
-                            if (context->arraySetMaxSize((yyvsp[(1) - (4)].interm.intermTypedNode)->getAsSymbolNode(), (yyvsp[(1) - (4)].interm.intermTypedNode)->getTypePointer(), 0, false, (yylsp[(2) - (4)])))
-                                context->recover();
-                        }
-                    } else if (index >= (yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getArraySize()) {
+                    if (index >= (yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getArraySize()) {
                         std::stringstream extraInfoStream;
                         extraInfoStream << "array index out of range '" << index << "'";
                         std::string extraInfo = extraInfoStream.str();
@@ -2412,10 +2396,6 @@
                 (yyval.interm.intermTypedNode) = context->intermediate.addIndex(EOpIndexDirect, (yyvsp[(1) - (4)].interm.intermTypedNode), (yyvsp[(3) - (4)].interm.intermTypedNode), (yylsp[(2) - (4)]));
             }
         } else {
-            if ((yyvsp[(1) - (4)].interm.intermTypedNode)->isArray() && (yyvsp[(1) - (4)].interm.intermTypedNode)->getType().getArraySize() == 0) {
-                context->error((yylsp[(2) - (4)]), "", "[", "array must be redeclared with a size before being indexed with a variable");
-                context->recover();
-            }
             (yyval.interm.intermTypedNode) = context->intermediate.addIndex(EOpIndexIndirect, (yyvsp[(1) - (4)].interm.intermTypedNode), (yyvsp[(3) - (4)].interm.intermTypedNode), (yylsp[(2) - (4)]));
         }
         if ((yyval.interm.intermTypedNode) == 0) {
@@ -2779,33 +2759,33 @@
             case EbtFloat:
                 if ((yyvsp[(1) - (1)].interm.type).matrix) {
                     switch((yyvsp[(1) - (1)].interm.type).size) {
-                    case 2:                                     op = EOpConstructMat2;  break;
-                    case 3:                                     op = EOpConstructMat3;  break;
-                    case 4:                                     op = EOpConstructMat4;  break;
+                    case 2: op = EOpConstructMat2;  break;
+                    case 3: op = EOpConstructMat3;  break;
+                    case 4: op = EOpConstructMat4;  break;
                     }
                 } else {
                     switch((yyvsp[(1) - (1)].interm.type).size) {
-                    case 1:                                     op = EOpConstructFloat; break;
-                    case 2:                                     op = EOpConstructVec2;  break;
-                    case 3:                                     op = EOpConstructVec3;  break;
-                    case 4:                                     op = EOpConstructVec4;  break;
+                    case 1: op = EOpConstructFloat; break;
+                    case 2: op = EOpConstructVec2;  break;
+                    case 3: op = EOpConstructVec3;  break;
+                    case 4: op = EOpConstructVec4;  break;
                     }
                 }
                 break;
             case EbtInt:
                 switch((yyvsp[(1) - (1)].interm.type).size) {
-                case 1:                                         op = EOpConstructInt;   break;
-                case 2:       FRAG_VERT_ONLY("ivec2", (yylsp[(1) - (1)])); op = EOpConstructIVec2; break;
-                case 3:       FRAG_VERT_ONLY("ivec3", (yylsp[(1) - (1)])); op = EOpConstructIVec3; break;
-                case 4:       FRAG_VERT_ONLY("ivec4", (yylsp[(1) - (1)])); op = EOpConstructIVec4; break;
+                case 1: op = EOpConstructInt;   break;
+                case 2: op = EOpConstructIVec2; break;
+                case 3: op = EOpConstructIVec3; break;
+                case 4: op = EOpConstructIVec4; break;
                 }
                 break;
             case EbtBool:
                 switch((yyvsp[(1) - (1)].interm.type).size) {
-                case 1:                                         op = EOpConstructBool;  break;
-                case 2:       FRAG_VERT_ONLY("bvec2", (yylsp[(1) - (1)])); op = EOpConstructBVec2; break;
-                case 3:       FRAG_VERT_ONLY("bvec3", (yylsp[(1) - (1)])); op = EOpConstructBVec3; break;
-                case 4:       FRAG_VERT_ONLY("bvec4", (yylsp[(1) - (1)])); op = EOpConstructBVec4; break;
+                case 1: op = EOpConstructBool;  break;
+                case 2: op = EOpConstructBVec2; break;
+                case 3: op = EOpConstructBVec3; break;
+                case 4: op = EOpConstructBVec4; break;
                 }
                 break;
             default: break;
@@ -2914,7 +2894,6 @@
   case 37:
 
     {
-        FRAG_VERT_ONLY("*", (yylsp[(2) - (3)]));
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpMul, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]), context->symbolTable);
         if ((yyval.interm.intermTypedNode) == 0) {
             context->binaryOpError((yylsp[(2) - (3)]), "*", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
@@ -2927,7 +2906,6 @@
   case 38:
 
     {
-        FRAG_VERT_ONLY("/", (yylsp[(2) - (3)]));
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpDiv, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]), context->symbolTable);
         if ((yyval.interm.intermTypedNode) == 0) {
             context->binaryOpError((yylsp[(2) - (3)]), "/", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
@@ -3181,27 +3159,27 @@
 
   case 64:
 
-    {                            (yyval.interm).op = EOpAssign; }
+    { (yyval.interm).op = EOpAssign; }
     break;
 
   case 65:
 
-    { FRAG_VERT_ONLY("*=", (yylsp[(1) - (1)]));  (yyval.interm).op = EOpMulAssign; }
+    { (yyval.interm).op = EOpMulAssign; }
     break;
 
   case 66:
 
-    { FRAG_VERT_ONLY("/=", (yylsp[(1) - (1)]));  (yyval.interm).op = EOpDivAssign; }
+    { (yyval.interm).op = EOpDivAssign; }
     break;
 
   case 67:
 
-    {                            (yyval.interm).op = EOpAddAssign; }
+    { (yyval.interm).op = EOpAddAssign; }
     break;
 
   case 68:
 
-    {                            (yyval.interm).op = EOpSubAssign; }
+    { (yyval.interm).op = EOpSubAssign; }
     break;
 
   case 69:
@@ -4005,7 +3983,6 @@
   case 130:
 
     {
-        FRAG_VERT_ONLY("mat2", (yylsp[(1) - (1)]));
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[(1) - (1)]));
         (yyval.interm.type).setAggregate(2, true);
@@ -4015,7 +3992,6 @@
   case 131:
 
     {
-        FRAG_VERT_ONLY("mat3", (yylsp[(1) - (1)]));
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[(1) - (1)]));
         (yyval.interm.type).setAggregate(3, true);
@@ -4025,7 +4001,6 @@
   case 132:
 
     {
-        FRAG_VERT_ONLY("mat4", (yylsp[(1) - (1)]));
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[(1) - (1)]));
         (yyval.interm.type).setAggregate(4, true);
@@ -4035,7 +4010,6 @@
   case 133:
 
     {
-        FRAG_VERT_ONLY("sampler2D", (yylsp[(1) - (1)]));
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtSampler2D, qual, (yylsp[(1) - (1)]));
     }
@@ -4044,7 +4018,6 @@
   case 134:
 
     {
-        FRAG_VERT_ONLY("samplerCube", (yylsp[(1) - (1)]));
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtSamplerCube, qual, (yylsp[(1) - (1)]));
     }
@@ -4057,7 +4030,6 @@
             context->error((yylsp[(1) - (1)]), "unsupported type", "samplerExternalOES");
             context->recover();
         }
-        FRAG_VERT_ONLY("samplerExternalOES", (yylsp[(1) - (1)]));
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtSamplerExternalOES, qual, (yylsp[(1) - (1)]));
     }
@@ -4070,7 +4042,6 @@
             context->error((yylsp[(1) - (1)]), "unsupported type", "sampler2DRect");
             context->recover();
         }
-        FRAG_VERT_ONLY("sampler2DRect", (yylsp[(1) - (1)]));
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtSampler2DRect, qual, (yylsp[(1) - (1)]));
     }
@@ -4079,7 +4050,6 @@
   case 137:
 
     {
-        FRAG_VERT_ONLY("struct", (yylsp[(1) - (1)]));
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
         (yyval.interm.type).qualifier = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
     }
