diff --git a/src/BUILD.gn b/src/BUILD.gn
index b54c79f..2a095e7 100644
--- a/src/BUILD.gn
+++ b/src/BUILD.gn
@@ -295,8 +295,6 @@
   sources = [
     "ast/access.cc",
     "ast/access.h",
-    "ast/access_decoration.cc",
-    "ast/access_decoration.h",
     "ast/alias.cc",
     "ast/alias.h",
     "ast/array.cc",
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index af2200b..1df7ed6 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -40,8 +40,6 @@
   ../include/tint/tint.h
   ast/access.cc
   ast/access.h
-  ast/access_decoration.cc
-  ast/access_decoration.h
   ast/alias.cc
   ast/alias.h
   ast/array_accessor_expression.cc
@@ -513,7 +511,6 @@
 
 if(${TINT_BUILD_TESTS})
   set(TINT_TEST_SRCS
-    ast/access_decoration_test.cc
     ast/alias_test.cc
     ast/array_accessor_expression_test.cc
     ast/array_test.cc
diff --git a/src/ast/access_decoration.cc b/src/ast/access_decoration.cc
deleted file mode 100644
index 6a3b6f0..0000000
--- a/src/ast/access_decoration.cc
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2020 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/ast/access_decoration.h"
-
-#include <string>
-
-#include "src/program_builder.h"
-
-TINT_INSTANTIATE_TYPEINFO(tint::ast::AccessDecoration);
-
-namespace tint {
-namespace ast {
-
-AccessDecoration::AccessDecoration(ProgramID program_id,
-                                   const Source& source,
-                                   Access val)
-    : Base(program_id, source), value_(val) {}
-
-AccessDecoration::~AccessDecoration() = default;
-
-std::string AccessDecoration::name() const {
-  return "access";
-}
-
-void AccessDecoration::to_str(const sem::Info&,
-                              std::ostream& out,
-                              size_t indent) const {
-  make_indent(out, indent);
-  out << "AccessDecoration{" << value_ << "}" << std::endl;
-}
-
-AccessDecoration* AccessDecoration::Clone(CloneContext* ctx) const {
-  // Clone arguments outside of create() call to have deterministic ordering
-  auto src = ctx->Clone(source());
-  return ctx->dst->create<AccessDecoration>(src, value_);
-}
-
-}  // namespace ast
-}  // namespace tint
diff --git a/src/ast/access_decoration.h b/src/ast/access_decoration.h
deleted file mode 100644
index cee1646..0000000
--- a/src/ast/access_decoration.h
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2020 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef SRC_AST_ACCESS_DECORATION_H_
-#define SRC_AST_ACCESS_DECORATION_H_
-
-#include <string>
-
-#include "src/ast/access.h"
-#include "src/ast/decoration.h"
-
-namespace tint {
-namespace ast {
-
-/// An access decoration
-/// [DEPRECATED]: TODO(crbug.com/tint/846): Remove this class
-class AccessDecoration : public Castable<AccessDecoration, Decoration> {
- public:
-  /// constructor
-  /// @param program_id the identifier of the program that owns this node
-  /// @param source the source of this decoration
-  /// @param value the access value
-  AccessDecoration(ProgramID program_id, const Source& source, Access value);
-  ~AccessDecoration() override;
-
-  /// @returns the access control value
-  Access value() const { return value_; }
-
-  /// @returns the WGSL name for the decoration
-  std::string name() const override;
-
-  /// Outputs the decoration to the given stream
-  /// @param sem the semantic info for the program
-  /// @param out the stream to write to
-  /// @param indent number of spaces to indent the node when writing
-  void to_str(const sem::Info& sem,
-              std::ostream& out,
-              size_t indent) const override;
-
-  /// Clones this node and all transitive child nodes using the `CloneContext`
-  /// `ctx`.
-  /// @param ctx the clone context
-  /// @return the newly cloned node
-  AccessDecoration* Clone(CloneContext* ctx) const override;
-
- private:
-  Access const value_;
-};
-
-}  // namespace ast
-}  // namespace tint
-
-#endif  // SRC_AST_ACCESS_DECORATION_H_
diff --git a/src/ast/access_decoration_test.cc b/src/ast/access_decoration_test.cc
deleted file mode 100644
index ecb6e0d..0000000
--- a/src/ast/access_decoration_test.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2020 The Tint Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "src/ast/access_decoration.h"
-
-#include "src/ast/test_helper.h"
-
-namespace tint {
-namespace ast {
-namespace {
-
-using AccessDecorationTest = TestHelper;
-
-TEST_F(AccessDecorationTest, Creation) {
-  auto* d = create<AccessDecoration>(ast::Access::kWrite);
-  EXPECT_EQ(ast::Access::kWrite, d->value());
-}
-
-TEST_F(AccessDecorationTest, ToStr) {
-  auto* d = create<AccessDecoration>(ast::Access::kRead);
-  EXPECT_EQ(str(d), R"(AccessDecoration{read}
-)");
-}
-
-}  // namespace
-}  // namespace ast
-}  // namespace tint
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index a84e15c..425b7d5 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -14,7 +14,6 @@
 
 #include "src/reader/wgsl/parser_impl.h"
 
-#include "src/ast/access_decoration.h"
 #include "src/ast/array.h"
 #include "src/ast/assignment_statement.h"
 #include "src/ast/bitcast_expression.h"
@@ -107,14 +106,12 @@
   return ast::Builtin::kNone;
 }
 
-const char kAccessDecoration[] = "access";
 const char kBindingDecoration[] = "binding";
 const char kBlockDecoration[] = "block";
 const char kBuiltinDecoration[] = "builtin";
 const char kGroupDecoration[] = "group";
 const char kLocationDecoration[] = "location";
 const char kOverrideDecoration[] = "override";
-const char kOffsetDecoration[] = "offset";  // DEPRECATED
 const char kSizeDecoration[] = "size";
 const char kAlignDecoration[] = "align";
 const char kSetDecoration[] = "set";
@@ -127,11 +124,10 @@
     return false;
 
   auto s = t.to_str();
-  return s == kAccessDecoration || s == kAlignDecoration ||
-         s == kBindingDecoration || s == kBlockDecoration ||
-         s == kBuiltinDecoration || s == kGroupDecoration ||
-         s == kLocationDecoration || s == kOverrideDecoration ||
-         s == kOffsetDecoration || s == kSetDecoration ||
+  return s == kAlignDecoration || s == kBindingDecoration ||
+         s == kBlockDecoration || s == kBuiltinDecoration ||
+         s == kGroupDecoration || s == kLocationDecoration ||
+         s == kOverrideDecoration || s == kSetDecoration ||
          s == kSizeDecoration || s == kStageDecoration ||
          s == kStrideDecoration || s == kWorkgroupSizeDecoration;
 }
@@ -204,13 +200,9 @@
 ParserImpl::TypedIdentifier::TypedIdentifier(const TypedIdentifier&) = default;
 
 ParserImpl::TypedIdentifier::TypedIdentifier(ast::Type* type_in,
-                                             ast::Access access_in,
                                              std::string name_in,
                                              Source source_in)
-    : type(type_in),
-      access(access_in),
-      name(std::move(name_in)),
-      source(std::move(source_in)) {}
+    : type(type_in), name(std::move(name_in)), source(std::move(source_in)) {}
 
 ParserImpl::TypedIdentifier::~TypedIdentifier() = default;
 
@@ -557,19 +549,7 @@
   if (decl.errored)
     return Failure::kErrored;
 
-  auto access = vq.access;
-
-  if (access == ast::Access::kUndefined &&
-      decl->access != ast::Access::kUndefined) {
-    // TODO(crbug.com/tint/846): Remove this
-    access = decl->access;
-    std::stringstream msg;
-    msg << "declare access with var<" << vq.storage_class << ", " << access
-        << "> instead of using [[access]] decoration";
-    deprecated(source, msg.str());
-  }
-
-  return VarDeclInfo{decl->source, decl->name, vq.storage_class, access,
+  return VarDeclInfo{decl->source, decl->name, vq.storage_class, vq.access,
                      decl->type};
 }
 
@@ -580,8 +560,7 @@
 //  | multisampled_texture_type LESS_THAN type_decl GREATER_THAN
 //  | storage_texture_type LESS_THAN image_storage_type
 //                         COMMA access GREATER_THAN
-Maybe<ast::Type*> ParserImpl::texture_sampler_types(
-    ast::DecorationList& decos) {
+Maybe<ast::Type*> ParserImpl::texture_sampler_types() {
   auto type = sampler_type();
   if (type.matched)
     return type;
@@ -630,21 +609,8 @@
         return Failure::kErrored;
       }
 
-      if (!match(Token::Type::kComma)) {
-        // TODO(crbug.com/tint/846): Remove this, along with the decos parameter
-        auto access_decos = take_decorations<ast::AccessDecoration>(decos);
-        if (access_decos.size() > 1) {
-          return add_error(access_decos[1]->source(),
-                           "multiple access decorations not allowed");
-        }
-        if (access_decos.size() == 0) {
-          return add_error(source_range, "expected access control");
-        }
-
-        deprecated(
-            peek().source(),
-            "access control is expected as last parameter of storage textures");
-        return std::make_pair(format.value, access_decos[0]->value());
+      if (!expect("access control", Token::Type::kComma)) {
+        return Failure::kErrored;
       }
 
       auto access = expect_access("access control");
@@ -926,8 +892,7 @@
     return Failure::kErrored;
 
   if (allow_inferred && !peek().Is(Token::Type::kColon)) {
-    return TypedIdentifier{nullptr, ast::Access::kUndefined, ident.value,
-                           ident.source};
+    return TypedIdentifier{nullptr, ident.value, ident.source};
   }
 
   if (!expect(use, Token::Type::kColon))
@@ -944,18 +909,10 @@
   if (!type.matched)
     return add_error(t.source(), "invalid type", use);
 
-  auto access_decos = take_decorations<ast::AccessDecoration>(decos.value);
-
   if (!expect_decorations_consumed(decos.value))
     return Failure::kErrored;
 
-  if (access_decos.size() > 1)
-    return add_error(ident.source, "multiple access decorations not allowed");
-
-  auto access =
-      access_decos.empty() ? ast::Access::kUndefined : access_decos[0]->value();
-
-  return TypedIdentifier{type.value, access, ident.value, ident.source};
+  return TypedIdentifier{type.value, ident.value, ident.source};
 }
 
 Expect<ast::Access> ParserImpl::expect_access(const std::string& use) {
@@ -1120,7 +1077,7 @@
     return expect_type_decl_matrix(t);
   }
 
-  auto texture_or_sampler = texture_sampler_types(decos);
+  auto texture_or_sampler = texture_sampler_types();
   if (texture_or_sampler.errored)
     return Failure::kErrored;
   if (texture_or_sampler.matched)
@@ -2991,16 +2948,6 @@
   }
 
   auto s = t.to_str();
-  if (s == kAccessDecoration) {
-    const char* use = "access decoration";
-    return expect_paren_block(use, [&]() -> Result {
-      auto val = expect_access("access control");
-      if (val.errored)
-        return Failure::kErrored;
-
-      return create<ast::AccessDecoration>(t.source(), val.value);
-    });
-  }
 
   if (s == kLocationDecoration) {
     const char* use = "location decoration";
@@ -3108,20 +3055,6 @@
     });
   }
 
-  if (s == kOffsetDecoration) {
-    deprecated(t.source(),
-               "[[offset]] has been replaced with [[size]] and [[align]]");
-
-    const char* use = "offset decoration";
-    return expect_paren_block(use, [&]() -> Result {
-      auto val = expect_positive_sint(use);
-      if (val.errored)
-        return Failure::kErrored;
-
-      return create<ast::StructMemberOffsetDecoration>(t.source(), val.value);
-    });
-  }
-
   if (s == kSizeDecoration) {
     const char* use = "size decoration";
     return expect_paren_block(use, [&]() -> Result {
diff --git a/src/reader/wgsl/parser_impl.h b/src/reader/wgsl/parser_impl.h
index 8e6fb0c..adeced4 100644
--- a/src/reader/wgsl/parser_impl.h
+++ b/src/reader/wgsl/parser_impl.h
@@ -208,20 +208,14 @@
     TypedIdentifier(const TypedIdentifier& other);
     /// Constructor
     /// @param type_in parsed type
-    /// @param access_in parsed access
     /// @param name_in parsed identifier
     /// @param source_in source to the identifier
-    TypedIdentifier(ast::Type* type_in,
-                    ast::Access access_in,
-                    std::string name_in,
-                    Source source_in);
+    TypedIdentifier(ast::Type* type_in, std::string name_in, Source source_in);
     /// Destructor
     ~TypedIdentifier();
 
     /// Parsed type. May be nullptr for inferred types.
     ast::Type* type = nullptr;
-    /// The access control. TODO(crbug.com/tint/846): Remove
-    ast::Access access = ast::Access::kUndefined;
     /// Parsed identifier.
     std::string name;
     /// Source to the identifier.
@@ -456,10 +450,8 @@
   /// @returns the parsed function, nullptr otherwise
   Maybe<ast::Function*> function_decl(ast::DecorationList& decos);
   /// Parses a `texture_sampler_types` grammar element
-  /// TODO(crbug.com/tint/864): Remove decos parameter
-  /// @param decos the list of decorations for the type declaration.
   /// @returns the parsed Type or nullptr if none matched.
-  Maybe<ast::Type*> texture_sampler_types(ast::DecorationList& decos);
+  Maybe<ast::Type*> texture_sampler_types();
   /// Parses a `sampler_type` grammar element
   /// @returns the parsed Type or nullptr if none matched.
   Maybe<ast::Type*> sampler_type();
diff --git a/src/reader/wgsl/parser_impl_struct_member_decoration_test.cc b/src/reader/wgsl/parser_impl_struct_member_decoration_test.cc
index d62538e..6add8ee 100644
--- a/src/reader/wgsl/parser_impl_struct_member_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_member_decoration_test.cc
@@ -19,74 +19,6 @@
 namespace wgsl {
 namespace {
 
-TEST_F(ParserImplTest, Decoration_Offset) {
-  auto p = parser("offset(4)");
-  auto deco = p->decoration();
-  EXPECT_TRUE(deco.matched);
-  EXPECT_FALSE(deco.errored);
-  ASSERT_NE(deco.value, nullptr);
-  ASSERT_FALSE(p->has_error());
-
-  auto* member_deco = deco.value->As<ast::Decoration>();
-  ASSERT_NE(member_deco, nullptr);
-  ASSERT_TRUE(member_deco->Is<ast::StructMemberOffsetDecoration>());
-
-  auto* o = member_deco->As<ast::StructMemberOffsetDecoration>();
-  EXPECT_EQ(o->offset(), 4u);
-}
-
-TEST_F(ParserImplTest, Decoration_Offset_MissingLeftParen) {
-  auto p = parser("offset 4)");
-  auto deco = p->decoration();
-  EXPECT_FALSE(deco.matched);
-  EXPECT_TRUE(deco.errored);
-  EXPECT_EQ(deco.value, nullptr);
-  EXPECT_TRUE(p->has_error());
-  EXPECT_EQ(
-      p->error(),
-      R"(1:1: use of deprecated language feature: [[offset]] has been replaced with [[size]] and [[align]]
-1:8: expected '(' for offset decoration)");
-}
-
-TEST_F(ParserImplTest, Decoration_Offset_MissingRightParen) {
-  auto p = parser("offset(4");
-  auto deco = p->decoration();
-  EXPECT_FALSE(deco.matched);
-  EXPECT_TRUE(deco.errored);
-  EXPECT_EQ(deco.value, nullptr);
-  EXPECT_TRUE(p->has_error());
-  EXPECT_EQ(
-      p->error(),
-      R"(1:1: use of deprecated language feature: [[offset]] has been replaced with [[size]] and [[align]]
-1:9: expected ')' for offset decoration)");
-}
-
-TEST_F(ParserImplTest, Decoration_Offset_MissingValue) {
-  auto p = parser("offset()");
-  auto deco = p->decoration();
-  EXPECT_FALSE(deco.matched);
-  EXPECT_TRUE(deco.errored);
-  EXPECT_EQ(deco.value, nullptr);
-  EXPECT_TRUE(p->has_error());
-  EXPECT_EQ(
-      p->error(),
-      R"(1:1: use of deprecated language feature: [[offset]] has been replaced with [[size]] and [[align]]
-1:8: expected signed integer literal for offset decoration)");
-}
-
-TEST_F(ParserImplTest, Decoration_Offset_MissingInvalid) {
-  auto p = parser("offset(nan)");
-  auto deco = p->decoration();
-  EXPECT_FALSE(deco.matched);
-  EXPECT_TRUE(deco.errored);
-  EXPECT_EQ(deco.value, nullptr);
-  EXPECT_TRUE(p->has_error());
-  EXPECT_EQ(
-      p->error(),
-      R"(1:1: use of deprecated language feature: [[offset]] has been replaced with [[size]] and [[align]]
-1:8: expected signed integer literal for offset decoration)");
-}
-
 TEST_F(ParserImplTest, Decoration_Size) {
   auto p = parser("size(4)");
   auto deco = p->decoration();
diff --git a/src/reader/wgsl/parser_impl_struct_member_test.cc b/src/reader/wgsl/parser_impl_struct_member_test.cc
index cfa3555..2ba2260 100644
--- a/src/reader/wgsl/parser_impl_struct_member_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_member_test.cc
@@ -42,33 +42,6 @@
   EXPECT_EQ(m->type()->source().range, (Source::Range{{1u, 5u}, {1u, 8u}}));
 }
 
-TEST_F(ParserImplTest, StructMember_ParsesWithOffsetDecoration_DEPRECATED) {
-  auto p = parser("[[offset(2)]] a : i32;");
-
-  auto& builder = p->builder();
-
-  auto decos = p->decoration_list();
-  EXPECT_FALSE(decos.errored);
-  EXPECT_TRUE(decos.matched);
-  EXPECT_EQ(decos.value.size(), 1u);
-
-  auto m = p->expect_struct_member(decos.value);
-  ASSERT_FALSE(p->has_error());
-  ASSERT_FALSE(m.errored);
-  ASSERT_NE(m.value, nullptr);
-
-  EXPECT_EQ(m->symbol(), builder.Symbols().Get("a"));
-  EXPECT_TRUE(m->type()->Is<ast::I32>());
-  EXPECT_EQ(m->decorations().size(), 1u);
-  EXPECT_TRUE(m->decorations()[0]->Is<ast::StructMemberOffsetDecoration>());
-  EXPECT_EQ(
-      m->decorations()[0]->As<ast::StructMemberOffsetDecoration>()->offset(),
-      2u);
-
-  EXPECT_EQ(m->source().range, (Source::Range{{1u, 15u}, {1u, 16u}}));
-  EXPECT_EQ(m->type()->source().range, (Source::Range{{1u, 19u}, {1u, 22u}}));
-}
-
 TEST_F(ParserImplTest, StructMember_ParsesWithAlignDecoration) {
   auto p = parser("[[align(2)]] a : i32;");
 
diff --git a/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc b/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
index fce5b3c..c006882 100644
--- a/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
+++ b/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
@@ -12,7 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/access_decoration.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 #include "src/sem/depth_texture_type.h"
 #include "src/sem/multisampled_texture_type.h"
@@ -25,8 +24,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_Invalid) {
   auto p = parser("1234");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   EXPECT_EQ(t.value, nullptr);
   EXPECT_FALSE(t.matched);
   EXPECT_FALSE(t.errored);
@@ -35,8 +33,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_Sampler) {
   auto p = parser("sampler");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   ASSERT_FALSE(p->has_error()) << p->error();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
@@ -48,8 +45,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_SamplerComparison) {
   auto p = parser("sampler_comparison");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   ASSERT_FALSE(p->has_error()) << p->error();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
@@ -61,8 +57,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_DepthTexture) {
   auto p = parser("texture_depth_2d");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   ASSERT_FALSE(p->has_error()) << p->error();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
@@ -75,8 +70,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_SampledTexture_F32) {
   auto p = parser("texture_1d<f32>");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   ASSERT_FALSE(p->has_error()) << p->error();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
@@ -90,8 +84,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_SampledTexture_I32) {
   auto p = parser("texture_2d<i32>");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   ASSERT_FALSE(p->has_error()) << p->error();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
@@ -105,8 +98,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_SampledTexture_U32) {
   auto p = parser("texture_3d<u32>");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   ASSERT_FALSE(p->has_error()) << p->error();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
@@ -120,8 +112,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_SampledTexture_Invalid) {
   auto p = parser("texture_1d<abc>");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(t.value, nullptr);
   EXPECT_FALSE(t.matched);
@@ -131,8 +122,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_SampledTexture_MissingType) {
   auto p = parser("texture_1d<>");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(t.value, nullptr);
   EXPECT_FALSE(t.matched);
@@ -142,8 +132,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_SampledTexture_MissingLessThan) {
   auto p = parser("texture_1d");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(t.value, nullptr);
   EXPECT_FALSE(t.matched);
@@ -153,8 +142,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_SampledTexture_MissingGreaterThan) {
   auto p = parser("texture_1d<u32");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(t.value, nullptr);
   EXPECT_FALSE(t.matched);
@@ -164,8 +152,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_MultisampledTexture_I32) {
   auto p = parser("texture_multisampled_2d<i32>");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   ASSERT_FALSE(p->has_error()) << p->error();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
@@ -179,8 +166,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_MultisampledTexture_Invalid) {
   auto p = parser("texture_multisampled_2d<abc>");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(t.value, nullptr);
   EXPECT_FALSE(t.matched);
@@ -190,8 +176,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_MultisampledTexture_MissingType) {
   auto p = parser("texture_multisampled_2d<>");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(t.value, nullptr);
   EXPECT_FALSE(t.matched);
@@ -202,8 +187,7 @@
 TEST_F(ParserImplTest,
        TextureSamplerTypes_MultisampledTexture_MissingLessThan) {
   auto p = parser("texture_multisampled_2d");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   EXPECT_EQ(t.value, nullptr);
   EXPECT_FALSE(t.matched);
   EXPECT_TRUE(t.errored);
@@ -213,38 +197,16 @@
 TEST_F(ParserImplTest,
        TextureSamplerTypes_MultisampledTexture_MissingGreaterThan) {
   auto p = parser("texture_multisampled_2d<u32");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   EXPECT_EQ(t.value, nullptr);
   EXPECT_FALSE(t.matched);
   EXPECT_TRUE(t.errored);
   EXPECT_EQ(p->error(), "1:28: expected '>' for multisampled texture type");
 }
 
-// TODO(crbug.com/tint/846): Remove
-TEST_F(ParserImplTest,
-       TextureSamplerTypes_StorageTexture_Readonly1dR8Unorm_DEPRECATED) {
-  auto p = parser("texture_storage_1d<r8unorm>");
-  ast::DecorationList decos{create<ast::AccessDecoration>(ast::Access::kRead)};
-  auto t = p->texture_sampler_types(decos);
-  ASSERT_FALSE(p->has_error()) << p->error();
-  EXPECT_TRUE(t.matched);
-  EXPECT_FALSE(t.errored);
-  ASSERT_NE(t.value, nullptr);
-
-  ASSERT_TRUE(t->Is<ast::Texture>());
-  ASSERT_TRUE(t->Is<ast::StorageTexture>());
-  EXPECT_EQ(t->As<ast::StorageTexture>()->image_format(),
-            ast::ImageFormat::kR8Unorm);
-  EXPECT_EQ(t->As<ast::StorageTexture>()->access(), ast::Access::kRead);
-  EXPECT_EQ(t->As<ast::Texture>()->dim(), ast::TextureDimension::k1d);
-  EXPECT_EQ(t.value->source().range, (Source::Range{{1u, 1u}, {1u, 28u}}));
-}
-
 TEST_F(ParserImplTest, TextureSamplerTypes_StorageTexture_Readonly1dR8Unorm) {
   auto p = parser("texture_storage_1d<r8unorm, read>");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   ASSERT_FALSE(p->has_error()) << p->error();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
@@ -259,30 +221,9 @@
   EXPECT_EQ(t->source().range, (Source::Range{{1u, 1u}, {1u, 34u}}));
 }
 
-// TODO(crbug.com/tint/846): Remove
-TEST_F(ParserImplTest,
-       TextureSamplerTypes_StorageTexture_Writeonly2dR16Float_DEPRECATED) {
-  auto p = parser("texture_storage_2d<r16float>");
-  ast::DecorationList decos{create<ast::AccessDecoration>(ast::Access::kWrite)};
-  auto t = p->texture_sampler_types(decos);
-  ASSERT_FALSE(p->has_error()) << p->error();
-  EXPECT_TRUE(t.matched);
-  EXPECT_FALSE(t.errored);
-  ASSERT_NE(t.value, nullptr);
-
-  ASSERT_TRUE(t->Is<ast::Texture>());
-  ASSERT_TRUE(t->Is<ast::StorageTexture>());
-  EXPECT_EQ(t->As<ast::StorageTexture>()->image_format(),
-            ast::ImageFormat::kR16Float);
-  EXPECT_EQ(t->As<ast::StorageTexture>()->access(), ast::Access::kWrite);
-  EXPECT_EQ(t->As<ast::Texture>()->dim(), ast::TextureDimension::k2d);
-  EXPECT_EQ(t.value->source().range, (Source::Range{{1u, 1u}, {1u, 29u}}));
-}
-
 TEST_F(ParserImplTest, TextureSamplerTypes_StorageTexture_Writeonly2dR16Float) {
   auto p = parser("texture_storage_2d<r16float, write>");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   ASSERT_FALSE(p->has_error()) << p->error();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
@@ -299,8 +240,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_StorageTexture_InvalidType) {
   auto p = parser("texture_storage_1d<abc, read>");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   EXPECT_EQ(t.value, nullptr);
   EXPECT_FALSE(t.matched);
   EXPECT_TRUE(t.errored);
@@ -309,8 +249,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_StorageTexture_InvalidAccess) {
   auto p = parser("texture_storage_1d<r16float, abc>");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   EXPECT_EQ(t.value, nullptr);
   EXPECT_FALSE(t.matched);
   EXPECT_TRUE(t.errored);
@@ -319,8 +258,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_StorageTexture_MissingType) {
   auto p = parser("texture_storage_1d<>");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   EXPECT_EQ(t.value, nullptr);
   EXPECT_FALSE(t.matched);
   EXPECT_TRUE(t.errored);
@@ -329,8 +267,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_StorageTexture_MissingLessThan) {
   auto p = parser("texture_storage_1d");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   EXPECT_EQ(t.value, nullptr);
   EXPECT_FALSE(t.matched);
   EXPECT_TRUE(t.errored);
@@ -339,8 +276,7 @@
 
 TEST_F(ParserImplTest, TextureSamplerTypes_StorageTexture_MissingGreaterThan) {
   auto p = parser("texture_storage_1d<r8unorm, read");
-  ast::DecorationList decos;
-  auto t = p->texture_sampler_types(decos);
+  auto t = p->texture_sampler_types();
   EXPECT_EQ(t.value, nullptr);
   EXPECT_FALSE(t.matched);
   EXPECT_TRUE(t.errored);
diff --git a/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc b/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc
index af959b4..a063a61 100644
--- a/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc
@@ -84,168 +84,6 @@
   ASSERT_EQ(p->error(), "1:10: unknown type 'invalid'");
 }
 
-// TODO(crbug.com/tint/846): Remove
-TEST_F(ParserImplTest,
-       VariableIdentDecl_ParsesWithTextureAccessDeco_Read_DEPRECATED) {
-  auto p = parser("my_var : [[access(read)]] texture_storage_1d<r32float>");
-
-  auto decl = p->expect_variable_ident_decl("test");
-  ASSERT_FALSE(p->has_error()) << p->error();
-  ASSERT_FALSE(decl.errored);
-  ASSERT_EQ(decl->name, "my_var");
-  ASSERT_NE(decl->type, nullptr);
-  ASSERT_TRUE(decl->type->Is<ast::StorageTexture>());
-  EXPECT_TRUE(decl->type->As<ast::StorageTexture>()->is_read_only());
-
-  EXPECT_EQ(p->error(),
-            "1:54: use of deprecated language feature: access control is "
-            "expected as last parameter of storage textures");
-}
-
-// TODO(crbug.com/tint/846): Remove
-TEST_F(ParserImplTest,
-       VariableIdentDecl_ParsesWithTextureAccessDeco_Write_DEPRECATED) {
-  auto p = parser("my_var : [[access(write)]] texture_storage_1d<r32float>");
-
-  auto decl = p->expect_variable_ident_decl("test");
-  ASSERT_FALSE(p->has_error()) << p->error();
-  ASSERT_FALSE(decl.errored);
-  ASSERT_EQ(decl->name, "my_var");
-  ASSERT_NE(decl->type, nullptr);
-  ASSERT_TRUE(decl->type->Is<ast::StorageTexture>());
-  EXPECT_TRUE(decl->type->As<ast::StorageTexture>()->is_write_only());
-
-  EXPECT_EQ(p->error(),
-            "1:55: use of deprecated language feature: access control is "
-            "expected as last parameter of storage textures");
-}
-
-// TODO(crbug.com/tint/846): Remove
-TEST_F(ParserImplTest, VariableIdentDecl_ParsesWithAccessDeco_Read_DEPRECATED) {
-  auto p = parser("var my_var : [[access(read)]] S;");
-
-  auto* mem = Member("a", ty.i32(), ast::DecorationList{});
-  ast::StructMemberList members;
-  members.push_back(mem);
-
-  auto* block_deco = create<ast::StructBlockDecoration>();
-  ast::DecorationList decos;
-  decos.push_back(block_deco);
-
-  auto* s = Structure(Sym("S"), members, decos);
-
-  p->register_type("S", s);
-
-  auto res = p->expect_global_decl();
-  ASSERT_FALSE(res.errored) << p->error();
-  ASSERT_NE(p->builder().AST().GlobalVariables().size(), 0u);
-  auto* decl = p->builder().AST().GlobalVariables()[0];
-  ASSERT_NE(decl, nullptr);
-  ASSERT_EQ(decl->symbol(), p->builder().Symbols().Get("my_var"));
-  ASSERT_NE(decl->type(), nullptr);
-  EXPECT_TRUE(decl->type()->Is<ast::TypeName>());
-  EXPECT_EQ(decl->declared_access(), ast::Access::kRead);
-
-  EXPECT_EQ(p->error(),
-            "1:1: use of deprecated language feature: declare access with "
-            "var<none, read> instead of using [[access]] decoration");
-}
-
-// TODO(crbug.com/tint/846): Remove
-TEST_F(ParserImplTest,
-       VariableIdentDecl_ParsesWithAccessDeco_ReadWrite_DEPRECATED) {
-  auto p = parser("var my_var : [[access(read_write)]] S;");
-
-  auto* mem = Member("a", ty.i32(), ast::DecorationList{});
-  ast::StructMemberList members;
-  members.push_back(mem);
-
-  auto* block_deco = create<ast::StructBlockDecoration>();
-  ast::DecorationList decos;
-  decos.push_back(block_deco);
-
-  auto* s = Structure(Sym("S"), members, decos);
-
-  p->register_type("S", s);
-
-  auto res = p->expect_global_decl();
-  ASSERT_FALSE(res.errored) << p->error();
-  ASSERT_NE(p->builder().AST().GlobalVariables().size(), 0u);
-  auto* decl = p->builder().AST().GlobalVariables()[0];
-  ASSERT_NE(decl, nullptr);
-  ASSERT_EQ(decl->symbol(), p->builder().Symbols().Get("my_var"));
-  ASSERT_NE(decl->type(), nullptr);
-  EXPECT_TRUE(decl->type()->Is<ast::TypeName>());
-  EXPECT_EQ(decl->declared_access(), ast::Access::kReadWrite);
-
-  EXPECT_EQ(p->error(),
-            "1:1: use of deprecated language feature: declare access with "
-            "var<none, read_write> instead of using [[access]] decoration");
-}
-
-// TODO(crbug.com/tint/846): Remove
-TEST_F(ParserImplTest, VariableIdentDecl_MultipleAccessDecoFail_DEPRECATED) {
-  auto p = parser("my_var : [[access(read), access(read_write)]] S");
-
-  auto* mem = Member("a", ty.i32(), ast::DecorationList{});
-  ast::StructMemberList members;
-  members.push_back(mem);
-
-  auto* block_deco = create<ast::StructBlockDecoration>();
-  ast::DecorationList decos;
-  decos.push_back(block_deco);
-
-  auto* s = Structure(Sym("S"), members, decos);
-
-  p->register_type("S", s);
-
-  auto decl = p->expect_variable_ident_decl("test");
-  ASSERT_TRUE(p->has_error());
-  ASSERT_TRUE(decl.errored);
-  ASSERT_EQ(p->error(), "1:1: multiple access decorations not allowed");
-}
-
-// TODO(crbug.com/tint/846): Remove
-TEST_F(ParserImplTest,
-       VariableIdentDecl_MultipleAccessDeco_MultiBlock_Fail_DEPRECATED) {
-  auto p = parser("my_var : [[access(read)]][[access(read_write)]] S");
-
-  auto* mem = Member("a", ty.i32(), ast::DecorationList{});
-  ast::StructMemberList members;
-  members.push_back(mem);
-
-  auto* block_deco = create<ast::StructBlockDecoration>();
-  ast::DecorationList decos;
-  decos.push_back(block_deco);
-
-  auto* s = Structure(Sym("S"), members, decos);
-
-  p->register_type("S", s);
-
-  auto decl = p->expect_variable_ident_decl("test");
-  ASSERT_TRUE(p->has_error());
-  ASSERT_TRUE(decl.errored);
-  ASSERT_EQ(p->error(), "1:1: multiple access decorations not allowed");
-}
-
-// TODO(crbug.com/tint/846): Remove
-TEST_F(ParserImplTest, VariableIdentDecl_AccessDecoBadValue_DEPRECATED) {
-  auto p = parser("my_var : [[access(unknown)]] S");
-  auto decl = p->expect_variable_ident_decl("test");
-  ASSERT_TRUE(p->has_error());
-  ASSERT_TRUE(decl.errored);
-  ASSERT_EQ(p->error(), "1:19: invalid value for access control");
-}
-
-// TODO(crbug.com/tint/846): Remove
-TEST_F(ParserImplTest, VariableIdentDecl_AccessDecoIllegalValue_DEPRECATED) {
-  auto p = parser("my_var : [[access(1)]] S");
-  auto decl = p->expect_variable_ident_decl("test");
-  ASSERT_TRUE(p->has_error());
-  ASSERT_TRUE(decl.errored);
-  ASSERT_EQ(p->error(), "1:19: expected identifier for access control");
-}
-
 TEST_F(ParserImplTest, VariableIdentDecl_NonAccessDecoFail) {
   auto p = parser("my_var : [[stride(1)]] S");
 
diff --git a/src/resolver/decoration_validation_test.cc b/src/resolver/decoration_validation_test.cc
index 664bb92..974d1ed 100644
--- a/src/resolver/decoration_validation_test.cc
+++ b/src/resolver/decoration_validation_test.cc
@@ -12,7 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/access_decoration.h"
 #include "src/ast/disable_validation_decoration.h"
 #include "src/ast/override_decoration.h"
 #include "src/ast/return_statement.h"
diff --git a/src/resolver/resolver.cc b/src/resolver/resolver.cc
index d337fe1..bec3f4b 100644
--- a/src/resolver/resolver.cc
+++ b/src/resolver/resolver.cc
@@ -17,7 +17,6 @@
 #include <algorithm>
 #include <utility>
 
-#include "src/ast/access_decoration.h"
 #include "src/ast/alias.h"
 #include "src/ast/array.h"
 #include "src/ast/assignment_statement.h"
@@ -243,16 +242,6 @@
 
   for (auto* node : builder_->ASTNodes().Objects()) {
     if (marked_.count(node) == 0) {
-      if (node->IsAnyOf<ast::AccessDecoration, ast::StrideDecoration>()) {
-        // TODO(crbug.com/tint/724) - Remove once tint:724 is complete.
-        // ast::AccessDecorations are generated by the WGSL parser, used to
-        // build sem::AccessControls and then leaked.
-        // ast::StrideDecoration are used to build a sem::Arrays, but
-        // multiple arrays of the same stride, size and element type are
-        // currently de-duplicated by the type manager, and we leak these
-        // decorations.
-        continue;
-      }
       TINT_ICE(diagnostics_) << "AST node '" << node->TypeInfo().name
                              << "' was not reached by the resolver\n"
                              << "At: " << node->source() << "\n"
diff --git a/test/BUILD.gn b/test/BUILD.gn
index 477a0a4..e2cce2f 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -145,7 +145,6 @@
 
 tint_unittests_source_set("tint_unittests_core_src") {
   sources = [
-    "../src/ast/access_decoration_test.cc",
     "../src/ast/alias_test.cc",
     "../src/ast/array_accessor_expression_test.cc",
     "../src/ast/array_test.cc",
diff --git a/test/bug/tint/294.wgsl b/test/bug/tint/294.wgsl
index f60b564..8a0f450 100644
--- a/test/bug/tint/294.wgsl
+++ b/test/bug/tint/294.wgsl
@@ -5,4 +5,4 @@
 [[block]] struct Lights {
   light : [[stride(32)]] array<Light>;
 };
-[[set(0), binding(1)]] var<storage> lights : [[access(read)]] Lights;
+[[set(0), binding(1)]] var<storage, read> lights : Lights;
diff --git a/test/bug/tint/294.wgsl.expected.hlsl b/test/bug/tint/294.wgsl.expected.hlsl
index 52d06e8..f4843df 100644
--- a/test/bug/tint/294.wgsl.expected.hlsl
+++ b/test/bug/tint/294.wgsl.expected.hlsl
@@ -1,7 +1,3 @@
-bug/tint/294.wgsl:8:24 warning: use of deprecated language feature: declare access with var<storage, read> instead of using [[access]] decoration
-[[set(0), binding(1)]] var<storage> lights : [[access(read)]] Lights;
-                       ^^^
-
 [numthreads(1, 1, 1)]
 void unused_entry_point() {
   return;
diff --git a/test/bug/tint/294.wgsl.expected.msl b/test/bug/tint/294.wgsl.expected.msl
index 047cfdb..224cead 100644
--- a/test/bug/tint/294.wgsl.expected.msl
+++ b/test/bug/tint/294.wgsl.expected.msl
@@ -1,7 +1,3 @@
-bug/tint/294.wgsl:8:24 warning: use of deprecated language feature: declare access with var<storage, read> instead of using [[access]] decoration
-[[set(0), binding(1)]] var<storage> lights : [[access(read)]] Lights;
-                       ^^^
-
 #include <metal_stdlib>
 
 using namespace metal;
diff --git a/test/bug/tint/294.wgsl.expected.spvasm b/test/bug/tint/294.wgsl.expected.spvasm
index 28f5e64..6450555 100644
--- a/test/bug/tint/294.wgsl.expected.spvasm
+++ b/test/bug/tint/294.wgsl.expected.spvasm
@@ -1,7 +1,3 @@
-bug/tint/294.wgsl:8:24 warning: use of deprecated language feature: declare access with var<storage, read> instead of using [[access]] decoration
-[[set(0), binding(1)]] var<storage> lights : [[access(read)]] Lights;
-                       ^^^
-
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
diff --git a/test/bug/tint/294.wgsl.expected.wgsl b/test/bug/tint/294.wgsl.expected.wgsl
index d2a8668..ea5db21 100644
--- a/test/bug/tint/294.wgsl.expected.wgsl
+++ b/test/bug/tint/294.wgsl.expected.wgsl
@@ -1,7 +1,3 @@
-bug/tint/294.wgsl:8:24 warning: use of deprecated language feature: declare access with var<storage, read> instead of using [[access]] decoration
-[[set(0), binding(1)]] var<storage> lights : [[access(read)]] Lights;
-                       ^^^
-
 struct Light {
   position : vec3<f32>;
   colour : vec3<f32>;
diff --git a/test/bug/tint/453.wgsl b/test/bug/tint/453.wgsl
index c4be66b..0391a80 100644
--- a/test/bug/tint/453.wgsl
+++ b/test/bug/tint/453.wgsl
@@ -1,5 +1,5 @@
-[[group(0), binding(0)]] var Src : [[access(read)]] texture_storage_2d<r32uint>;
-[[group(0), binding(1)]] var Dst : [[access(write)]] texture_storage_2d<r32uint>;
+[[group(0), binding(0)]] var Src : texture_storage_2d<r32uint, read>;
+[[group(0), binding(1)]] var Dst : texture_storage_2d<r32uint, write>;
 
 [[stage(compute)]]
 fn main() {
diff --git a/test/bug/tint/453.wgsl.expected.hlsl b/test/bug/tint/453.wgsl.expected.hlsl
index 4e05305..fde2021 100644
--- a/test/bug/tint/453.wgsl.expected.hlsl
+++ b/test/bug/tint/453.wgsl.expected.hlsl
@@ -1,11 +1,3 @@
-bug/tint/453.wgsl:1:79 warning: use of deprecated language feature: access control is expected as last parameter of storage textures
-[[group(0), binding(0)]] var Src : [[access(read)]] texture_storage_2d<r32uint>;
-                                                                              ^
-
-bug/tint/453.wgsl:2:80 warning: use of deprecated language feature: access control is expected as last parameter of storage textures
-[[group(0), binding(1)]] var Dst : [[access(write)]] texture_storage_2d<r32uint>;
-                                                                               ^
-
 Texture2D<uint4> Src : register(t0, space0);
 RWTexture2D<uint4> Dst : register(u1, space0);
 
diff --git a/test/bug/tint/453.wgsl.expected.spvasm b/test/bug/tint/453.wgsl.expected.spvasm
index e22df2b..06bba82 100644
--- a/test/bug/tint/453.wgsl.expected.spvasm
+++ b/test/bug/tint/453.wgsl.expected.spvasm
@@ -1,11 +1,3 @@
-bug/tint/453.wgsl:1:79 warning: use of deprecated language feature: access control is expected as last parameter of storage textures
-[[group(0), binding(0)]] var Src : [[access(read)]] texture_storage_2d<r32uint>;
-                                                                              ^
-
-bug/tint/453.wgsl:2:80 warning: use of deprecated language feature: access control is expected as last parameter of storage textures
-[[group(0), binding(1)]] var Dst : [[access(write)]] texture_storage_2d<r32uint>;
-                                                                               ^
-
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
diff --git a/test/bug/tint/453.wgsl.expected.wgsl b/test/bug/tint/453.wgsl.expected.wgsl
index 5a5db6c..f1c4aa3 100644
--- a/test/bug/tint/453.wgsl.expected.wgsl
+++ b/test/bug/tint/453.wgsl.expected.wgsl
@@ -1,11 +1,3 @@
-bug/tint/453.wgsl:1:79 warning: use of deprecated language feature: access control is expected as last parameter of storage textures
-[[group(0), binding(0)]] var Src : [[access(read)]] texture_storage_2d<r32uint>;
-                                                                              ^
-
-bug/tint/453.wgsl:2:80 warning: use of deprecated language feature: access control is expected as last parameter of storage textures
-[[group(0), binding(1)]] var Dst : [[access(write)]] texture_storage_2d<r32uint>;
-                                                                               ^
-
 [[group(0), binding(0)]] var Src : texture_storage_2d<r32uint, read>;
 
 [[group(0), binding(1)]] var Dst : texture_storage_2d<r32uint, write>;
diff --git a/test/bug/tint/757.wgsl b/test/bug/tint/757.wgsl
index 68239aa..1c458ca 100644
--- a/test/bug/tint/757.wgsl
+++ b/test/bug/tint/757.wgsl
@@ -1,13 +1,13 @@
 
 [[block]] struct Constants {
-  [[offset(0)]] level : i32;
+  level : i32;
 };
 
 [[group(0), binding(0)]] var<uniform> constants : Constants;
 [[group(0), binding(1)]] var myTexture : texture_2d_array<f32>;
 
 [[block]] struct Result {
-  [[offset(0)]] values : [[stride(4)]] array<f32>;
+  values : [[stride(4)]] array<f32>;
 };
 [[group(0), binding(3)]] var<storage, read_write> result : Result;
 
diff --git a/test/bug/tint/757.wgsl.expected.hlsl b/test/bug/tint/757.wgsl.expected.hlsl
index 9cbf74f..63d2e80 100644
--- a/test/bug/tint/757.wgsl.expected.hlsl
+++ b/test/bug/tint/757.wgsl.expected.hlsl
@@ -1,11 +1,3 @@
-bug/tint/757.wgsl:3:5 warning: use of deprecated language feature: [[offset]] has been replaced with [[size]] and [[align]]
-  [[offset(0)]] level : i32;
-    ^^^^^^
-
-bug/tint/757.wgsl:10:5 warning: use of deprecated language feature: [[offset]] has been replaced with [[size]] and [[align]]
-  [[offset(0)]] values : [[stride(4)]] array<f32>;
-    ^^^^^^
-
 struct Constants {
   int level;
 };
diff --git a/test/bug/tint/757.wgsl.expected.wgsl b/test/bug/tint/757.wgsl.expected.wgsl
index 3fcd2a0..66512bf 100644
--- a/test/bug/tint/757.wgsl.expected.wgsl
+++ b/test/bug/tint/757.wgsl.expected.wgsl
@@ -1,11 +1,3 @@
-bug/tint/757.wgsl:3:5 warning: use of deprecated language feature: [[offset]] has been replaced with [[size]] and [[align]]
-  [[offset(0)]] level : i32;
-    ^^^^^^
-
-bug/tint/757.wgsl:10:5 warning: use of deprecated language feature: [[offset]] has been replaced with [[size]] and [[align]]
-  [[offset(0)]] values : [[stride(4)]] array<f32>;
-    ^^^^^^
-
 [[block]]
 struct Constants {
   level : i32;
diff --git a/test/bug/tint/827.wgsl b/test/bug/tint/827.wgsl
index f755d8c..b884ad9 100644
--- a/test/bug/tint/827.wgsl
+++ b/test/bug/tint/827.wgsl
@@ -5,7 +5,7 @@
 let width : u32 = 128u;
 
 [[group(0), binding(0)]] var tex : texture_depth_2d;
-[[group(0), binding(1)]] var<storage> result : [[access(read_write)]] Result;
+[[group(0), binding(1)]] var<storage, read_write> result : Result;
 
 [[stage(compute)]] fn main(
     [[builtin(global_invocation_id)]] GlobalInvocationId : vec3<u32>
diff --git a/test/bug/tint/827.wgsl.expected.hlsl b/test/bug/tint/827.wgsl.expected.hlsl
index 506cc6d..bb53157 100644
--- a/test/bug/tint/827.wgsl.expected.hlsl
+++ b/test/bug/tint/827.wgsl.expected.hlsl
@@ -1,7 +1,3 @@
-bug/tint/827.wgsl:8:26 warning: use of deprecated language feature: declare access with var<storage, read_write> instead of using [[access]] decoration
-[[group(0), binding(1)]] var<storage> result : [[access(read_write)]] Result;
-                         ^^^
-
 static const uint width = 128u;
 Texture2D tex : register(t0, space0);
 RWByteAddressBuffer result : register(u1, space0);
diff --git a/test/bug/tint/827.wgsl.expected.spvasm b/test/bug/tint/827.wgsl.expected.spvasm
index 315bbc7..4bc890f 100644
--- a/test/bug/tint/827.wgsl.expected.spvasm
+++ b/test/bug/tint/827.wgsl.expected.spvasm
@@ -1,7 +1,3 @@
-bug/tint/827.wgsl:8:26 warning: use of deprecated language feature: declare access with var<storage, read_write> instead of using [[access]] decoration
-[[group(0), binding(1)]] var<storage> result : [[access(read_write)]] Result;
-                         ^^^
-
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
diff --git a/test/bug/tint/827.wgsl.expected.wgsl b/test/bug/tint/827.wgsl.expected.wgsl
index 89f72ca..f3c0e9f 100644
--- a/test/bug/tint/827.wgsl.expected.wgsl
+++ b/test/bug/tint/827.wgsl.expected.wgsl
@@ -1,7 +1,3 @@
-bug/tint/827.wgsl:8:26 warning: use of deprecated language feature: declare access with var<storage, read_write> instead of using [[access]] decoration
-[[group(0), binding(1)]] var<storage> result : [[access(read_write)]] Result;
-                         ^^^
-
 [[block]]
 struct Result {
   values : array<f32>;
diff --git a/test/deprecated/access_deco/storage_buffer.wgsl b/test/deprecated/access_deco/storage_buffer.wgsl
deleted file mode 100644
index 3948107..0000000
--- a/test/deprecated/access_deco/storage_buffer.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-
-[[block]]
-struct SB {
-  a : f32;
-};
-
-[[group(0), binding(0)]] var<storage> sb : [[access(read_write)]] SB;
-
-[[stage(compute)]]
-fn main() {
-  var x : f32 = sb.a;
-}
diff --git a/test/deprecated/access_deco/storage_buffer.wgsl.expected.hlsl b/test/deprecated/access_deco/storage_buffer.wgsl.expected.hlsl
deleted file mode 100644
index d686f81..0000000
--- a/test/deprecated/access_deco/storage_buffer.wgsl.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-deprecated/access_deco/storage_buffer.wgsl:7:26 warning: use of deprecated language feature: declare access with var<storage, read_write> instead of using [[access]] decoration
-[[group(0), binding(0)]] var<storage> sb : [[access(read_write)]] SB;
-                         ^^^
-
-RWByteAddressBuffer sb : register(u0, space0);
-
-[numthreads(1, 1, 1)]
-void main() {
-  float x = asfloat(sb.Load(0u));
-  return;
-}
diff --git a/test/deprecated/access_deco/storage_buffer.wgsl.expected.msl b/test/deprecated/access_deco/storage_buffer.wgsl.expected.msl
deleted file mode 100644
index 666ca66..0000000
--- a/test/deprecated/access_deco/storage_buffer.wgsl.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-deprecated/access_deco/storage_buffer.wgsl:7:26 warning: use of deprecated language feature: declare access with var<storage, read_write> instead of using [[access]] decoration
-[[group(0), binding(0)]] var<storage> sb : [[access(read_write)]] SB;
-                         ^^^
-
-#include <metal_stdlib>
-
-using namespace metal;
-struct SB {
-  /* 0x0000 */ float a;
-};
-
-kernel void tint_symbol(device SB& sb [[buffer(0)]]) {
-  float x = sb.a;
-  return;
-}
-
diff --git a/test/deprecated/access_deco/storage_buffer.wgsl.expected.spvasm b/test/deprecated/access_deco/storage_buffer.wgsl.expected.spvasm
deleted file mode 100644
index 0736052..0000000
--- a/test/deprecated/access_deco/storage_buffer.wgsl.expected.spvasm
+++ /dev/null
@@ -1,41 +0,0 @@
-deprecated/access_deco/storage_buffer.wgsl:7:26 warning: use of deprecated language feature: declare access with var<storage, read_write> instead of using [[access]] decoration
-[[group(0), binding(0)]] var<storage> sb : [[access(read_write)]] SB;
-                         ^^^
-
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %SB "SB"
-               OpMemberName %SB 0 "a"
-               OpName %sb "sb"
-               OpName %main "main"
-               OpName %x "x"
-               OpDecorate %SB Block
-               OpMemberDecorate %SB 0 Offset 0
-               OpDecorate %sb DescriptorSet 0
-               OpDecorate %sb Binding 0
-      %float = OpTypeFloat 32
-         %SB = OpTypeStruct %float
-%_ptr_StorageBuffer_SB = OpTypePointer StorageBuffer %SB
-         %sb = OpVariable %_ptr_StorageBuffer_SB StorageBuffer
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpConstantNull %float
-       %main = OpFunction %void None %5
-          %8 = OpLabel
-          %x = OpVariable %_ptr_Function_float Function %16
-         %12 = OpAccessChain %_ptr_StorageBuffer_float %sb %uint_0
-         %13 = OpLoad %float %12
-               OpStore %x %13
-               OpReturn
-               OpFunctionEnd
diff --git a/test/deprecated/access_deco/storage_buffer.wgsl.expected.wgsl b/test/deprecated/access_deco/storage_buffer.wgsl.expected.wgsl
deleted file mode 100644
index 4e23308..0000000
--- a/test/deprecated/access_deco/storage_buffer.wgsl.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-deprecated/access_deco/storage_buffer.wgsl:7:26 warning: use of deprecated language feature: declare access with var<storage, read_write> instead of using [[access]] decoration
-[[group(0), binding(0)]] var<storage> sb : [[access(read_write)]] SB;
-                         ^^^
-
-[[block]]
-struct SB {
-  a : f32;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> sb : SB;
-
-[[stage(compute)]]
-fn main() {
-  var x : f32 = sb.a;
-}
diff --git a/test/deprecated/access_deco/storage_texture.wgsl b/test/deprecated/access_deco/storage_texture.wgsl
deleted file mode 100644
index 17cd7fd..0000000
--- a/test/deprecated/access_deco/storage_texture.wgsl
+++ /dev/null
@@ -1,6 +0,0 @@
-[[group(0), binding(0)]] var tex : [[access(write)]] texture_storage_2d<rgba32float>;
-
-[[stage(compute)]]
-fn main() {
-  var x : vec2<i32> = textureDimensions(tex);
-}
diff --git a/test/deprecated/access_deco/storage_texture.wgsl.expected.hlsl b/test/deprecated/access_deco/storage_texture.wgsl.expected.hlsl
deleted file mode 100644
index 24bb410..0000000
--- a/test/deprecated/access_deco/storage_texture.wgsl.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-deprecated/access_deco/storage_texture.wgsl:1:84 warning: use of deprecated language feature: access control is expected as last parameter of storage textures
-[[group(0), binding(0)]] var tex : [[access(write)]] texture_storage_2d<rgba32float>;
-                                                                                   ^
-
-RWTexture2D<float4> tex : register(u0, space0);
-
-[numthreads(1, 1, 1)]
-void main() {
-  int2 tint_tmp;
-  tex.GetDimensions(tint_tmp.x, tint_tmp.y);
-  int2 x = tint_tmp;
-  return;
-}
diff --git a/test/deprecated/access_deco/storage_texture.wgsl.expected.msl b/test/deprecated/access_deco/storage_texture.wgsl.expected.msl
deleted file mode 100644
index acf4fbb..0000000
--- a/test/deprecated/access_deco/storage_texture.wgsl.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-deprecated/access_deco/storage_texture.wgsl:1:84 warning: use of deprecated language feature: access control is expected as last parameter of storage textures
-[[group(0), binding(0)]] var tex : [[access(write)]] texture_storage_2d<rgba32float>;
-                                                                                   ^
-
-#include <metal_stdlib>
-
-using namespace metal;
-kernel void tint_symbol(texture2d<float, access::write> tint_symbol_1 [[texture(0)]]) {
-  int2 x = int2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
-  return;
-}
-
diff --git a/test/deprecated/access_deco/storage_texture.wgsl.expected.spvasm b/test/deprecated/access_deco/storage_texture.wgsl.expected.spvasm
deleted file mode 100644
index 03c770e..0000000
--- a/test/deprecated/access_deco/storage_texture.wgsl.expected.spvasm
+++ /dev/null
@@ -1,38 +0,0 @@
-deprecated/access_deco/storage_texture.wgsl:1:84 warning: use of deprecated language feature: access control is expected as last parameter of storage textures
-[[group(0), binding(0)]] var tex : [[access(write)]] texture_storage_2d<rgba32float>;
-                                                                                   ^
-
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %tex "tex"
-               OpName %main "main"
-               OpName %x "x"
-               OpDecorate %tex NonReadable
-               OpDecorate %tex DescriptorSet 0
-               OpDecorate %tex Binding 0
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-        %tex = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %15 = OpConstantNull %v2int
-       %main = OpFunction %void None %5
-          %8 = OpLabel
-          %x = OpVariable %_ptr_Function_v2int Function %15
-         %12 = OpLoad %3 %tex
-          %9 = OpImageQuerySize %v2int %12
-               OpStore %x %9
-               OpReturn
-               OpFunctionEnd
diff --git a/test/deprecated/access_deco/storage_texture.wgsl.expected.wgsl b/test/deprecated/access_deco/storage_texture.wgsl.expected.wgsl
deleted file mode 100644
index b7a6aec..0000000
--- a/test/deprecated/access_deco/storage_texture.wgsl.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-deprecated/access_deco/storage_texture.wgsl:1:84 warning: use of deprecated language feature: access control is expected as last parameter of storage textures
-[[group(0), binding(0)]] var tex : [[access(write)]] texture_storage_2d<rgba32float>;
-                                                                                   ^
-
-[[group(0), binding(0)]] var tex : texture_storage_2d<rgba32float, write>;
-
-[[stage(compute)]]
-fn main() {
-  var x : vec2<i32> = textureDimensions(tex);
-}
