diff --git a/src/ast/builder.h b/src/ast/builder.h
index 4b441f5..59d3ce2 100644
--- a/src/ast/builder.h
+++ b/src/ast/builder.h
@@ -146,7 +146,7 @@
   /// @param n the array size. 0 represents unbounded
   /// @return the tint AST type for a array of size `n` of type `T`
   type::Array* array(type::Type* subtype, uint32_t n) const {
-    return mod_->create<type::Array>(subtype, n);
+    return mod_->create<type::Array>(subtype, n, ArrayDecorationList{});
   }
 
   /// @return the tint AST type for an array of size `N` of type `T`
diff --git a/src/ast/type/access_control_type_test.cc b/src/ast/type/access_control_type_test.cc
index b49f64c..65e6cfe 100644
--- a/src/ast/type/access_control_type_test.cc
+++ b/src/ast/type/access_control_type_test.cc
@@ -106,20 +106,16 @@
 
 TEST_F(AccessControlTest, MinBufferBindingSizeArray) {
   U32 u32;
-  Array array(&u32, 4);
-  ArrayDecorationList decos;
-  decos.push_back(create<StrideDecoration>(4, Source{}));
-  array.set_decorations(decos);
+  Array array(&u32, 4,
+              ArrayDecorationList{create<StrideDecoration>(4, Source{})});
   AccessControl at{ast::AccessControl::kReadOnly, &array};
   EXPECT_EQ(16u, at.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
 }
 
 TEST_F(AccessControlTest, MinBufferBindingSizeRuntimeArray) {
   U32 u32;
-  Array array(&u32);
-  ArrayDecorationList decos;
-  decos.push_back(create<StrideDecoration>(4, Source{}));
-  array.set_decorations(decos);
+  Array array(&u32, 0,
+              ArrayDecorationList{create<StrideDecoration>(4, Source{})});
   AccessControl at{ast::AccessControl::kReadOnly, &array};
   EXPECT_EQ(4u, at.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
 }
@@ -153,20 +149,16 @@
 
 TEST_F(AccessControlTest, BaseAlignmentArray) {
   U32 u32;
-  Array array(&u32, 4);
-  ArrayDecorationList decos;
-  decos.push_back(create<StrideDecoration>(4, Source{}));
-  array.set_decorations(decos);
+  Array array(&u32, 4,
+              ArrayDecorationList{create<StrideDecoration>(4, Source{})});
   AccessControl at{ast::AccessControl::kReadOnly, &array};
   EXPECT_EQ(16u, at.BaseAlignment(MemoryLayout::kUniformBuffer));
 }
 
 TEST_F(AccessControlTest, BaseAlignmentRuntimeArray) {
   U32 u32;
-  Array array(&u32);
-  ArrayDecorationList decos;
-  decos.push_back(create<StrideDecoration>(4, Source{}));
-  array.set_decorations(decos);
+  Array array(&u32, 0,
+              ArrayDecorationList{create<StrideDecoration>(4, Source{})});
   AccessControl at{ast::AccessControl::kReadOnly, &array};
   EXPECT_EQ(16u, at.BaseAlignment(MemoryLayout::kUniformBuffer));
 }
diff --git a/src/ast/type/alias_type_test.cc b/src/ast/type/alias_type_test.cc
index 7979efa..2c2dc49 100644
--- a/src/ast/type/alias_type_test.cc
+++ b/src/ast/type/alias_type_test.cc
@@ -169,20 +169,20 @@
 
 TEST_F(AliasTest, MinBufferBindingSizeArray) {
   U32 u32;
-  Array array(&u32, 4);
-  ArrayDecorationList decos;
-  decos.push_back(create<StrideDecoration>(4, Source{}));
-  array.set_decorations(decos);
+  Array array(&u32, 4,
+              ArrayDecorationList{
+                  create<StrideDecoration>(4, Source{}),
+              });
   Alias alias{"alias", &array};
   EXPECT_EQ(16u, alias.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
 }
 
 TEST_F(AliasTest, MinBufferBindingSizeRuntimeArray) {
   U32 u32;
-  Array array(&u32);
-  ArrayDecorationList decos;
-  decos.push_back(create<StrideDecoration>(4, Source{}));
-  array.set_decorations(decos);
+  Array array(&u32, 0,
+              ArrayDecorationList{
+                  create<StrideDecoration>(4, Source{}),
+              });
   Alias alias{"alias", &array};
   EXPECT_EQ(4u, alias.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
 }
@@ -218,20 +218,20 @@
 
 TEST_F(AliasTest, BaseAlignmentArray) {
   U32 u32;
-  Array array(&u32, 4);
-  ArrayDecorationList decos;
-  decos.push_back(create<StrideDecoration>(4, Source{}));
-  array.set_decorations(decos);
+  Array array(&u32, 4,
+              ArrayDecorationList{
+                  create<StrideDecoration>(4, Source{}),
+              });
   Alias alias{"alias", &array};
   EXPECT_EQ(16u, alias.BaseAlignment(MemoryLayout::kUniformBuffer));
 }
 
 TEST_F(AliasTest, BaseAlignmentRuntimeArray) {
   U32 u32;
-  Array array(&u32);
-  ArrayDecorationList decos;
-  decos.push_back(create<StrideDecoration>(4, Source{}));
-  array.set_decorations(decos);
+  Array array(&u32, 0,
+              ArrayDecorationList{
+                  create<StrideDecoration>(4, Source{}),
+              });
   Alias alias{"alias", &array};
   EXPECT_EQ(16u, alias.BaseAlignment(MemoryLayout::kUniformBuffer));
 }
diff --git a/src/ast/type/array_type.cc b/src/ast/type/array_type.cc
index bc22cf5..be71ad7 100644
--- a/src/ast/type/array_type.cc
+++ b/src/ast/type/array_type.cc
@@ -28,9 +28,8 @@
 namespace ast {
 namespace type {
 
-Array::Array(Type* subtype) : subtype_(subtype) {}
-
-Array::Array(Type* subtype, uint32_t size) : subtype_(subtype), size_(size) {}
+Array::Array(Type* subtype, uint32_t size, ArrayDecorationList decorations)
+    : subtype_(subtype), size_(size), decos_(decorations) {}
 
 Array::Array(Array&&) = default;
 
@@ -98,9 +97,8 @@
 }
 
 Array* Array::Clone(CloneContext* ctx) const {
-  auto cloned = std::make_unique<Array>(ctx->Clone(subtype_), size_);
-  cloned->set_decorations(ctx->Clone(decorations()));
-  return ctx->mod->unique_type(std::move(cloned));
+  return ctx->mod->create<Array>(ctx->Clone(subtype_), size_,
+                                 ctx->Clone(decorations()));
 }
 
 }  // namespace type
diff --git a/src/ast/type/array_type.h b/src/ast/type/array_type.h
index 8c4bc9a..a120a46 100644
--- a/src/ast/type/array_type.h
+++ b/src/ast/type/array_type.h
@@ -30,13 +30,12 @@
 /// An array type. If size is zero then it is a runtime array.
 class Array : public Castable<Array, Type> {
  public:
-  /// Constructor for runtime array
-  /// @param subtype the type of the array elements
-  explicit Array(Type* subtype);
   /// Constructor
   /// @param subtype the type of the array elements
-  /// @param size the number of elements in the array
-  Array(Type* subtype, uint32_t size);
+  /// @param size the number of elements in the array. `0` represents a
+  /// runtime-sized array.
+  /// @param decorations the array decorations
+  Array(Type* subtype, uint32_t size, ArrayDecorationList decorations);
   /// Move constructor
   Array(Array&&);
   ~Array() override;
@@ -55,9 +54,6 @@
   ///          0 for non-host shareable types.
   uint64_t BaseAlignment(MemoryLayout mem_layout) const override;
 
-  /// Sets the array decorations
-  /// @param decos the decorations to set
-  void set_decorations(ArrayDecorationList decos) { decos_ = std::move(decos); }
   /// @returns the array decorations
   const ArrayDecorationList& decorations() const { return decos_; }
 
diff --git a/src/ast/type/array_type_test.cc b/src/ast/type/array_type_test.cc
index 3dbcdda..5d929fa 100644
--- a/src/ast/type/array_type_test.cc
+++ b/src/ast/type/array_type_test.cc
@@ -39,7 +39,7 @@
 
 TEST_F(ArrayTest, CreateSizedArray) {
   U32 u32;
-  Array arr{&u32, 3};
+  Array arr{&u32, 3, ArrayDecorationList{}};
   EXPECT_EQ(arr.type(), &u32);
   EXPECT_EQ(arr.size(), 3u);
   EXPECT_TRUE(arr.Is<Array>());
@@ -48,7 +48,7 @@
 
 TEST_F(ArrayTest, CreateRuntimeArray) {
   U32 u32;
-  Array arr{&u32};
+  Array arr{&u32, 0, ArrayDecorationList{}};
   EXPECT_EQ(arr.type(), &u32);
   EXPECT_EQ(arr.size(), 0u);
   EXPECT_TRUE(arr.Is<Array>());
@@ -58,7 +58,7 @@
 TEST_F(ArrayTest, Is) {
   I32 i32;
 
-  Array arr{&i32, 3};
+  Array arr{&i32, 3, ArrayDecorationList{}};
   Type* ty = &arr;
   EXPECT_FALSE(ty->Is<AccessControl>());
   EXPECT_FALSE(ty->Is<Alias>());
@@ -77,70 +77,55 @@
 
 TEST_F(ArrayTest, TypeName) {
   I32 i32;
-  Array arr{&i32};
+  Array arr{&i32, 0, ArrayDecorationList{}};
   EXPECT_EQ(arr.type_name(), "__array__i32");
 }
 
 TEST_F(ArrayTest, TypeName_RuntimeArray) {
   I32 i32;
-  Array arr{&i32, 3};
+  Array arr{&i32, 3, ArrayDecorationList{}};
   EXPECT_EQ(arr.type_name(), "__array__i32_3");
 }
 
 TEST_F(ArrayTest, TypeName_WithStride) {
   I32 i32;
-  ArrayDecorationList decos;
-  decos.push_back(create<StrideDecoration>(16, Source{}));
-
-  Array arr{&i32, 3};
-  arr.set_decorations(decos);
+  Array arr{&i32, 3,
+            ArrayDecorationList{create<StrideDecoration>(16, Source{})}};
   EXPECT_EQ(arr.type_name(), "__array__i32_3_stride_16");
 }
 
 TEST_F(ArrayTest, MinBufferBindingSizeNoStride) {
   U32 u32;
-  Array arr(&u32, 4);
+  Array arr(&u32, 4, ArrayDecorationList{});
   EXPECT_EQ(0u, arr.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
 }
 
 TEST_F(ArrayTest, MinBufferBindingSizeArray) {
   U32 u32;
-  ArrayDecorationList decos;
-  decos.push_back(create<StrideDecoration>(4, Source{}));
-
-  Array arr(&u32, 4);
-  arr.set_decorations(decos);
+  Array arr(&u32, 4,
+            ArrayDecorationList{create<StrideDecoration>(4, Source{})});
   EXPECT_EQ(16u, arr.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
 }
 
 TEST_F(ArrayTest, MinBufferBindingSizeRuntimeArray) {
   U32 u32;
-  ArrayDecorationList decos;
-  decos.push_back(create<StrideDecoration>(4, Source{}));
-
-  Array arr(&u32);
-  arr.set_decorations(decos);
+  Array arr(&u32, 0,
+            ArrayDecorationList{create<StrideDecoration>(4, Source{})});
   EXPECT_EQ(4u, arr.MinBufferBindingSize(MemoryLayout::kUniformBuffer));
 }
 
 TEST_F(ArrayTest, BaseAlignmentArray) {
   U32 u32;
-  ArrayDecorationList decos;
-  decos.push_back(create<StrideDecoration>(4, Source{}));
-
-  Array arr(&u32, 4);
-  arr.set_decorations(decos);
+  Array arr(&u32, 4,
+            ArrayDecorationList{create<StrideDecoration>(4, Source{})});
   EXPECT_EQ(16u, arr.BaseAlignment(MemoryLayout::kUniformBuffer));
   EXPECT_EQ(4u, arr.BaseAlignment(MemoryLayout::kStorageBuffer));
 }
 
 TEST_F(ArrayTest, BaseAlignmentRuntimeArray) {
   U32 u32;
-  ArrayDecorationList decos;
-  decos.push_back(create<StrideDecoration>(4, Source{}));
-
-  Array arr(&u32);
-  arr.set_decorations(decos);
+  Array arr(&u32, 0,
+            ArrayDecorationList{create<StrideDecoration>(4, Source{})});
   EXPECT_EQ(16u, arr.BaseAlignment(MemoryLayout::kUniformBuffer));
   EXPECT_EQ(4u, arr.BaseAlignment(MemoryLayout::kStorageBuffer));
 }
diff --git a/src/ast/type/matrix_type.cc b/src/ast/type/matrix_type.cc
index ed865a7..12eea45 100644
--- a/src/ast/type/matrix_type.cc
+++ b/src/ast/type/matrix_type.cc
@@ -52,7 +52,7 @@
 
 uint64_t Matrix::BaseAlignment(MemoryLayout mem_layout) const {
   Vector vec(subtype_, rows_);
-  Array arr(&vec, columns_);
+  Array arr(&vec, columns_, ArrayDecorationList{});
   return arr.BaseAlignment(mem_layout);
 }
 
diff --git a/src/ast/type/struct_type_test.cc b/src/ast/type/struct_type_test.cc
index 3dd11f1..7e28685 100644
--- a/src/ast/type/struct_type_test.cc
+++ b/src/ast/type/struct_type_test.cc
@@ -99,12 +99,8 @@
 
 TEST_F(StructTest, MinBufferBindingSizeArray) {
   U32 u32;
-  Array arr(&u32, 4);
-  {
-    ArrayDecorationList decos;
-    decos.push_back(create<StrideDecoration>(4, Source{}));
-    arr.set_decorations(decos);
-  }
+  Array arr(&u32, 4,
+            ArrayDecorationList{create<StrideDecoration>(4, Source{})});
 
   StructMemberList members;
   {
@@ -134,12 +130,8 @@
 
 TEST_F(StructTest, MinBufferBindingSizeRuntimeArray) {
   U32 u32;
-  Array arr(&u32);
-  {
-    ArrayDecorationList decos;
-    decos.push_back(create<StrideDecoration>(4, Source{}));
-    arr.set_decorations(decos);
-  }
+  Array arr(&u32, 0,
+            ArrayDecorationList{create<StrideDecoration>(4, Source{})});
 
   StructMemberList members;
   {
@@ -248,12 +240,8 @@
 
 TEST_F(StructTest, BaseAlignmentArray) {
   U32 u32;
-  Array arr(&u32, 4);
-  {
-    ArrayDecorationList decos;
-    decos.push_back(create<StrideDecoration>(4, Source{}));
-    arr.set_decorations(decos);
-  }
+  Array arr(&u32, 4,
+            ArrayDecorationList{create<StrideDecoration>(4, Source{})});
 
   StructMemberList members;
   {
@@ -281,12 +269,8 @@
 
 TEST_F(StructTest, BaseAlignmentRuntimeArray) {
   U32 u32;
-  Array arr(&u32);
-  {
-    ArrayDecorationList decos;
-    decos.push_back(create<StrideDecoration>(4, Source{}));
-    arr.set_decorations(decos);
-  }
+  Array arr(&u32, 0,
+            ArrayDecorationList{create<StrideDecoration>(4, Source{})});
 
   StructMemberList members;
   {
diff --git a/src/inspector/inspector_test.cc b/src/inspector/inspector_test.cc
index 9439593..9014d26 100644
--- a/src/inspector/inspector_test.cc
+++ b/src/inspector/inspector_test.cc
@@ -675,13 +675,13 @@
   ast::type::U32* u32_type() { return &u32_type_; }
   ast::type::Array* u32_array_type(uint32_t count) {
     if (array_type_memo_.find(count) == array_type_memo_.end()) {
-      array_type_memo_[count] =
-          std::make_unique<ast::type::Array>(u32_type(), count);
-      ast::ArrayDecorationList decos;
-      decos.push_back(create<ast::StrideDecoration>(4, Source{}));
-      array_type_memo_[count]->set_decorations(decos);
+      array_type_memo_[count] = create<ast::type::Array>(
+          u32_type(), count,
+          ast::ArrayDecorationList{
+              create<ast::StrideDecoration>(4, Source{}),
+          });
     }
-    return array_type_memo_[count].get();
+    return array_type_memo_[count];
   }
   ast::type::Vector* vec_type(ast::type::Type* type, uint32_t count) {
     if (vector_type_memo_.find(std::tie(type, count)) ==
@@ -718,7 +718,7 @@
   ast::type::Void void_type_;
   ast::type::Sampler sampler_type_;
   ast::type::Sampler comparison_sampler_type_;
-  std::map<uint32_t, std::unique_ptr<ast::type::Array>> array_type_memo_;
+  std::map<uint32_t, ast::type::Array*> array_type_memo_;
   std::map<std::tuple<ast::type::Type*, uint32_t>,
            std::unique_ptr<ast::type::Vector>>
       vector_type_memo_;
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc
index 202293d..12908b4 100644
--- a/src/reader/spirv/parser_impl.cc
+++ b/src/reader/spirv/parser_impl.cc
@@ -710,11 +710,11 @@
   if (ast_elem_ty == nullptr) {
     return nullptr;
   }
-  auto ast_type = std::make_unique<ast::type::Array>(ast_elem_ty);
-  if (!ApplyArrayDecorations(rtarr_ty, ast_type.get())) {
+  ast::ArrayDecorationList decorations;
+  if (!ParseArrayDecorations(rtarr_ty, &decorations)) {
     return nullptr;
   }
-  return ast_module_.unique_type(std::move(ast_type));
+  return create<ast::type::Array>(ast_elem_ty, 0, std::move(decorations));
 }
 
 ast::type::Type* ParserImpl::ConvertType(
@@ -751,20 +751,22 @@
            << num_elem;
     return nullptr;
   }
-  auto ast_type = std::make_unique<ast::type::Array>(
-      ast_elem_ty, static_cast<uint32_t>(num_elem));
-  if (!ApplyArrayDecorations(arr_ty, ast_type.get())) {
+  ast::ArrayDecorationList decorations;
+  if (!ParseArrayDecorations(arr_ty, &decorations)) {
     return nullptr;
   }
+
   if (remap_buffer_block_type_.count(elem_type_id)) {
     remap_buffer_block_type_.insert(type_mgr_->GetId(arr_ty));
   }
-  return ast_module_.unique_type(std::move(ast_type));
+  return create<ast::type::Array>(ast_elem_ty, static_cast<uint32_t>(num_elem),
+                                  std::move(decorations));
 }
 
-bool ParserImpl::ApplyArrayDecorations(
+bool ParserImpl::ParseArrayDecorations(
     const spvtools::opt::analysis::Type* spv_type,
-    ast::type::Array* ast_type) {
+    ast::ArrayDecorationList* decorations) {
+  bool has_array_stride = false;
   const auto type_id = type_mgr_->GetId(spv_type);
   for (auto& decoration : this->GetDecorationsFor(type_id)) {
     if (decoration.size() == 2 && decoration[0] == SpvDecorationArrayStride) {
@@ -773,13 +775,12 @@
         return Fail() << "invalid array type ID " << type_id
                       << ": ArrayStride can't be 0";
       }
-      if (ast_type->has_array_stride()) {
+      if (has_array_stride) {
         return Fail() << "invalid array type ID " << type_id
                       << ": multiple ArrayStride decorations";
       }
-      ast::ArrayDecorationList decos;
-      decos.push_back(create<ast::StrideDecoration>(stride, Source{}));
-      ast_type->set_decorations(std::move(decos));
+      has_array_stride = true;
+      decorations->push_back(create<ast::StrideDecoration>(stride, Source{}));
     } else {
       return Fail() << "invalid array type ID " << type_id
                     << ": unknown decoration "
diff --git a/src/reader/spirv/parser_impl.h b/src/reader/spirv/parser_impl.h
index 6530d9e..346fecb 100644
--- a/src/reader/spirv/parser_impl.h
+++ b/src/reader/spirv/parser_impl.h
@@ -492,12 +492,12 @@
   ast::type::Type* ConvertType(uint32_t type_id,
                                const spvtools::opt::analysis::Pointer* ptr_ty);
 
-  /// Applies SPIR-V decorations to the given array or runtime-array type.
-  /// @param spv_type the SPIR-V aray or runtime-array type.
-  /// @param ast_type non-null; the AST type to apply decorations to
+  /// Parses the array or runtime-array decorations.
+  /// @param spv_type the SPIR-V array or runtime-array type.
+  /// @param decorations the populated decoration list
   /// @returns true on success.
-  bool ApplyArrayDecorations(const spvtools::opt::analysis::Type* spv_type,
-                             ast::type::Array* ast_type);
+  bool ParseArrayDecorations(const spvtools::opt::analysis::Type* spv_type,
+                             ast::ArrayDecorationList* decorations);
 
   /// Creates a new `ast::Node` owned by the Module. When the Module is
   /// destructed, the `ast::Node` will also be destructed.
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index ad88c80..8a3b076 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -1099,9 +1099,7 @@
       size = val.value;
     }
 
-    auto ty = std::make_unique<ast::type::Array>(subtype.value, size);
-    ty->set_decorations(std::move(decos));
-    return module_.unique_type(std::move(ty));
+    return create<ast::type::Array>(subtype.value, size, std::move(decos));
   });
 }
 
diff --git a/src/transform/vertex_pulling.cc b/src/transform/vertex_pulling.cc
index 5614ba4..8be6582 100644
--- a/src/transform/vertex_pulling.cc
+++ b/src/transform/vertex_pulling.cc
@@ -239,12 +239,11 @@
 void VertexPulling::State::AddVertexStorageBuffers() {
   // TODO(idanr): Make this readonly https://github.com/gpuweb/gpuweb/issues/935
   // The array inside the struct definition
-  auto internal_array = std::make_unique<ast::type::Array>(GetU32Type());
-  ast::ArrayDecorationList ary_decos;
-  ary_decos.push_back(mod->create<ast::StrideDecoration>(4u, Source{}));
-  internal_array->set_decorations(std::move(ary_decos));
-
-  auto* internal_array_type = mod->unique_type(std::move(internal_array));
+  auto* internal_array_type = mod->create<ast::type::Array>(
+      GetU32Type(), 0,
+      ast::ArrayDecorationList{
+          mod->create<ast::StrideDecoration>(4u, Source{}),
+      });
 
   // Creating the struct type
   ast::StructMemberList members;
diff --git a/src/transform/vertex_pulling_test.cc b/src/transform/vertex_pulling_test.cc
index 820d1e0..ab16882 100644
--- a/src/transform/vertex_pulling_test.cc
+++ b/src/transform/vertex_pulling_test.cc
@@ -579,7 +579,7 @@
   ast::type::F32 f32;
   AddVertexInputVariable(0, "var_a", &f32);
 
-  ast::type::Array vec4_f32{&f32, 4u};
+  ast::type::Array vec4_f32{&f32, 4u, ast::ArrayDecorationList{}};
   AddVertexInputVariable(1, "var_b", &vec4_f32);
 
   InitTransform(
@@ -759,13 +759,13 @@
   InitBasicModule();
 
   ast::type::F32 f32;
-  ast::type::Array vec2_f32{&f32, 2u};
+  ast::type::Array vec2_f32{&f32, 2u, ast::ArrayDecorationList{}};
   AddVertexInputVariable(0, "var_a", &vec2_f32);
 
-  ast::type::Array vec3_f32{&f32, 3u};
+  ast::type::Array vec3_f32{&f32, 3u, ast::ArrayDecorationList{}};
   AddVertexInputVariable(1, "var_b", &vec3_f32);
 
-  ast::type::Array vec4_f32{&f32, 4u};
+  ast::type::Array vec4_f32{&f32, 4u, ast::ArrayDecorationList{}};
   AddVertexInputVariable(2, "var_c", &vec4_f32);
 
   InitTransform(
diff --git a/src/type_determiner_test.cc b/src/type_determiner_test.cc
index a761335..0b217a4 100644
--- a/src/type_determiner_test.cc
+++ b/src/type_determiner_test.cc
@@ -428,7 +428,7 @@
 TEST_F(TypeDeterminerTest, Expr_ArrayAccessor_Array) {
   ast::type::I32 i32;
   ast::type::F32 f32;
-  ast::type::Array ary(&f32, 3);
+  ast::type::Array ary(&f32, 3, ast::ArrayDecorationList{});
 
   auto* idx = create<ast::ScalarConstructorExpression>(
       create<ast::SintLiteral>(&i32, 2));
@@ -452,7 +452,7 @@
 TEST_F(TypeDeterminerTest, Expr_ArrayAccessor_Alias_Array) {
   ast::type::I32 i32;
   ast::type::F32 f32;
-  ast::type::Array ary(&f32, 3);
+  ast::type::Array ary(&f32, 3, ast::ArrayDecorationList{});
   ast::type::Alias aary("myarrty", &ary);
 
   auto* idx = create<ast::ScalarConstructorExpression>(
@@ -477,7 +477,7 @@
 TEST_F(TypeDeterminerTest, Expr_ArrayAccessor_Array_Constant) {
   ast::type::I32 i32;
   ast::type::F32 f32;
-  ast::type::Array ary(&f32, 3);
+  ast::type::Array ary(&f32, 3, ast::ArrayDecorationList{});
 
   auto* idx = create<ast::ScalarConstructorExpression>(
       create<ast::SintLiteral>(&i32, 2));
diff --git a/src/validator/validator_type_test.cc b/src/validator/validator_type_test.cc
index fbec490..2195c92 100644
--- a/src/validator/validator_type_test.cc
+++ b/src/validator/validator_type_test.cc
@@ -43,7 +43,7 @@
   // };
 
   ast::type::F32 f32;
-  ast::type::Array arr(&f32);
+  ast::type::Array arr(&f32, 0, ast::ArrayDecorationList{});
   ast::StructMemberList members;
   {
     ast::StructMemberDecorationList deco;
@@ -70,7 +70,7 @@
   // };
 
   ast::type::F32 f32;
-  ast::type::Array arr(&f32);
+  ast::type::Array arr(&f32, 0, ast::ArrayDecorationList{});
   ast::StructMemberList members;
   {
     ast::StructMemberDecorationList deco;
@@ -100,7 +100,7 @@
   // };
 
   ast::type::F32 f32;
-  ast::type::Array arr(&f32);
+  ast::type::Array arr(&f32, 0, ast::ArrayDecorationList{});
   ast::StructMemberList members;
   {
     ast::StructMemberDecorationList deco;
@@ -132,7 +132,7 @@
   //}
 
   ast::type::F32 u32;
-  ast::type::Array array(&u32);
+  ast::type::Array array(&u32, 0, ast::ArrayDecorationList{});
   ast::type::Alias alias{"RTArr", &array};
 
   ast::StructMemberList members;
@@ -166,7 +166,7 @@
   //}
 
   ast::type::F32 u32;
-  ast::type::Array array(&u32);
+  ast::type::Array array(&u32, 0, ast::ArrayDecorationList{});
   ast::type::Alias alias{"RTArr", &array};
 
   ast::StructMemberList members;
@@ -191,7 +191,7 @@
   /// [[stage(vertex)]]
   // fn func -> void { var a : array<i32>; }
   ast::type::I32 i32;
-  ast::type::Array array(&i32);
+  ast::type::Array array(&i32, 0, ast::ArrayDecorationList{});
 
   auto* var =
       create<ast::Variable>(Source{}, "a", ast::StorageClass::kNone, &array);
diff --git a/src/writer/hlsl/generator_impl_constructor_test.cc b/src/writer/hlsl/generator_impl_constructor_test.cc
index 12033c1..3bbdbc7 100644
--- a/src/writer/hlsl/generator_impl_constructor_test.cc
+++ b/src/writer/hlsl/generator_impl_constructor_test.cc
@@ -193,7 +193,7 @@
 TEST_F(HlslGeneratorImplTest_Constructor, EmitConstructor_Type_Array) {
   ast::type::F32 f32;
   ast::type::Vector vec(&f32, 3);
-  ast::type::Array ary(&vec, 3);
+  ast::type::Array ary(&vec, 3, ast::ArrayDecorationList{});
 
   ast::ExpressionList ary_values;
 
diff --git a/src/writer/hlsl/generator_impl_function_test.cc b/src/writer/hlsl/generator_impl_function_test.cc
index 315394c..cc35e8a 100644
--- a/src/writer/hlsl/generator_impl_function_test.cc
+++ b/src/writer/hlsl/generator_impl_function_test.cc
@@ -1037,7 +1037,7 @@
 
 TEST_F(HlslGeneratorImplTest_Function, Emit_Function_WithArrayParams) {
   ast::type::F32 f32;
-  ast::type::Array ary(&f32, 5);
+  ast::type::Array ary(&f32, 5, ast::ArrayDecorationList{});
 
   ast::VariableList params;
   params.push_back(
diff --git a/src/writer/hlsl/generator_impl_member_accessor_test.cc b/src/writer/hlsl/generator_impl_member_accessor_test.cc
index 648d38c..5e1cc955 100644
--- a/src/writer/hlsl/generator_impl_member_accessor_test.cc
+++ b/src/writer/hlsl/generator_impl_member_accessor_test.cc
@@ -477,8 +477,10 @@
   // -> asint(data.Load((2 * 4));
   ast::type::F32 f32;
   ast::type::I32 i32;
-  ast::type::Array ary(&i32, 5);
-  ary.set_decorations({create<ast::StrideDecoration>(4, Source{})});
+  ast::type::Array ary(&i32, 5,
+                       ast::ArrayDecorationList{
+                           create<ast::StrideDecoration>(4, Source{}),
+                       });
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
@@ -521,8 +523,10 @@
   // -> asint(data.Load((4 * ((2 + 4) - 3)));
   ast::type::F32 f32;
   ast::type::I32 i32;
-  ast::type::Array ary(&i32, 5);
-  ary.set_decorations({create<ast::StrideDecoration>(4, Source{})});
+  ast::type::Array ary(&i32, 5,
+                       ast::ArrayDecorationList{
+                           create<ast::StrideDecoration>(4, Source{}),
+                       });
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
@@ -623,8 +627,10 @@
 
   ast::type::F32 f32;
   ast::type::I32 i32;
-  ast::type::Array ary(&i32, 5);
-  ary.set_decorations({create<ast::StrideDecoration>(4, Source{})});
+  ast::type::Array ary(&i32, 5,
+                       ast::ArrayDecorationList{
+                           create<ast::StrideDecoration>(4, Source{}),
+                       });
 
   ast::StructMemberList members;
   ast::StructMemberDecorationList a_deco;
@@ -848,8 +854,10 @@
 
   ast::type::Struct data("Data", data_str);
 
-  ast::type::Array ary(&data, 4);
-  ary.set_decorations({create<ast::StrideDecoration>(32, Source{})});
+  ast::type::Array ary(&data, 4,
+                       ast::ArrayDecorationList{
+                           create<ast::StrideDecoration>(32, Source{}),
+                       });
 
   auto* pre_str = create<ast::Struct>(ast::StructMemberList{
       create<ast::StructMember>(
@@ -919,8 +927,9 @@
 
   ast::type::Struct data("Data", data_str);
 
-  ast::type::Array ary(&data, 4);
-  ary.set_decorations({create<ast::StrideDecoration>(32, Source{})});
+  ast::type::Array ary(
+      &data, 4,
+      ast::ArrayDecorationList{create<ast::StrideDecoration>(32, Source{})});
 
   auto* pre_str =
       create<ast::Struct>(ast::StructMemberList{create<ast::StructMember>(
@@ -989,8 +998,10 @@
 
   ast::type::Struct data("Data", data_str);
 
-  ast::type::Array ary(&data, 4);
-  ary.set_decorations({create<ast::StrideDecoration>(32, Source{})});
+  ast::type::Array ary(&data, 4,
+                       ast::ArrayDecorationList{
+                           create<ast::StrideDecoration>(32, Source{}),
+                       });
 
   auto* pre_str =
       create<ast::Struct>(ast::StructMemberList{create<ast::StructMember>(
@@ -1058,8 +1069,10 @@
 
   ast::type::Struct data("Data", data_str);
 
-  ast::type::Array ary(&data, 4);
-  ary.set_decorations({create<ast::StrideDecoration>(32, Source{})});
+  ast::type::Array ary(&data, 4,
+                       ast::ArrayDecorationList{
+                           create<ast::StrideDecoration>(32, Source{}),
+                       });
 
   auto* pre_str =
       create<ast::Struct>(ast::StructMemberList{create<ast::StructMember>(
@@ -1128,8 +1141,10 @@
 
   ast::type::Struct data("Data", data_str);
 
-  ast::type::Array ary(&data, 4);
-  ary.set_decorations({create<ast::StrideDecoration>(32, Source{})});
+  ast::type::Array ary(&data, 4,
+                       ast::ArrayDecorationList{
+                           create<ast::StrideDecoration>(32, Source{}),
+                       });
 
   auto* pre_str =
       create<ast::Struct>(ast::StructMemberList{create<ast::StructMember>(
@@ -1209,8 +1224,10 @@
 
   ast::type::Struct data("Data", data_str);
 
-  ast::type::Array ary(&data, 4);
-  ary.set_decorations({create<ast::StrideDecoration>(32, Source{})});
+  ast::type::Array ary(&data, 4,
+                       ast::ArrayDecorationList{
+                           create<ast::StrideDecoration>(32, Source{}),
+                       });
 
   auto* pre_str =
       create<ast::Struct>(ast::StructMemberList{create<ast::StructMember>(
diff --git a/src/writer/hlsl/generator_impl_module_constant_test.cc b/src/writer/hlsl/generator_impl_module_constant_test.cc
index 884b754..4786c4d 100644
--- a/src/writer/hlsl/generator_impl_module_constant_test.cc
+++ b/src/writer/hlsl/generator_impl_module_constant_test.cc
@@ -35,7 +35,7 @@
 
 TEST_F(HlslGeneratorImplTest_ModuleConstant, Emit_ModuleConstant) {
   ast::type::F32 f32;
-  ast::type::Array ary(&f32, 3);
+  ast::type::Array ary(&f32, 3, ast::ArrayDecorationList{});
 
   ast::ExpressionList exprs;
   exprs.push_back(create<ast::ScalarConstructorExpression>(
diff --git a/src/writer/hlsl/generator_impl_type_test.cc b/src/writer/hlsl/generator_impl_type_test.cc
index b2156f7..0f8f36d 100644
--- a/src/writer/hlsl/generator_impl_type_test.cc
+++ b/src/writer/hlsl/generator_impl_type_test.cc
@@ -61,7 +61,7 @@
 
 TEST_F(HlslGeneratorImplTest_Type, EmitType_Array) {
   ast::type::Bool b;
-  ast::type::Array a(&b, 4);
+  ast::type::Array a(&b, 4, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(out, &a, "ary")) << gen.error();
   EXPECT_EQ(result(), "bool ary[4]");
@@ -69,8 +69,8 @@
 
 TEST_F(HlslGeneratorImplTest_Type, EmitType_ArrayOfArray) {
   ast::type::Bool b;
-  ast::type::Array a(&b, 4);
-  ast::type::Array c(&a, 5);
+  ast::type::Array a(&b, 4, ast::ArrayDecorationList{});
+  ast::type::Array c(&a, 5, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(out, &c, "ary")) << gen.error();
   EXPECT_EQ(result(), "bool ary[5][4]");
@@ -80,9 +80,9 @@
 TEST_F(HlslGeneratorImplTest_Type,
        DISABLED_EmitType_ArrayOfArrayOfRuntimeArray) {
   ast::type::Bool b;
-  ast::type::Array a(&b, 4);
-  ast::type::Array c(&a, 5);
-  ast::type::Array d(&c);
+  ast::type::Array a(&b, 4, ast::ArrayDecorationList{});
+  ast::type::Array c(&a, 5, ast::ArrayDecorationList{});
+  ast::type::Array d(&c, 0, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(out, &c, "ary")) << gen.error();
   EXPECT_EQ(result(), "bool ary[5][4][1]");
@@ -90,9 +90,9 @@
 
 TEST_F(HlslGeneratorImplTest_Type, EmitType_ArrayOfArrayOfArray) {
   ast::type::Bool b;
-  ast::type::Array a(&b, 4);
-  ast::type::Array c(&a, 5);
-  ast::type::Array d(&c, 6);
+  ast::type::Array a(&b, 4, ast::ArrayDecorationList{});
+  ast::type::Array c(&a, 5, ast::ArrayDecorationList{});
+  ast::type::Array d(&c, 6, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(out, &d, "ary")) << gen.error();
   EXPECT_EQ(result(), "bool ary[6][5][4]");
@@ -100,7 +100,7 @@
 
 TEST_F(HlslGeneratorImplTest_Type, EmitType_Array_NameCollision) {
   ast::type::Bool b;
-  ast::type::Array a(&b, 4);
+  ast::type::Array a(&b, 4, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(out, &a, "bool")) << gen.error();
   EXPECT_EQ(result(), "bool bool_tint_0[4]");
@@ -108,7 +108,7 @@
 
 TEST_F(HlslGeneratorImplTest_Type, EmitType_Array_WithoutName) {
   ast::type::Bool b;
-  ast::type::Array a(&b, 4);
+  ast::type::Array a(&b, 4, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(out, &a, "")) << gen.error();
   EXPECT_EQ(result(), "bool[4]");
@@ -116,7 +116,7 @@
 
 TEST_F(HlslGeneratorImplTest_Type, DISABLED_EmitType_RuntimeArray) {
   ast::type::Bool b;
-  ast::type::Array a(&b);
+  ast::type::Array a(&b, 0, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(out, &a, "ary")) << gen.error();
   EXPECT_EQ(result(), "bool ary[]");
@@ -125,7 +125,7 @@
 TEST_F(HlslGeneratorImplTest_Type,
        DISABLED_EmitType_RuntimeArray_NameCollision) {
   ast::type::Bool b;
-  ast::type::Array a(&b);
+  ast::type::Array a(&b, 0, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(out, &a, "double")) << gen.error();
   EXPECT_EQ(result(), "bool double_tint_0[]");
diff --git a/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc b/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc
index b4e389f..e006551 100644
--- a/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc
+++ b/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc
@@ -59,7 +59,7 @@
 
 TEST_F(HlslGeneratorImplTest_VariableDecl, Emit_VariableDeclStatement_Array) {
   ast::type::F32 f32;
-  ast::type::Array ary(&f32, 5);
+  ast::type::Array ary(&f32, 5, ast::ArrayDecorationList{});
 
   auto* var =
       create<ast::Variable>(Source{}, "a", ast::StorageClass::kNone, &ary);
diff --git a/src/writer/msl/generator_impl_constructor_test.cc b/src/writer/msl/generator_impl_constructor_test.cc
index 223257a..cd83117 100644
--- a/src/writer/msl/generator_impl_constructor_test.cc
+++ b/src/writer/msl/generator_impl_constructor_test.cc
@@ -194,7 +194,7 @@
 TEST_F(MslGeneratorImplTest, EmitConstructor_Type_Array) {
   ast::type::F32 f32;
   ast::type::Vector vec(&f32, 3);
-  ast::type::Array ary(&vec, 3);
+  ast::type::Array ary(&vec, 3, ast::ArrayDecorationList{});
 
   ast::ExpressionList ary_values;
 
diff --git a/src/writer/msl/generator_impl_function_test.cc b/src/writer/msl/generator_impl_function_test.cc
index 5290a23..5e14775 100644
--- a/src/writer/msl/generator_impl_function_test.cc
+++ b/src/writer/msl/generator_impl_function_test.cc
@@ -1011,7 +1011,7 @@
 
 TEST_F(MslGeneratorImplTest, Emit_Function_WithArrayParams) {
   ast::type::F32 f32;
-  ast::type::Array ary(&f32, 5);
+  ast::type::Array ary(&f32, 5, ast::ArrayDecorationList{});
 
   ast::VariableList params;
   params.push_back(
diff --git a/src/writer/msl/generator_impl_module_constant_test.cc b/src/writer/msl/generator_impl_module_constant_test.cc
index 97007b7..fc5739a 100644
--- a/src/writer/msl/generator_impl_module_constant_test.cc
+++ b/src/writer/msl/generator_impl_module_constant_test.cc
@@ -37,7 +37,7 @@
 
 TEST_F(MslGeneratorImplTest, Emit_ModuleConstant) {
   ast::type::F32 f32;
-  ast::type::Array ary(&f32, 3);
+  ast::type::Array ary(&f32, 3, ast::ArrayDecorationList{});
 
   ast::ExpressionList exprs;
   exprs.push_back(create<ast::ScalarConstructorExpression>(
diff --git a/src/writer/msl/generator_impl_test.cc b/src/writer/msl/generator_impl_test.cc
index c32e429..06fdbc7 100644
--- a/src/writer/msl/generator_impl_test.cc
+++ b/src/writer/msl/generator_impl_test.cc
@@ -123,7 +123,7 @@
 
 TEST_F(MslGeneratorImplTest, calculate_alignment_size_array) {
   ast::type::F32 f32;
-  ast::type::Array ary(&f32, 4);
+  ast::type::Array ary(&f32, 4, ast::ArrayDecorationList{});
   EXPECT_EQ(4u * 4u, gen.calculate_alignment_size(&ary));
 }
 
diff --git a/src/writer/msl/generator_impl_type_test.cc b/src/writer/msl/generator_impl_type_test.cc
index 9854cf1..54fd68b 100644
--- a/src/writer/msl/generator_impl_type_test.cc
+++ b/src/writer/msl/generator_impl_type_test.cc
@@ -64,7 +64,7 @@
 
 TEST_F(MslGeneratorImplTest, EmitType_Array) {
   ast::type::Bool b;
-  ast::type::Array a(&b, 4);
+  ast::type::Array a(&b, 4, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(&a, "ary")) << gen.error();
   EXPECT_EQ(gen.result(), "bool ary[4]");
@@ -72,8 +72,8 @@
 
 TEST_F(MslGeneratorImplTest, EmitType_ArrayOfArray) {
   ast::type::Bool b;
-  ast::type::Array a(&b, 4);
-  ast::type::Array c(&a, 5);
+  ast::type::Array a(&b, 4, ast::ArrayDecorationList{});
+  ast::type::Array c(&a, 5, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(&c, "ary")) << gen.error();
   EXPECT_EQ(gen.result(), "bool ary[5][4]");
@@ -82,9 +82,9 @@
 // TODO(dsinclair): Is this possible? What order should it output in?
 TEST_F(MslGeneratorImplTest, DISABLED_EmitType_ArrayOfArrayOfRuntimeArray) {
   ast::type::Bool b;
-  ast::type::Array a(&b, 4);
-  ast::type::Array c(&a, 5);
-  ast::type::Array d(&c);
+  ast::type::Array a(&b, 4, ast::ArrayDecorationList{});
+  ast::type::Array c(&a, 5, ast::ArrayDecorationList{});
+  ast::type::Array d(&c, 0, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(&c, "ary")) << gen.error();
   EXPECT_EQ(gen.result(), "bool ary[5][4][1]");
@@ -92,9 +92,9 @@
 
 TEST_F(MslGeneratorImplTest, EmitType_ArrayOfArrayOfArray) {
   ast::type::Bool b;
-  ast::type::Array a(&b, 4);
-  ast::type::Array c(&a, 5);
-  ast::type::Array d(&c, 6);
+  ast::type::Array a(&b, 4, ast::ArrayDecorationList{});
+  ast::type::Array c(&a, 5, ast::ArrayDecorationList{});
+  ast::type::Array d(&c, 6, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(&d, "ary")) << gen.error();
   EXPECT_EQ(gen.result(), "bool ary[6][5][4]");
@@ -102,7 +102,7 @@
 
 TEST_F(MslGeneratorImplTest, EmitType_Array_NameCollision) {
   ast::type::Bool b;
-  ast::type::Array a(&b, 4);
+  ast::type::Array a(&b, 4, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(&a, "bool")) << gen.error();
   EXPECT_EQ(gen.result(), "bool bool_tint_0[4]");
@@ -110,7 +110,7 @@
 
 TEST_F(MslGeneratorImplTest, EmitType_Array_WithoutName) {
   ast::type::Bool b;
-  ast::type::Array a(&b, 4);
+  ast::type::Array a(&b, 4, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(&a, "")) << gen.error();
   EXPECT_EQ(gen.result(), "bool[4]");
@@ -118,7 +118,7 @@
 
 TEST_F(MslGeneratorImplTest, EmitType_RuntimeArray) {
   ast::type::Bool b;
-  ast::type::Array a(&b);
+  ast::type::Array a(&b, 0, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(&a, "ary")) << gen.error();
   EXPECT_EQ(gen.result(), "bool ary[1]");
@@ -126,7 +126,7 @@
 
 TEST_F(MslGeneratorImplTest, EmitType_RuntimeArray_NameCollision) {
   ast::type::Bool b;
-  ast::type::Array a(&b);
+  ast::type::Array a(&b, 0, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(&a, "discard_fragment")) << gen.error();
   EXPECT_EQ(gen.result(), "bool discard_fragment_tint_0[1]");
diff --git a/src/writer/msl/generator_impl_variable_decl_statement_test.cc b/src/writer/msl/generator_impl_variable_decl_statement_test.cc
index dcaf542..f8eac4a 100644
--- a/src/writer/msl/generator_impl_variable_decl_statement_test.cc
+++ b/src/writer/msl/generator_impl_variable_decl_statement_test.cc
@@ -69,7 +69,7 @@
 
 TEST_F(MslGeneratorImplTest, Emit_VariableDeclStatement_Array) {
   ast::type::F32 f32;
-  ast::type::Array ary(&f32, 5);
+  ast::type::Array ary(&f32, 5, ast::ArrayDecorationList{});
 
   auto* var =
       create<ast::Variable>(Source{}, "a", ast::StorageClass::kNone, &ary);
diff --git a/src/writer/spirv/builder_accessor_expression_test.cc b/src/writer/spirv/builder_accessor_expression_test.cc
index 65b66c4..604ffa5 100644
--- a/src/writer/spirv/builder_accessor_expression_test.cc
+++ b/src/writer/spirv/builder_accessor_expression_test.cc
@@ -181,7 +181,7 @@
   ast::type::I32 i32;
   ast::type::F32 f32;
   ast::type::Vector vec3(&f32, 3);
-  ast::type::Array ary4(&vec3, 4);
+  ast::type::Array ary4(&vec3, 4, ast::ArrayDecorationList{});
 
   // ary = array<vec3<f32>, 4>
   // ary[3][2];
@@ -228,7 +228,7 @@
   ast::type::I32 i32;
   ast::type::F32 f32;
   ast::type::Vector vec3(&f32, 3);
-  ast::type::Array ary4(&vec3, 4);
+  ast::type::Array ary4(&vec3, 4, ast::ArrayDecorationList{});
 
   // var a : array<vec3<f32>, 4>;
   // a[2].xy;
@@ -784,13 +784,13 @@
       ast::StructMemberList{create<ast::StructMember>("bar", &c_type, decos)});
   ast::type::Struct b_type("B", s);
 
-  ast::type::Array b_ary_type(&b_type, 3);
+  ast::type::Array b_ary_type(&b_type, 3, ast::ArrayDecorationList{});
 
   s = create<ast::Struct>(ast::StructMemberList{
       create<ast::StructMember>("foo", &b_ary_type, decos)});
   ast::type::Struct a_type("A", s);
 
-  ast::type::Array a_ary_type(&a_type, 2);
+  ast::type::Array a_ary_type(&a_type, 2, ast::ArrayDecorationList{});
 
   ast::Variable var(Source{}, "index", ast::StorageClass::kFunction,
                     &a_ary_type);
@@ -858,7 +858,7 @@
   ast::type::F32 f32;
   ast::type::U32 u32;
   ast::type::Vector vec(&f32, 2);
-  ast::type::Array arr(&vec, 3);
+  ast::type::Array arr(&vec, 3, ast::ArrayDecorationList{});
 
   ast::ExpressionList ary_params;
   ary_params.push_back(create<ast::TypeConstructorExpression>(
diff --git a/src/writer/spirv/builder_type_test.cc b/src/writer/spirv/builder_type_test.cc
index 0a1c200..0dbad7d 100644
--- a/src/writer/spirv/builder_type_test.cc
+++ b/src/writer/spirv/builder_type_test.cc
@@ -81,7 +81,7 @@
 
 TEST_F(BuilderTest_Type, GenerateRuntimeArray) {
   ast::type::I32 i32;
-  ast::type::Array ary(&i32);
+  ast::type::Array ary(&i32, 0, ast::ArrayDecorationList{});
 
   auto id = b.GenerateTypeIfNeeded(&ary);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -94,7 +94,7 @@
 
 TEST_F(BuilderTest_Type, ReturnsGeneratedRuntimeArray) {
   ast::type::I32 i32;
-  ast::type::Array ary(&i32);
+  ast::type::Array ary(&i32, 0, ast::ArrayDecorationList{});
 
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
@@ -107,7 +107,7 @@
 
 TEST_F(BuilderTest_Type, GenerateArray) {
   ast::type::I32 i32;
-  ast::type::Array ary(&i32, 4);
+  ast::type::Array ary(&i32, 4, ast::ArrayDecorationList{});
 
   auto id = b.GenerateTypeIfNeeded(&ary);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -123,11 +123,10 @@
 TEST_F(BuilderTest_Type, GenerateArray_WithStride) {
   ast::type::I32 i32;
 
-  ast::ArrayDecorationList decos;
-  decos.push_back(create<ast::StrideDecoration>(16u, Source{}));
-
-  ast::type::Array ary(&i32, 4);
-  ary.set_decorations(decos);
+  ast::type::Array ary(&i32, 4,
+                       ast::ArrayDecorationList{
+                           create<ast::StrideDecoration>(16u, Source{}),
+                       });
 
   auto id = b.GenerateTypeIfNeeded(&ary);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -145,7 +144,7 @@
 
 TEST_F(BuilderTest_Type, ReturnsGeneratedArray) {
   ast::type::I32 i32;
-  ast::type::Array ary(&i32, 4);
+  ast::type::Array ary(&i32, 4, ast::ArrayDecorationList{});
 
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
@@ -471,14 +470,17 @@
   ast::type::F32 f32;
 
   ast::type::Matrix glsl_mat2x2(&f32, 2, 2);
-  ast::type::Array arr_mat2x2(&glsl_mat2x2, 1);  // Singly nested array
+  ast::type::Array arr_mat2x2(
+      &glsl_mat2x2, 1, ast::ArrayDecorationList{});  // Singly nested array
 
   ast::type::Matrix glsl_mat2x3(&f32, 3, 2);  // 2 columns, 3 rows
-  ast::type::Array arr_mat2x3(&glsl_mat2x3, 1);
-  ast::type::Array arr_arr_mat2x2(&arr_mat2x3, 1);  // Doubly nested array
+  ast::type::Array arr_mat2x3(&glsl_mat2x3, 1, ast::ArrayDecorationList{});
+  ast::type::Array arr_arr_mat2x2(
+      &arr_mat2x3, 1, ast::ArrayDecorationList{});  // Doubly nested array
 
   ast::type::Matrix glsl_mat4x4(&f32, 4, 4);
-  ast::type::Array rtarr_mat4x4(&glsl_mat4x4);  // Runtime array
+  ast::type::Array rtarr_mat4x4(&glsl_mat4x4, 0,
+                                ast::ArrayDecorationList{});  // Runtime array
 
   ast::StructMemberDecorationList a_decos;
   a_decos.push_back(create<ast::StructMemberOffsetDecoration>(0, Source{}));
diff --git a/src/writer/wgsl/generator_impl_constructor_test.cc b/src/writer/wgsl/generator_impl_constructor_test.cc
index 0993355..14da9a1 100644
--- a/src/writer/wgsl/generator_impl_constructor_test.cc
+++ b/src/writer/wgsl/generator_impl_constructor_test.cc
@@ -174,7 +174,7 @@
 TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Array) {
   ast::type::F32 f32;
   ast::type::Vector vec(&f32, 3);
-  ast::type::Array ary(&vec, 3);
+  ast::type::Array ary(&vec, 3, ast::ArrayDecorationList{});
 
   ast::ExpressionList ary_values;
 
diff --git a/src/writer/wgsl/generator_impl_type_test.cc b/src/writer/wgsl/generator_impl_type_test.cc
index 7693db2..048e72b 100644
--- a/src/writer/wgsl/generator_impl_type_test.cc
+++ b/src/writer/wgsl/generator_impl_type_test.cc
@@ -57,7 +57,7 @@
 
 TEST_F(WgslGeneratorImplTest, EmitType_Array) {
   ast::type::Bool b;
-  ast::type::Array a(&b, 4);
+  ast::type::Array a(&b, 4, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(&a)) << gen.error();
   EXPECT_EQ(gen.result(), "array<bool, 4>");
@@ -105,11 +105,10 @@
 
 TEST_F(WgslGeneratorImplTest, EmitType_Array_Decoration) {
   ast::type::Bool b;
-  ast::ArrayDecorationList decos;
-  decos.push_back(create<ast::StrideDecoration>(16u, Source{}));
-
-  ast::type::Array a(&b, 4);
-  a.set_decorations(decos);
+  ast::type::Array a(&b, 4,
+                     ast::ArrayDecorationList{
+                         create<ast::StrideDecoration>(16u, Source{}),
+                     });
 
   ASSERT_TRUE(gen.EmitType(&a)) << gen.error();
   EXPECT_EQ(gen.result(), "[[stride(16)]] array<bool, 4>");
@@ -117,12 +116,11 @@
 
 TEST_F(WgslGeneratorImplTest, EmitType_Array_MultipleDecorations) {
   ast::type::Bool b;
-  ast::ArrayDecorationList decos;
-  decos.push_back(create<ast::StrideDecoration>(16u, Source{}));
-  decos.push_back(create<ast::StrideDecoration>(32u, Source{}));
-
-  ast::type::Array a(&b, 4);
-  a.set_decorations(decos);
+  ast::type::Array a(&b, 4,
+                     ast::ArrayDecorationList{
+                         create<ast::StrideDecoration>(16u, Source{}),
+                         create<ast::StrideDecoration>(32u, Source{}),
+                     });
 
   ASSERT_TRUE(gen.EmitType(&a)) << gen.error();
   EXPECT_EQ(gen.result(), "[[stride(16)]] [[stride(32)]] array<bool, 4>");
@@ -130,7 +128,7 @@
 
 TEST_F(WgslGeneratorImplTest, EmitType_RuntimeArray) {
   ast::type::Bool b;
-  ast::type::Array a(&b);
+  ast::type::Array a(&b, 0, ast::ArrayDecorationList{});
 
   ASSERT_TRUE(gen.EmitType(&a)) << gen.error();
   EXPECT_EQ(gen.result(), "array<bool>");
