diff --git a/tests/all.py b/tests/all.py
index ecb5c7b..32cfe19 100644
--- a/tests/all.py
+++ b/tests/all.py
@@ -1319,6 +1319,13 @@ import_glsl_parser_tests(spec['AMD_conservative_depth'],
 			 os.path.join(testsDir, 'spec', 'amd_conservative_depth'),
 			 [''])
 
+# Group ARB_arrays_of_arrays
+arb_arrays_of_arrays = {}
+spec['ARB_arrays_of_arrays'] = arb_arrays_of_arrays
+import_glsl_parser_tests(arb_arrays_of_arrays,
+			 os.path.join(testsDir, 'spec', 'arb_arrays_of_arrays'),
+			 ['compiler'])
+
 # Group AMD_shader_trinary_minmax
 spec['AMD_shader_trinary_minmax'] = {}
 import_glsl_parser_tests(spec['AMD_shader_trinary_minmax'],
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/constructor-array-array-var.vert b/tests/spec/arb_arrays_of_arrays/compiler/constructor-array-array-var.vert
new file mode 100644
index 0000000..5b88054
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/constructor-array-array-var.vert
@@ -0,0 +1,17 @@
+/* [config]
+ * expect_result: pass
+ * glsl_version: 1.20
+ * require_extensions: GL_ARB_arrays_of_arrays
+ * [end config]
+ */
+#version 120
+#extension GL_ARB_arrays_of_arrays: enable
+
+void main()
+{
+  vec4[3][2] a = vec4[3][2](vec4[2](vec4(0.0), vec4(1.0)),
+                            vec4[2](vec4(0.0), vec4(1.0)),
+                            vec4[2](vec4(0.0), vec4(1.0)));
+
+  gl_Position = a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/constructor-array-var-array.vert b/tests/spec/arb_arrays_of_arrays/compiler/constructor-array-var-array.vert
new file mode 100644
index 0000000..03fd090
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/constructor-array-var-array.vert
@@ -0,0 +1,17 @@
+/* [config]
+ * expect_result: pass
+ * glsl_version: 1.20
+ * require_extensions: GL_ARB_arrays_of_arrays
+ * [end config]
+ */
+#version 120
+#extension GL_ARB_arrays_of_arrays: enable
+
+void main()
+{
+  vec4[2] a[3] = vec4[3][2](vec4[2](vec4(0.0), vec4(1.0)),
+                            vec4[2](vec4(0.0), vec4(1.0)),
+                            vec4[2](vec4(0.0), vec4(1.0)));
+
+  gl_Position = a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/constructor-invalid.vert b/tests/spec/arb_arrays_of_arrays/compiler/constructor-invalid.vert
new file mode 100644
index 0000000..025fa01
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/constructor-invalid.vert
@@ -0,0 +1,17 @@
+/* [config]
+ * expect_result: fail
+ * glsl_version: 1.20
+ * require_extensions: GL_ARB_arrays_of_arrays
+ * [end config]
+ */
+#version 120
+#extension GL_ARB_arrays_of_arrays: enable
+
+void main()
+{
+  vec4[3][3] a = vec4[3][3](vec4[2](vec4(0.0), vec4(1.0)),
+                            vec4[2](vec4(0.0), vec4(1.0)),
+                            vec4[2](vec4(0.0), vec4(1.0)));
+
+  gl_Position = a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/constructor-invalid2.vert b/tests/spec/arb_arrays_of_arrays/compiler/constructor-invalid2.vert
new file mode 100644
index 0000000..182a03a
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/constructor-invalid2.vert
@@ -0,0 +1,16 @@
+/* [config]
+ * expect_result: fail
+ * glsl_version: 1.20
+ * require_extensions: GL_ARB_arrays_of_arrays
+ * [end config]
+ */
+#version 120
+#extension GL_ARB_arrays_of_arrays: enable
+
+void main()
+{
+  vec4[3][2] a = vec4[3][2](vec4[2](vec4(0.0), vec4(1.0)),
+                            vec4[2](vec4(0.0), vec4(1.0)));
+
+  gl_Position = a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/constructor-var-array-array.vert b/tests/spec/arb_arrays_of_arrays/compiler/constructor-var-array-array.vert
new file mode 100644
index 0000000..847e4ed
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/constructor-var-array-array.vert
@@ -0,0 +1,17 @@
+/* [config]
+ * expect_result: pass
+ * glsl_version: 1.20
+ * require_extensions: GL_ARB_arrays_of_arrays
+ * [end config]
+ */
+#version 120
+#extension GL_ARB_arrays_of_arrays: enable
+
+void main()
+{
+  vec4 a[3][2] = vec4[3][2](vec4[2](vec4(0.0), vec4(1.0)),
+                            vec4[2](vec4(0.0), vec4(1.0)),
+                            vec4[2](vec4(0.0), vec4(1.0)));
+
+  gl_Position = a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initialization-invalid.vert b/tests/spec/arb_arrays_of_arrays/compiler/initialization-invalid.vert
new file mode 100644
index 0000000..f6870a0
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initialization-invalid.vert
@@ -0,0 +1,17 @@
+/* [config]
+ * expect_result: fail
+ * glsl_version: 1.20
+ * require_extensions: GL_ARB_arrays_of_arrays
+ * [end config]
+ */
+#version 120
+#extension GL_ARB_arrays_of_arrays: enable
+
+void main()
+{
+  vec4[4][2] a = vec4[3][2](vec4[2](vec4(0.0), vec4(1.0)),
+                            vec4[2](vec4(0.0), vec4(1.0)),
+                            vec4[2](vec4(0.0), vec4(1.0)));
+
+  gl_Position = a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initialization-invalid2.vert b/tests/spec/arb_arrays_of_arrays/compiler/initialization-invalid2.vert
new file mode 100644
index 0000000..23da9ce
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initialization-invalid2.vert
@@ -0,0 +1,19 @@
+/* [config]
+ * expect_result: fail
+ * glsl_version: 1.20
+ * require_extensions: GL_ARB_arrays_of_arrays
+ * require_extensions: GL_ARB_shading_language_420pack
+ * [end config]
+ */
+#version 120
+#extension GL_ARB_arrays_of_arrays: enable
+#extension GL_ARB_shading_language_420pack: enable
+
+void main()
+{
+  vec4 a[2][2] = {{ vec4(0.0), vec4(1.0) },
+                  { vec4(0.0), vec4(1.0) },
+                  { vec4(0.0), vec4(1.0) }};
+
+  gl_Position = a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initialization-invalid3.vert b/tests/spec/arb_arrays_of_arrays/compiler/initialization-invalid3.vert
new file mode 100644
index 0000000..412088f
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initialization-invalid3.vert
@@ -0,0 +1,19 @@
+/* [config]
+ * expect_result: fail
+ * glsl_version: 1.20
+ * require_extensions: GL_ARB_arrays_of_arrays
+ * require_extensions: GL_ARB_shading_language_420pack
+ * [end config]
+ */
+#version 120
+#extension GL_ARB_arrays_of_arrays: enable
+#extension GL_ARB_shading_language_420pack: enable
+
+void main()
+{
+  vec4 a[3][3] = {vec4[2](vec4(0.0), vec4(1.0)),
+                  vec4[2](vec4(0.0), vec4(1.0)),
+                  vec4[2](vec4(0.0), vec4(1.0)) };
+
+  gl_Position = a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initialization-invalid4.vert b/tests/spec/arb_arrays_of_arrays/compiler/initialization-invalid4.vert
new file mode 100644
index 0000000..4c32e97
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initialization-invalid4.vert
@@ -0,0 +1,19 @@
+/* [config]
+ * expect_result: fail
+ * glsl_version: 1.20
+ * require_extensions: GL_ARB_arrays_of_arrays
+ * require_extensions: GL_ARB_shading_language_420pack
+ * [end config]
+ */
+#version 120
+#extension GL_ARB_arrays_of_arrays: enable
+#extension GL_ARB_shading_language_420pack: enable
+
+void main()
+{
+  vec4 a[2][2] = {vec4[2](vec4(0.0), vec4(1.0)),
+                  vec4[2](vec4(0.0), vec4(1.0)),
+                  vec4[2](vec4(0.0), vec4(1.0)) };
+
+  gl_Position = a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-array-array-var.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-array-array-var.vert
new file mode 100644
index 0000000..993bf60
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-array-array-var.vert
@@ -0,0 +1,19 @@
+/* [config]
+ * expect_result: pass
+ * glsl_version: 1.20
+ * require_extensions: GL_ARB_arrays_of_arrays
+ * require_extensions: GL_ARB_shading_language_420pack
+ * [end config]
+ */
+#version 120
+#extension GL_ARB_arrays_of_arrays: enable
+#extension GL_ARB_shading_language_420pack: enable
+
+void main()
+{
+  vec4[3][2] a = {vec4[2](vec4(0.0), vec4(1.0)),
+                  vec4[2](vec4(0.0), vec4(1.0)),
+                  vec4[2](vec4(0.0), vec4(1.0)) };
+
+  gl_Position = a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-array-array-var2.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-array-array-var2.vert
new file mode 100644
index 0000000..7e77f3e
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-array-array-var2.vert
@@ -0,0 +1,19 @@
+/* [config]
+ * expect_result: pass
+ * glsl_version: 1.20
+ * require_extensions: GL_ARB_arrays_of_arrays
+ * require_extensions: GL_ARB_shading_language_420pack
+ * [end config]
+ */
+#version 120
+#extension GL_ARB_arrays_of_arrays: enable
+#extension GL_ARB_shading_language_420pack: enable
+
+void main()
+{
+  vec4[3][2] a = {{ vec4(0.0), vec4(1.0) },
+                  { vec4(0.0), vec4(1.0) },
+                  { vec4(0.0), vec4(1.0) }};
+
+  gl_Position = a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-array-var-array.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-array-var-array.vert
new file mode 100644
index 0000000..d4c7e58
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-array-var-array.vert
@@ -0,0 +1,19 @@
+/* [config]
+ * expect_result: pass
+ * glsl_version: 1.20
+ * require_extensions: GL_ARB_arrays_of_arrays
+ * require_extensions: GL_ARB_shading_language_420pack
+ * [end config]
+ */
+#version 120
+#extension GL_ARB_arrays_of_arrays: enable
+#extension GL_ARB_shading_language_420pack: enable
+
+void main()
+{
+  vec4[2] a[3] = {vec4[2](vec4(0.0), vec4(1.0)),
+                  vec4[2](vec4(0.0), vec4(1.0)),
+                  vec4[2](vec4(0.0), vec4(1.0)) };
+
+  gl_Position = a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-array-var-array2.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-array-var-array2.vert
new file mode 100644
index 0000000..2a93dda
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-array-var-array2.vert
@@ -0,0 +1,19 @@
+/* [config]
+ * expect_result: pass
+ * glsl_version: 1.20
+ * require_extensions: GL_ARB_arrays_of_arrays
+ * require_extensions: GL_ARB_shading_language_420pack
+ * [end config]
+ */
+#version 120
+#extension GL_ARB_arrays_of_arrays: enable
+#extension GL_ARB_shading_language_420pack: enable
+
+void main()
+{
+  vec4[2] a[3] = {{ vec4(0.0), vec4(1.0) },
+                  { vec4(0.0), vec4(1.0) },
+                  { vec4(0.0), vec4(1.0) }};
+
+  gl_Position = a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-var-array-array.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-var-array-array.vert
new file mode 100644
index 0000000..8a53cb7
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-var-array-array.vert
@@ -0,0 +1,19 @@
+/* [config]
+ * expect_result: pass
+ * glsl_version: 1.20
+ * require_extensions: GL_ARB_arrays_of_arrays
+ * require_extensions: GL_ARB_shading_language_420pack
+ * [end config]
+ */
+#version 120
+#extension GL_ARB_arrays_of_arrays: enable
+#extension GL_ARB_shading_language_420pack: enable
+
+void main()
+{
+  vec4 a[3][2] = {vec4[2](vec4(0.0), vec4(1.0)),
+                  vec4[2](vec4(0.0), vec4(1.0)),
+                  vec4[2](vec4(0.0), vec4(1.0)) };
+
+  gl_Position = a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-var-array-array2.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-var-array-array2.vert
new file mode 100644
index 0000000..41fd76b
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-var-array-array2.vert
@@ -0,0 +1,19 @@
+/* [config]
+ * expect_result: pass
+ * glsl_version: 1.20
+ * require_extensions: GL_ARB_arrays_of_arrays
+ * require_extensions: GL_ARB_shading_language_420pack
+ * [end config]
+ */
+#version 120
+#extension GL_ARB_arrays_of_arrays: enable
+#extension GL_ARB_shading_language_420pack: enable
+
+void main()
+{
+  vec4 a[3][2] = {{ vec4(0.0), vec4(1.0) },
+                  { vec4(0.0), vec4(1.0) },
+                  { vec4(0.0), vec4(1.0) }};
+
+  gl_Position = a[2][1];
+}
