transform: Do not generate block attributes

These are no longer necessary, and the attribute will soon be
deprecated and removed.

Bug: tint:1324
Change-Id: Ia3cdd4e9d9bd7bca45d734a06466993199b3e838
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/72085
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/transform/array_length_from_uniform.cc b/src/transform/array_length_from_uniform.cc
index fa04126..5084a54 100644
--- a/src/transform/array_length_from_uniform.cc
+++ b/src/transform/array_length_from_uniform.cc
@@ -18,7 +18,6 @@
 #include <string>
 #include <utility>
 
-#include "src/ast/struct_block_decoration.h"
 #include "src/program_builder.h"
 #include "src/sem/call.h"
 #include "src/sem/variable.h"
@@ -144,9 +143,7 @@
           {ctx.dst->Member(
               kBufferSizeMemberName,
               ctx.dst->ty.array(ctx.dst->ty.vec4(ctx.dst->ty.u32()),
-                                (max_buffer_size_index / 4) + 1))},
-
-          ast::DecorationList{ctx.dst->create<ast::StructBlockDecoration>()});
+                                (max_buffer_size_index / 4) + 1))});
       buffer_size_ubo = ctx.dst->Global(
           ctx.dst->Sym(), ctx.dst->ty.Of(buffer_size_struct),
           ast::StorageClass::kUniform,
diff --git a/src/transform/array_length_from_uniform.h b/src/transform/array_length_from_uniform.h
index f981f67..6ab1598 100644
--- a/src/transform/array_length_from_uniform.h
+++ b/src/transform/array_length_from_uniform.h
@@ -34,7 +34,6 @@
 ///
 /// The generated uniform buffer will have the form:
 /// ```
-/// [[block]]
 /// struct buffer_size_struct {
 ///  buffer_size : array<u32, 8>;
 /// };
diff --git a/src/transform/array_length_from_uniform_test.cc b/src/transform/array_length_from_uniform_test.cc
index c316412..59f5a4d 100644
--- a/src/transform/array_length_from_uniform_test.cc
+++ b/src/transform/array_length_from_uniform_test.cc
@@ -52,7 +52,6 @@
 
 TEST_F(ArrayLengthFromUniformTest, Basic) {
   auto* src = R"(
-[[block]]
 struct SB {
   x : i32;
   arr : array<i32>;
@@ -67,14 +66,12 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct tint_symbol {
   buffer_size : array<vec4<u32>, 1u>;
 };
 
 [[group(0), binding(30)]] var<uniform> tint_symbol_1 : tint_symbol;
 
-[[block]]
 struct SB {
   x : i32;
   arr : array<i32>;
@@ -103,7 +100,6 @@
 
 TEST_F(ArrayLengthFromUniformTest, WithStride) {
   auto* src = R"(
-[[block]]
 struct SB {
   x : i32;
   y : f32;
@@ -119,14 +115,12 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct tint_symbol {
   buffer_size : array<vec4<u32>, 1u>;
 };
 
 [[group(0), binding(30)]] var<uniform> tint_symbol_1 : tint_symbol;
 
-[[block]]
 struct SB {
   x : i32;
   y : f32;
@@ -156,27 +150,22 @@
 
 TEST_F(ArrayLengthFromUniformTest, MultipleStorageBuffers) {
   auto* src = R"(
-[[block]]
 struct SB1 {
   x : i32;
   arr1 : array<i32>;
 };
-[[block]]
 struct SB2 {
   x : i32;
   arr2 : array<vec4<f32>>;
 };
-[[block]]
 struct SB3 {
   x : i32;
   arr3 : array<vec4<f32>>;
 };
-[[block]]
 struct SB4 {
   x : i32;
   arr4 : array<vec4<f32>>;
 };
-[[block]]
 struct SB5 {
   x : i32;
   arr5 : array<vec4<f32>>;
@@ -200,38 +189,32 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct tint_symbol {
   buffer_size : array<vec4<u32>, 2u>;
 };
 
 [[group(0), binding(30)]] var<uniform> tint_symbol_1 : tint_symbol;
 
-[[block]]
 struct SB1 {
   x : i32;
   arr1 : array<i32>;
 };
 
-[[block]]
 struct SB2 {
   x : i32;
   arr2 : array<vec4<f32>>;
 };
 
-[[block]]
 struct SB3 {
   x : i32;
   arr3 : array<vec4<f32>>;
 };
 
-[[block]]
 struct SB4 {
   x : i32;
   arr4 : array<vec4<f32>>;
 };
 
-[[block]]
 struct SB5 {
   x : i32;
   arr5 : array<vec4<f32>>;
@@ -277,27 +260,22 @@
 
 TEST_F(ArrayLengthFromUniformTest, MultipleUnusedStorageBuffers) {
   auto* src = R"(
-[[block]]
 struct SB1 {
   x : i32;
   arr1 : array<i32>;
 };
-[[block]]
 struct SB2 {
   x : i32;
   arr2 : array<vec4<f32>>;
 };
-[[block]]
 struct SB3 {
   x : i32;
   arr3 : array<vec4<f32>>;
 };
-[[block]]
 struct SB4 {
   x : i32;
   arr4 : array<vec4<f32>>;
 };
-[[block]]
 struct SB5 {
   x : i32;
   arr5 : array<vec4<f32>>;
@@ -318,38 +296,32 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct tint_symbol {
   buffer_size : array<vec4<u32>, 1u>;
 };
 
 [[group(0), binding(30)]] var<uniform> tint_symbol_1 : tint_symbol;
 
-[[block]]
 struct SB1 {
   x : i32;
   arr1 : array<i32>;
 };
 
-[[block]]
 struct SB2 {
   x : i32;
   arr2 : array<vec4<f32>>;
 };
 
-[[block]]
 struct SB3 {
   x : i32;
   arr3 : array<vec4<f32>>;
 };
 
-[[block]]
 struct SB4 {
   x : i32;
   arr4 : array<vec4<f32>>;
 };
 
-[[block]]
 struct SB5 {
   x : i32;
   arr5 : array<vec4<f32>>;
@@ -392,7 +364,6 @@
 
 TEST_F(ArrayLengthFromUniformTest, NoArrayLengthCalls) {
   auto* src = R"(
-[[block]]
 struct SB {
   x : i32;
   arr : array<i32>;
@@ -421,13 +392,11 @@
 
 TEST_F(ArrayLengthFromUniformTest, MissingBindingPointToIndexMapping) {
   auto* src = R"(
-[[block]]
 struct SB1 {
   x : i32;
   arr1 : array<i32>;
 };
 
-[[block]]
 struct SB2 {
   x : i32;
   arr2 : array<vec4<f32>>;
@@ -446,20 +415,17 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct tint_symbol {
   buffer_size : array<vec4<u32>, 1u>;
 };
 
 [[group(0), binding(30)]] var<uniform> tint_symbol_1 : tint_symbol;
 
-[[block]]
 struct SB1 {
   x : i32;
   arr1 : array<i32>;
 };
 
-[[block]]
 struct SB2 {
   x : i32;
   arr2 : array<vec4<f32>>;
diff --git a/src/transform/binding_remapper_test.cc b/src/transform/binding_remapper_test.cc
index fded200..87e205a 100644
--- a/src/transform/binding_remapper_test.cc
+++ b/src/transform/binding_remapper_test.cc
@@ -26,7 +26,6 @@
 
 TEST_F(BindingRemapperTest, NoRemappings) {
   auto* src = R"(
-[[block]]
 struct S {
   a : f32;
 };
@@ -52,7 +51,6 @@
 
 TEST_F(BindingRemapperTest, RemapBindingPoints) {
   auto* src = R"(
-[[block]]
 struct S {
   a : f32;
 };
@@ -67,7 +65,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct S {
   a : f32;
 };
@@ -96,7 +93,6 @@
 
 TEST_F(BindingRemapperTest, RemapAccessControls) {
   auto* src = R"(
-[[block]]
 struct S {
   a : f32;
 };
@@ -113,7 +109,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct S {
   a : f32;
 };
@@ -146,7 +141,6 @@
 // decorations in type aliases. If not, just remove.
 TEST_F(BindingRemapperTest, DISABLED_RemapAccessControlsWithAliases) {
   auto* src = R"(
-[[block]]
 struct S {
   a : f32;
 };
@@ -169,7 +163,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct S {
   a : f32;
 };
@@ -206,7 +199,6 @@
 
 TEST_F(BindingRemapperTest, RemapAll) {
   auto* src = R"(
-[[block]]
 struct S {
   a : f32;
 };
@@ -221,7 +213,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct S {
   a : f32;
 };
@@ -252,7 +243,6 @@
 
 TEST_F(BindingRemapperTest, BindingCollisionsSameEntryPoint) {
   auto* src = R"(
-[[block]]
 struct S {
   i : i32;
 };
@@ -272,7 +262,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct S {
   i : i32;
 };
@@ -306,7 +295,6 @@
 
 TEST_F(BindingRemapperTest, BindingCollisionsDifferentEntryPoints) {
   auto* src = R"(
-[[block]]
 struct S {
   i : i32;
 };
@@ -331,7 +319,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct S {
   i : i32;
 };
@@ -370,7 +357,6 @@
 
 TEST_F(BindingRemapperTest, NoData) {
   auto* src = R"(
-[[block]]
 struct S {
   a : f32;
 };
diff --git a/src/transform/calculate_array_length_test.cc b/src/transform/calculate_array_length_test.cc
index 897213c..4522768 100644
--- a/src/transform/calculate_array_length_test.cc
+++ b/src/transform/calculate_array_length_test.cc
@@ -38,7 +38,6 @@
 
 TEST_F(CalculateArrayLengthTest, Basic) {
   auto* src = R"(
-[[block]]
 struct SB {
   x : i32;
   arr : array<i32>;
@@ -53,7 +52,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct SB {
   x : i32;
   arr : array<i32>;
@@ -80,7 +78,6 @@
 
 TEST_F(CalculateArrayLengthTest, InSameBlock) {
   auto* src = R"(
-[[block]]
 struct SB {
   x : i32;
   arr : array<i32>;
@@ -97,7 +94,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct SB {
   x : i32;
   arr : array<i32>;
@@ -126,7 +122,6 @@
 
 TEST_F(CalculateArrayLengthTest, WithStride) {
   auto* src = R"(
-[[block]]
 struct SB {
   x : i32;
   y : f32;
@@ -142,7 +137,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct SB {
   x : i32;
   y : f32;
@@ -170,7 +164,6 @@
 
 TEST_F(CalculateArrayLengthTest, Nested) {
   auto* src = R"(
-[[block]]
 struct SB {
   x : i32;
   arr : array<i32>;
@@ -191,7 +184,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct SB {
   x : i32;
   arr : array<i32>;
@@ -227,13 +219,11 @@
 
 TEST_F(CalculateArrayLengthTest, MultipleStorageBuffers) {
   auto* src = R"(
-[[block]]
 struct SB1 {
   x : i32;
   arr1 : array<i32>;
 };
 
-[[block]]
 struct SB2 {
   x : i32;
   arr2 : array<vec4<f32>>;
@@ -252,7 +242,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct SB1 {
   x : i32;
   arr1 : array<i32>;
@@ -261,7 +250,6 @@
 [[internal(intrinsic_buffer_size)]]
 fn tint_symbol([[internal(disable_validation__ignore_constructible_function_parameter)]] buffer : SB1, result : ptr<function, u32>)
 
-[[block]]
 struct SB2 {
   x : i32;
   arr2 : array<vec4<f32>>;
@@ -295,7 +283,6 @@
 
 TEST_F(CalculateArrayLengthTest, Shadowing) {
   auto* src = R"(
-[[block]]
 struct SB {
   x : i32;
   arr : array<i32>;
@@ -316,7 +303,6 @@
 
   auto* expect =
       R"(
-[[block]]
 struct SB {
   x : i32;
   arr : array<i32>;
diff --git a/src/transform/canonicalize_entry_point_io_test.cc b/src/transform/canonicalize_entry_point_io_test.cc
index 3ea25c1..e2daa97 100644
--- a/src/transform/canonicalize_entry_point_io_test.cc
+++ b/src/transform/canonicalize_entry_point_io_test.cc
@@ -1320,7 +1320,6 @@
 
 TEST_F(CanonicalizeEntryPointIOTest, Struct_LayoutDecorations) {
   auto* src = R"(
-[[block]]
 struct FragmentInput {
   [[size(16), location(1)]] value : f32;
   [[builtin(position)]] [[align(32)]] coord : vec4<f32>;
@@ -1338,7 +1337,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct FragmentInput {
   [[size(16)]]
   value : f32;
diff --git a/src/transform/decompose_memory_access_test.cc b/src/transform/decompose_memory_access_test.cc
index 5cf3bc6..046d88c 100644
--- a/src/transform/decompose_memory_access_test.cc
+++ b/src/transform/decompose_memory_access_test.cc
@@ -24,7 +24,6 @@
 
 TEST_F(DecomposeMemoryAccessTest, SB_BasicLoad) {
   auto* src = R"(
-[[block]]
 struct SB {
   a : i32;
   b : u32;
@@ -80,7 +79,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct SB {
   a : i32;
   b : u32;
@@ -222,7 +220,6 @@
 
 TEST_F(DecomposeMemoryAccessTest, UB_BasicLoad) {
   auto* src = R"(
-[[block]]
 struct UB {
   a : i32;
   b : u32;
@@ -278,7 +275,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct UB {
   a : i32;
   b : u32;
@@ -420,7 +416,6 @@
 
 TEST_F(DecomposeMemoryAccessTest, SB_BasicStore) {
   auto* src = R"(
-[[block]]
 struct SB {
   a : i32;
   b : u32;
@@ -476,7 +471,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct SB {
   a : i32;
   b : u32;
@@ -635,7 +629,6 @@
 
 TEST_F(DecomposeMemoryAccessTest, LoadStructure) {
   auto* src = R"(
-[[block]]
 struct SB {
   a : i32;
   b : u32;
@@ -670,7 +663,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct SB {
   a : i32;
   b : u32;
@@ -795,7 +787,6 @@
 
 TEST_F(DecomposeMemoryAccessTest, StoreStructure) {
   auto* src = R"(
-[[block]]
 struct SB {
   a : i32;
   b : u32;
@@ -830,7 +821,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct SB {
   a : i32;
   b : u32;
@@ -1005,7 +995,6 @@
   c : i32;
 };
 
-[[block]]
 struct SB {
   [[size(128)]]
   a : i32;
@@ -1040,7 +1029,6 @@
   c : i32;
 };
 
-[[block]]
 struct SB {
   [[size(128)]]
   a : i32;
@@ -1077,7 +1065,6 @@
   c : i32;
 };
 
-[[block]]
 struct SB {
   [[size(128)]]
   a : i32;
@@ -1108,7 +1095,6 @@
   c : i32;
 };
 
-[[block]]
 struct SB {
   [[size(128)]]
   a : i32;
@@ -1156,7 +1142,6 @@
 
 type A2_Array = [[stride(256)]] array<S2>;
 
-[[block]]
 struct SB {
   [[size(128)]]
   a : i32;
@@ -1195,7 +1180,6 @@
 
 type A2_Array = [[stride(256)]] array<S2>;
 
-[[block]]
 struct SB {
   [[size(128)]]
   a : i32;
@@ -1223,7 +1207,6 @@
 
 TEST_F(DecomposeMemoryAccessTest, StorageBufferAtomics) {
   auto* src = R"(
-[[block]]
 struct SB {
   padding : vec4<f32>;
   a : atomic<i32>;
@@ -1261,7 +1244,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct SB {
   padding : vec4<f32>;
   a : atomic<i32>;
diff --git a/src/transform/decompose_strided_matrix_test.cc b/src/transform/decompose_strided_matrix_test.cc
index b7a22e4..41555dc 100644
--- a/src/transform/decompose_strided_matrix_test.cc
+++ b/src/transform/decompose_strided_matrix_test.cc
@@ -51,7 +51,6 @@
 }
 
 TEST_F(DecomposeStridedMatrixTest, ReadUniformMatrix) {
-  // [[block]]
   // struct S {
   //   [[offset(16), stride(32)]]
   //   [[internal(ignore_stride_decoration)]]
@@ -74,9 +73,6 @@
                   b.create<ast::StrideDecoration>(32),
                   b.Disable(ast::DisabledValidation::kIgnoreStrideDecoration),
               }),
-      },
-      {
-          b.StructBlock(),
       });
   b.Global("s", b.ty.Of(S), ast::StorageClass::kUniform,
            b.GroupAndBinding(0, 0));
@@ -91,7 +87,6 @@
       });
 
   auto* expect = R"(
-[[block]]
 struct S {
   [[size(16)]]
   padding : u32;
@@ -117,7 +112,6 @@
 }
 
 TEST_F(DecomposeStridedMatrixTest, ReadUniformColumn) {
-  // [[block]]
   // struct S {
   //   [[offset(16), stride(32)]]
   //   [[internal(ignore_stride_decoration)]]
@@ -140,9 +134,6 @@
                   b.create<ast::StrideDecoration>(32),
                   b.Disable(ast::DisabledValidation::kIgnoreStrideDecoration),
               }),
-      },
-      {
-          b.StructBlock(),
       });
   b.Global("s", b.ty.Of(S), ast::StorageClass::kUniform,
            b.GroupAndBinding(0, 0));
@@ -157,7 +148,6 @@
          });
 
   auto* expect = R"(
-[[block]]
 struct S {
   [[size(16)]]
   padding : u32;
@@ -179,7 +169,6 @@
 }
 
 TEST_F(DecomposeStridedMatrixTest, ReadUniformMatrix_DefaultStride) {
-  // [[block]]
   // struct S {
   //   [[offset(16), stride(8)]]
   //   [[internal(ignore_stride_decoration)]]
@@ -202,9 +191,6 @@
                   b.create<ast::StrideDecoration>(8),
                   b.Disable(ast::DisabledValidation::kIgnoreStrideDecoration),
               }),
-      },
-      {
-          b.StructBlock(),
       });
   b.Global("s", b.ty.Of(S), ast::StorageClass::kUniform,
            b.GroupAndBinding(0, 0));
@@ -219,7 +205,6 @@
       });
 
   auto* expect = R"(
-[[block]]
 struct S {
   [[size(16)]]
   padding : u32;
@@ -242,7 +227,6 @@
 }
 
 TEST_F(DecomposeStridedMatrixTest, ReadStorageMatrix) {
-  // [[block]]
   // struct S {
   //   [[offset(8), stride(32)]]
   //   [[internal(ignore_stride_decoration)]]
@@ -265,9 +249,6 @@
                   b.create<ast::StrideDecoration>(32),
                   b.Disable(ast::DisabledValidation::kIgnoreStrideDecoration),
               }),
-      },
-      {
-          b.StructBlock(),
       });
   b.Global("s", b.ty.Of(S), ast::StorageClass::kStorage,
            ast::Access::kReadWrite, b.GroupAndBinding(0, 0));
@@ -282,7 +263,6 @@
       });
 
   auto* expect = R"(
-[[block]]
 struct S {
   [[size(8)]]
   padding : u32;
@@ -308,7 +288,6 @@
 }
 
 TEST_F(DecomposeStridedMatrixTest, ReadStorageColumn) {
-  // [[block]]
   // struct S {
   //   [[offset(16), stride(32)]]
   //   [[internal(ignore_stride_decoration)]]
@@ -331,9 +310,6 @@
                   b.create<ast::StrideDecoration>(32),
                   b.Disable(ast::DisabledValidation::kIgnoreStrideDecoration),
               }),
-      },
-      {
-          b.StructBlock(),
       });
   b.Global("s", b.ty.Of(S), ast::StorageClass::kStorage,
            ast::Access::kReadWrite, b.GroupAndBinding(0, 0));
@@ -348,7 +324,6 @@
          });
 
   auto* expect = R"(
-[[block]]
 struct S {
   [[size(16)]]
   padding : u32;
@@ -370,7 +345,6 @@
 }
 
 TEST_F(DecomposeStridedMatrixTest, WriteStorageMatrix) {
-  // [[block]]
   // struct S {
   //   [[offset(8), stride(32)]]
   //   [[internal(ignore_stride_decoration)]]
@@ -393,9 +367,6 @@
                   b.create<ast::StrideDecoration>(32),
                   b.Disable(ast::DisabledValidation::kIgnoreStrideDecoration),
               }),
-      },
-      {
-          b.StructBlock(),
       });
   b.Global("s", b.ty.Of(S), ast::StorageClass::kStorage,
            ast::Access::kReadWrite, b.GroupAndBinding(0, 0));
@@ -411,7 +382,6 @@
          });
 
   auto* expect = R"(
-[[block]]
 struct S {
   [[size(8)]]
   padding : u32;
@@ -437,7 +407,6 @@
 }
 
 TEST_F(DecomposeStridedMatrixTest, WriteStorageColumn) {
-  // [[block]]
   // struct S {
   //   [[offset(8), stride(32)]]
   //   [[internal(ignore_stride_decoration)]]
@@ -460,9 +429,6 @@
                   b.create<ast::StrideDecoration>(32),
                   b.Disable(ast::DisabledValidation::kIgnoreStrideDecoration),
               }),
-      },
-      {
-          b.StructBlock(),
       });
   b.Global("s", b.ty.Of(S), ast::StorageClass::kStorage,
            ast::Access::kReadWrite, b.GroupAndBinding(0, 0));
@@ -477,7 +443,6 @@
          });
 
   auto* expect = R"(
-[[block]]
 struct S {
   [[size(8)]]
   padding : u32;
@@ -499,7 +464,6 @@
 }
 
 TEST_F(DecomposeStridedMatrixTest, ReadWriteViaPointerLets) {
-  // [[block]]
   // struct S {
   //   [[offset(8), stride(32)]]
   //   [[internal(ignore_stride_decoration)]]
@@ -528,9 +492,6 @@
                   b.create<ast::StrideDecoration>(32),
                   b.Disable(ast::DisabledValidation::kIgnoreStrideDecoration),
               }),
-      },
-      {
-          b.StructBlock(),
       });
   b.Global("s", b.ty.Of(S), ast::StorageClass::kStorage,
            ast::Access::kReadWrite, b.GroupAndBinding(0, 0));
@@ -554,7 +515,6 @@
       });
 
   auto* expect = R"(
-[[block]]
 struct S {
   [[size(8)]]
   padding : u32;
diff --git a/src/transform/first_index_offset.cc b/src/transform/first_index_offset.cc
index 4bc21c2..6fcff16 100644
--- a/src/transform/first_index_offset.cc
+++ b/src/transform/first_index_offset.cc
@@ -18,7 +18,6 @@
 #include <unordered_map>
 #include <utility>
 
-#include "src/ast/struct_block_decoration.h"
 #include "src/program_builder.h"
 #include "src/sem/function.h"
 #include "src/sem/member_accessor_expression.h"
@@ -133,9 +132,7 @@
       instance_index_offset = offset;
       offset += 4;
     }
-    auto* struct_ =
-        ctx.dst->Structure(ctx.dst->Sym(), std::move(members),
-                           {ctx.dst->create<ast::StructBlockDecoration>()});
+    auto* struct_ = ctx.dst->Structure(ctx.dst->Sym(), std::move(members));
 
     // Create a global to hold the uniform buffer
     Symbol buffer_name = ctx.dst->Sym();
diff --git a/src/transform/first_index_offset.h b/src/transform/first_index_offset.h
index 21a618a..ffbb138 100644
--- a/src/transform/first_index_offset.h
+++ b/src/transform/first_index_offset.h
@@ -41,7 +41,6 @@
 ///   }
 ///
 /// After:
-///   [[block]]
 ///   struct TintFirstIndexOffsetData {
 ///     tint_first_vertex_index : u32;
 ///     tint_first_instance_index : u32;
diff --git a/src/transform/first_index_offset_test.cc b/src/transform/first_index_offset_test.cc
index 8f9d4ff..8d537e0 100644
--- a/src/transform/first_index_offset_test.cc
+++ b/src/transform/first_index_offset_test.cc
@@ -59,7 +59,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct tint_symbol {
   first_vertex_index : u32;
 };
@@ -106,7 +105,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct tint_symbol {
   first_instance_index : u32;
 };
@@ -158,7 +156,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct tint_symbol {
   first_vertex_index : u32;
   first_instance_index : u32;
@@ -217,7 +214,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct tint_symbol {
   first_vertex_index : u32;
 };
@@ -280,7 +276,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct tint_symbol {
   first_vertex_index : u32;
   first_instance_index : u32;
diff --git a/src/transform/module_scope_var_to_entry_point_param.h b/src/transform/module_scope_var_to_entry_point_param.h
index 1b178ec..34db3e6 100644
--- a/src/transform/module_scope_var_to_entry_point_param.h
+++ b/src/transform/module_scope_var_to_entry_point_param.h
@@ -33,7 +33,6 @@
 ///
 /// Before:
 /// ```
-/// [[block]]
 /// struct S {
 ///   f : f32;
 /// };
diff --git a/src/transform/module_scope_var_to_entry_point_param_test.cc b/src/transform/module_scope_var_to_entry_point_param_test.cc
index 26951ab..a1620e7 100644
--- a/src/transform/module_scope_var_to_entry_point_param_test.cc
+++ b/src/transform/module_scope_var_to_entry_point_param_test.cc
@@ -199,7 +199,6 @@
 
 TEST_F(ModuleScopeVarToEntryPointParamTest, Buffers_Basic) {
   auto* src = R"(
-[[block]]
 struct S {
   a : f32;
 };
@@ -217,7 +216,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct S {
   a : f32;
 };
@@ -236,7 +234,6 @@
 
 TEST_F(ModuleScopeVarToEntryPointParamTest, Buffers_FunctionCalls) {
   auto* src = R"(
-[[block]]
 struct S {
   a : f32;
 };
@@ -268,7 +265,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct S {
   a : f32;
 };
@@ -490,7 +486,6 @@
 
 TEST_F(ModuleScopeVarToEntryPointParamTest, UnusedVariables) {
   auto* src = R"(
-[[block]]
 struct S {
   a : f32;
 };
@@ -512,7 +507,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct S {
   a : f32;
 };
diff --git a/src/transform/multiplanar_external_texture.cc b/src/transform/multiplanar_external_texture.cc
index a3cfcc7..387604b 100644
--- a/src/transform/multiplanar_external_texture.cc
+++ b/src/transform/multiplanar_external_texture.cc
@@ -241,8 +241,7 @@
 
     params_struct_sym = b.Symbols().New("ExternalTextureParams");
 
-    b.Structure(params_struct_sym, member_list,
-                ast::DecorationList{b.StructBlock()});
+    b.Structure(params_struct_sym, member_list);
   }
 
   /// Constructs a StatementList containing all the statements making up the
diff --git a/src/transform/multiplanar_external_texture_test.cc b/src/transform/multiplanar_external_texture_test.cc
index 488df7a..631d76b 100644
--- a/src/transform/multiplanar_external_texture_test.cc
+++ b/src/transform/multiplanar_external_texture_test.cc
@@ -78,7 +78,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct ExternalTextureParams {
   numPlanes : u32;
   vr : f32;
@@ -123,7 +122,6 @@
   auto* expect = R"(
 [[group(0), binding(0)]] var s : sampler;
 
-[[block]]
 struct ExternalTextureParams {
   numPlanes : u32;
   vr : f32;
@@ -177,7 +175,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct ExternalTextureParams {
   numPlanes : u32;
   vr : f32;
@@ -235,7 +232,6 @@
   auto* expect = R"(
 [[group(0), binding(0)]] var s : sampler;
 
-[[block]]
 struct ExternalTextureParams {
   numPlanes : u32;
   vr : f32;
@@ -309,7 +305,6 @@
   auto* expect = R"(
 [[group(0), binding(0)]] var s : sampler;
 
-[[block]]
 struct ExternalTextureParams {
   numPlanes : u32;
   vr : f32;
@@ -392,7 +387,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct ExternalTextureParams {
   numPlanes : u32;
   vr : f32;
@@ -459,7 +453,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct ExternalTextureParams {
   numPlanes : u32;
   vr : f32;
@@ -528,7 +521,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct ExternalTextureParams {
   numPlanes : u32;
   vr : f32;
@@ -607,7 +599,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct ExternalTextureParams {
   numPlanes : u32;
   vr : f32;
diff --git a/src/transform/num_workgroups_from_uniform.cc b/src/transform/num_workgroups_from_uniform.cc
index 62faf9a..1e0f77b 100644
--- a/src/transform/num_workgroups_from_uniform.cc
+++ b/src/transform/num_workgroups_from_uniform.cc
@@ -122,8 +122,7 @@
       auto* num_workgroups_struct = ctx.dst->Structure(
           ctx.dst->Sym(),
           {ctx.dst->Member(kNumWorkgroupsMemberName,
-                           ctx.dst->ty.vec3(ctx.dst->ty.u32()))},
-          ast::DecorationList{ctx.dst->create<ast::StructBlockDecoration>()});
+                           ctx.dst->ty.vec3(ctx.dst->ty.u32()))});
       num_workgroups_ubo = ctx.dst->Global(
           ctx.dst->Sym(), ctx.dst->ty.Of(num_workgroups_struct),
           ast::StorageClass::kUniform,
diff --git a/src/transform/num_workgroups_from_uniform.h b/src/transform/num_workgroups_from_uniform.h
index 94d9ba9..af922c2 100644
--- a/src/transform/num_workgroups_from_uniform.h
+++ b/src/transform/num_workgroups_from_uniform.h
@@ -30,7 +30,6 @@
 ///
 /// The generated uniform buffer will have the form:
 /// ```
-/// [[block]]
 /// struct num_workgroups_struct {
 ///  num_workgroups : vec3<u32>;
 /// };
diff --git a/src/transform/num_workgroups_from_uniform_test.cc b/src/transform/num_workgroups_from_uniform_test.cc
index 1d71941..9d1b81d 100644
--- a/src/transform/num_workgroups_from_uniform_test.cc
+++ b/src/transform/num_workgroups_from_uniform_test.cc
@@ -66,7 +66,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct tint_symbol_2 {
   num_workgroups : vec3<u32>;
 };
@@ -109,7 +108,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct tint_symbol_2 {
   num_workgroups : vec3<u32>;
 };
@@ -158,7 +156,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct tint_symbol_2 {
   num_workgroups : vec3<u32>;
 };
@@ -234,7 +231,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct tint_symbol_6 {
   num_workgroups : vec3<u32>;
 };
diff --git a/src/transform/pad_array_elements_test.cc b/src/transform/pad_array_elements_test.cc
index eca088c..7483f3f 100644
--- a/src/transform/pad_array_elements_test.cc
+++ b/src/transform/pad_array_elements_test.cc
@@ -64,7 +64,6 @@
 
 TEST_F(PadArrayElementsTest, RuntimeArray) {
   auto* src = R"(
-[[block]]
 struct S {
   rta : [[stride(8)]] array<i32>;
 };
@@ -75,7 +74,6 @@
   el : i32;
 };
 
-[[block]]
 struct S {
   rta : array<tint_padded_array_element>;
 };
diff --git a/src/transform/remove_phonies_test.cc b/src/transform/remove_phonies_test.cc
index 138fdbf..837e34c 100644
--- a/src/transform/remove_phonies_test.cc
+++ b/src/transform/remove_phonies_test.cc
@@ -173,7 +173,6 @@
 
 TEST_F(RemovePhoniesTest, ForLoop) {
   auto* src = R"(
-[[block]]
 struct S {
   arr : array<i32>;
 };
@@ -203,7 +202,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct S {
   arr : array<i32>;
 };
diff --git a/src/transform/robustness_test.cc b/src/transform/robustness_test.cc
index 4dfe0c1..4c0025e 100644
--- a/src/transform/robustness_test.cc
+++ b/src/transform/robustness_test.cc
@@ -174,7 +174,6 @@
 // 0xffffffff. If WGSL supports 64-bit indexing, re-enable this test.
 TEST_F(RobustnessTest, DISABLED_LargeArrays_Idx) {
   auto* src = R"(
-[[block]]
 struct S {
   a : array<f32, 0x7fffffff>;
   b : array<f32>;
@@ -213,7 +212,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct S {
   a : array<f32, 2147483647>;
   b : array<f32>;
@@ -617,7 +615,6 @@
 
 TEST_F(RobustnessTest, RuntimeArray_Clamps) {
   auto* src = R"(
-[[block]]
 struct S {
   a : f32;
   b : array<f32>;
@@ -630,7 +627,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct S {
   a : f32;
   b : array<f32>;
@@ -778,7 +774,6 @@
 // Check that existing use of min() and arrayLength() do not get renamed.
 TEST_F(RobustnessTest, DontRenameSymbols) {
   auto* src = R"(
-[[block]]
 struct S {
   a : f32;
   b : array<f32>;
@@ -796,7 +791,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct S {
   a : f32;
   b : array<f32>;
@@ -819,7 +813,6 @@
 }
 
 const char* kOmitSourceShader = R"(
-[[block]]
 struct S {
   a : array<f32, 4>;
   b : array<f32>;
@@ -827,7 +820,7 @@
 [[group(0), binding(0)]] var<storage, read> s : S;
 
 type UArr = [[stride(16)]] array<f32, 4>;
-[[block]] struct U {
+struct U {
   a : UArr;
 };
 [[group(1), binding(0)]] var<uniform> u : U;
@@ -878,7 +871,6 @@
 
 TEST_F(RobustnessTest, OmitNone) {
   auto* expect = R"(
-[[block]]
 struct S {
   a : array<f32, 4>;
   b : array<f32>;
@@ -888,7 +880,6 @@
 
 type UArr = [[stride(16)]] array<f32, 4>;
 
-[[block]]
 struct U {
   a : UArr;
 };
@@ -943,7 +934,6 @@
 
 TEST_F(RobustnessTest, OmitStorage) {
   auto* expect = R"(
-[[block]]
 struct S {
   a : array<f32, 4>;
   b : array<f32>;
@@ -953,7 +943,6 @@
 
 type UArr = [[stride(16)]] array<f32, 4>;
 
-[[block]]
 struct U {
   a : UArr;
 };
@@ -1010,7 +999,6 @@
 
 TEST_F(RobustnessTest, OmitUniform) {
   auto* expect = R"(
-[[block]]
 struct S {
   a : array<f32, 4>;
   b : array<f32>;
@@ -1020,7 +1008,6 @@
 
 type UArr = [[stride(16)]] array<f32, 4>;
 
-[[block]]
 struct U {
   a : UArr;
 };
@@ -1077,7 +1064,6 @@
 
 TEST_F(RobustnessTest, OmitBoth) {
   auto* expect = R"(
-[[block]]
 struct S {
   a : array<f32, 4>;
   b : array<f32>;
@@ -1087,7 +1073,6 @@
 
 type UArr = [[stride(16)]] array<f32, 4>;
 
-[[block]]
 struct U {
   a : UArr;
 };
diff --git a/src/transform/vertex_pulling.cc b/src/transform/vertex_pulling.cc
index 40dd564..ea15e85 100644
--- a/src/transform/vertex_pulling.cc
+++ b/src/transform/vertex_pulling.cc
@@ -19,7 +19,6 @@
 
 #include "src/ast/assignment_statement.h"
 #include "src/ast/bitcast_expression.h"
-#include "src/ast/struct_block_decoration.h"
 #include "src/ast/variable_decl_statement.h"
 #include "src/program_builder.h"
 #include "src/sem/variable.h"
@@ -260,9 +259,6 @@
         {
             ctx.dst->Member(GetStructBufferName(),
                             ctx.dst->ty.array<ProgramBuilder::u32>(4)),
-        },
-        {
-            ctx.dst->create<ast::StructBlockDecoration>(),
         });
     for (uint32_t i = 0; i < cfg.vertex_state.size(); ++i) {
       // The decorated variable with struct type
diff --git a/src/transform/vertex_pulling_test.cc b/src/transform/vertex_pulling_test.cc
index 20f7929..b43d4a4 100644
--- a/src/transform/vertex_pulling_test.cc
+++ b/src/transform/vertex_pulling_test.cc
@@ -107,7 +107,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
 };
@@ -137,7 +136,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
 };
@@ -176,7 +174,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
 };
@@ -215,7 +212,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
 };
@@ -259,7 +255,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
 };
@@ -308,7 +303,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
 };
@@ -369,7 +363,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
 };
@@ -452,7 +445,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
 };
@@ -520,7 +512,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
 };
@@ -566,7 +557,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
 };
@@ -623,7 +613,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct TintVertexData {
   tint_vertex_data_1 : [[stride(4)]] array<u32>;
 };
@@ -701,7 +690,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
 };
@@ -862,7 +850,6 @@
 
   auto* expect =
       R"(
-[[block]]
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
 };
@@ -1022,7 +1009,6 @@
 )";
 
   auto* expect = R"(
-[[block]]
 struct TintVertexData {
   tint_vertex_data : [[stride(4)]] array<u32>;
 };