diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-dec-list-type-array-array-var1-var2.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-dec-list-type-array-array-var1-var2.vert
new file mode 100644
index 0000000..287fadd
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-dec-list-type-array-array-var1-var2.vert
@@ -0,0 +1,43 @@
+/* [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(1.0), // a[0][0]
+        vec4(1.0)  // a[0][1]
+      },
+      {
+        vec4(1.0), // a[1][0]
+        vec4(1.0)  // a[1][1]
+      },
+      {
+        vec4(1.0), // a[2][0]
+        vec4(1.0)  // a[2][1]
+      }
+    }, b = {
+      {
+        vec4(1.0), // b[0][0]
+        vec4(1.0)  // b[0][1]
+      },
+      {
+        vec4(1.0), // b[1][0]
+        vec4(1.0)  // b[1][1]
+      },
+      {
+        vec4(1.0), // b[2][0]
+        vec4(1.0)  // b[2][1]
+      }
+    }; // b
+
+  gl_Position = b[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-dec-list-type-array-var1-array-var2-array.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-dec-list-type-array-var1-array-var2-array.vert
new file mode 100644
index 0000000..844081a
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-dec-list-type-array-var1-array-var2-array.vert
@@ -0,0 +1,47 @@
+/* [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[4] = {
+      {
+        vec4(1.0), // a[0][0]
+        vec4(1.0)  // a[0][1]
+      },
+      {
+        vec4(1.0), // a[1][0]
+        vec4(1.0)  // a[1][1]
+      },
+      {
+        vec4(1.0), // a[2][0]
+        vec4(1.0)  // a[2][1]
+      },
+      {
+        vec4(1.0), // a[3][0]
+        vec4(1.0)  // a[3][1]
+      }
+    }, b[3] = {
+      {
+        vec4(1.0), // b[0][0]
+        vec4(1.0)  // b[0][1]
+      },
+      {
+        vec4(1.0), // b[1][0]
+        vec4(1.0)  // b[1][1]
+      },
+      {
+        vec4(1.0), // b[2][0]
+        vec4(1.0)  // b[2][1]
+      }
+    }; // b
+
+  gl_Position = b[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-dec-list-type-var1-array-array-var2-array-array.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-dec-list-type-var1-array-array-var2-array-array.vert
new file mode 100644
index 0000000..c7c97e4
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-dec-list-type-var1-array-array-var2-array-array.vert
@@ -0,0 +1,43 @@
+/* [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(1.0), // a[0][0]
+        vec4(1.0)  // a[0][1]
+      },
+      {
+        vec4(1.0), // a[1][0]
+        vec4(1.0)  // a[1][1]
+      },
+      {
+        vec4(1.0), // a[2][0]
+        vec4(1.0)  // a[2][1]
+      }
+    }, b[3][2] = {
+      {
+        vec4(1.0), // b[0][0]
+        vec4(1.0)  // b[0][1]
+      },
+      {
+        vec4(1.0), // b[1][0]
+        vec4(1.0)  // b[1][1]
+      },
+      {
+        vec4(1.0), // b[2][0]
+        vec4(1.0)  // b[2][1]
+      }
+    }; // b
+
+  gl_Position = b[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-array-array-var.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-array-array-var.vert
new file mode 100644
index 0000000..1d0cedf
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-array-array-var.vert
@@ -0,0 +1,34 @@
+/* [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()
+{
+  struct {
+      vec4[3][2] a;
+  } aggregate = {
+      {
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[0][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[0][1]
+         }, // a[0]
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[1][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[1][1]
+         }, // a[1]
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[2][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[2][1]
+         } // a[2]
+      }
+  };
+
+  gl_Position = aggregate.a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-array-var-array.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-array-var-array.vert
new file mode 100644
index 0000000..5afc308
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-array-var-array.vert
@@ -0,0 +1,34 @@
+/* [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()
+{
+  struct {
+      vec4[2] a[3];
+  } aggregate = {
+      {
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[0][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[0][1]
+         }, // a[0]
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[1][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[1][1]
+         }, // a[1]
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[2][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[2][1]
+         } // a[2]
+      }
+  };
+
+  gl_Position = aggregate.a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-array-var-array2.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-array-var-array2.vert
new file mode 100644
index 0000000..15e24ce
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-array-var-array2.vert
@@ -0,0 +1,34 @@
+/* [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()
+{
+  struct {
+      vec4[2] a[3];
+  } aggregate = {
+      {
+         {
+           vec4(1.0), // a[0][0]
+           vec4(1.0)  // a[0][1]
+         }, // a[0]
+         {
+           vec4(1.0), // a[1][0]
+           vec4(1.0)  // a[1][1]
+         }, // a[1]
+         {
+           vec4(1.0), // a[2][0]
+           vec4(1.0)  // a[2][1]
+         } // a[2]
+      }
+  };
+
+  gl_Position = aggregate.a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-dec-list-array-array-var1-var2.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-dec-list-array-array-var1-var2.vert
new file mode 100644
index 0000000..b0abb4a
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-dec-list-array-array-var1-var2.vert
@@ -0,0 +1,48 @@
+/* [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()
+{
+  struct {
+      vec4[3][2] a, b;
+  } aggregate = {
+      {
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[0][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[0][1]
+         }, // a[0]
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[1][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[1][1]
+         }, // a[1]
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[2][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[2][1]
+         } // a[2]
+      }, // a
+      {
+         {
+           {1.0, 2.0, 3.0, 4.0}, // b[0][0]
+           {5.0, 6.0, 7.0, 8.0}  // b[0][1]
+         }, // b[0]
+         {
+           {1.0, 2.0, 3.0, 4.0}, // b[1][0]
+           {5.0, 6.0, 7.0, 8.0}  // b[1][1]
+         }, // b[1]
+         {
+           {1.0, 2.0, 3.0, 4.0}, // b[2][0]
+           {5.0, 6.0, 7.0, 8.0}  // b[2][1]
+         } // b[2]
+      } // b
+  };
+
+  gl_Position = aggregate.a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-dec-list-array-var1-array-var2.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-dec-list-array-var1-array-var2.vert
new file mode 100644
index 0000000..782349b
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-dec-list-array-var1-array-var2.vert
@@ -0,0 +1,38 @@
+/* [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()
+{
+  struct {
+      vec4[2] a[3], b;
+  } aggregate = {
+      {
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[0][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[0][1]
+         }, // a[0]
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[1][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[1][1]
+         }, // a[1]
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[2][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[2][1]
+         } // a[2]
+      }, // a
+      {
+         { 1.0, 2.0, 3.0, 4.0 }, // b[0]
+         { 1.0, 2.0, 3.0, 4.0 }  // b[1]
+      }
+  };
+
+  gl_Position = aggregate.a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-dec-list-array-var1-var2-array.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-dec-list-array-var1-var2-array.vert
new file mode 100644
index 0000000..6663337
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-dec-list-array-var1-var2-array.vert
@@ -0,0 +1,38 @@
+/* [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()
+{
+  struct {
+      vec4[2] b, a[3];
+  } aggregate = {
+      {
+         { 1.0, 2.0, 3.0, 4.0 }, // b[0]
+         { 1.0, 2.0, 3.0, 4.0 }  // b[1]
+      },
+      {
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[0][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[0][1]
+         }, // a[0]
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[1][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[1][1]
+         }, // a[1]
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[2][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[2][1]
+         } // a[2]
+      } // a
+  };
+
+  gl_Position = aggregate.a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-var-array-array.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-var-array-array.vert
new file mode 100644
index 0000000..72ccacf
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-struct-field-var-array-array.vert
@@ -0,0 +1,34 @@
+/* [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()
+{
+  struct {
+      vec4 a[3][2];
+  } aggregate = {
+      {
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[0][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[0][1]
+         }, // a[0]
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[1][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[1][1]
+         }, // a[1]
+         {
+           {1.0, 2.0, 3.0, 4.0}, // a[2][0]
+           {5.0, 6.0, 7.0, 8.0}  // a[2][1]
+         } // a[2]
+      }
+  };
+
+  gl_Position = aggregate.a[2][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-three-dimensions.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-three-dimensions.vert
new file mode 100644
index 0000000..a0e06a6
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-three-dimensions.vert
@@ -0,0 +1,22 @@
+/* [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][4] = {vec4[2][4](vec4[4](vec4(0.0), vec4(1.0), vec4(0.0), vec4(1.0)),
+                                vec4[4](vec4(0.0), vec4(1.0), vec4(0.0), vec4(1.0))),
+                     vec4[2][4](vec4[4](vec4(0.0), vec4(1.0), vec4(0.0), vec4(1.0)),
+                                vec4[4](vec4(0.0), vec4(1.0), vec4(0.0), vec4(1.0))),
+                     vec4[2][4](vec4[4](vec4(0.0), vec4(1.0), vec4(0.0), vec4(1.0)),
+                                vec4[4](vec4(0.0), vec4(1.0), vec4(0.0), vec4(1.0)))};
+
+  gl_Position = a[2][1][1];
+}
diff --git a/tests/spec/arb_arrays_of_arrays/compiler/initializer-three-dimensions2.vert b/tests/spec/arb_arrays_of_arrays/compiler/initializer-three-dimensions2.vert
new file mode 100644
index 0000000..03a1e83
--- /dev/null
+++ b/tests/spec/arb_arrays_of_arrays/compiler/initializer-three-dimensions2.vert
@@ -0,0 +1,22 @@
+/* [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][4] = {{vec4[4](vec4(0.0), vec4(1.0), vec4(0.0), vec4(1.0)),
+                      vec4[4](vec4(0.0), vec4(1.0), vec4(0.0), vec4(1.0))},
+                     {vec4[4](vec4(0.0), vec4(1.0), vec4(0.0), vec4(1.0)),
+                      vec4[4](vec4(0.0), vec4(1.0), vec4(0.0), vec4(1.0))},
+                     {vec4[4](vec4(0.0), vec4(1.0), vec4(0.0), vec4(1.0)),
+                      vec4[4](vec4(0.0), vec4(1.0), vec4(0.0), vec4(1.0))}};
+
+  gl_Position = a[2][1][1];
+}
