Rename builtin constant_id to override

There are no downstream usages, so we can skip deprecation. Allowing
the ID to be omitted will be done in a separate patch.

Fixed: tint:754
Change-Id: I3bd6de4d0f426fc3c66708bfd5b411a4051b375b
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/49581
Commit-Queue: James Price <jrprice@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/BUILD.gn b/src/BUILD.gn
index 0cdaac4..8c321d6 100644
--- a/src/BUILD.gn
+++ b/src/BUILD.gn
@@ -292,8 +292,6 @@
     "ast/call_statement.h",
     "ast/case_statement.cc",
     "ast/case_statement.h",
-    "ast/constant_id_decoration.cc",
-    "ast/constant_id_decoration.h",
     "ast/constructor_expression.cc",
     "ast/constructor_expression.h",
     "ast/continue_statement.cc",
@@ -346,6 +344,8 @@
     "ast/multisampled_texture.h",
     "ast/node.cc",
     "ast/node.h",
+    "ast/override_decoration.cc",
+    "ast/override_decoration.h",
     "ast/pipeline_stage.cc",
     "ast/pipeline_stage.h",
     "ast/pointer.cc",
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index dbb4681..11b363b 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -74,8 +74,6 @@
   ast/call_statement.h
   ast/case_statement.cc
   ast/case_statement.h
-  ast/constant_id_decoration.cc
-  ast/constant_id_decoration.h
   ast/constructor_expression.cc
   ast/constructor_expression.h
   ast/continue_statement.cc
@@ -128,6 +126,8 @@
   ast/multisampled_texture.h
   ast/node.cc
   ast/node.h
+  ast/override_decoration.cc
+  ast/override_decoration.h
   ast/pipeline_stage.cc
   ast/pipeline_stage.h
   ast/pointer.cc
@@ -479,7 +479,6 @@
     ast/call_expression_test.cc
     ast/call_statement_test.cc
     ast/case_statement_test.cc
-    ast/constant_id_decoration_test.cc
     ast/continue_statement_test.cc
     ast/depth_texture_test.cc
     ast/discard_statement_test.cc
@@ -503,6 +502,7 @@
     ast/module_clone_test.cc
     ast/module_test.cc
     ast/multisampled_texture_test.cc
+    ast/override_decoration_test.cc
     ast/pointer_test.cc
     ast/return_statement_test.cc
     ast/sampled_texture_test.cc
diff --git a/src/ast/binding_decoration_test.cc b/src/ast/binding_decoration_test.cc
index 8f32660..4b4b29f 100644
--- a/src/ast/binding_decoration_test.cc
+++ b/src/ast/binding_decoration_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/constant_id_decoration.h"
+#include "src/ast/override_decoration.h"
 #include "src/ast/test_helper.h"
 
 namespace tint {
@@ -30,7 +30,7 @@
   Decoration* d = create<BindingDecoration>(2);
   EXPECT_TRUE(d->Is<BindingDecoration>());
   EXPECT_FALSE(d->Is<BuiltinDecoration>());
-  EXPECT_FALSE(d->Is<ConstantIdDecoration>());
+  EXPECT_FALSE(d->Is<OverrideDecoration>());
   EXPECT_FALSE(d->Is<LocationDecoration>());
   EXPECT_FALSE(d->Is<GroupDecoration>());
 }
diff --git a/src/ast/builtin_decoration_test.cc b/src/ast/builtin_decoration_test.cc
index 90f4670..e11b231 100644
--- a/src/ast/builtin_decoration_test.cc
+++ b/src/ast/builtin_decoration_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/constant_id_decoration.h"
+#include "src/ast/override_decoration.h"
 #include "src/ast/test_helper.h"
 
 namespace tint {
@@ -30,7 +30,7 @@
   Decoration* d = create<BuiltinDecoration>(Builtin::kFragDepth);
   EXPECT_FALSE(d->Is<BindingDecoration>());
   EXPECT_TRUE(d->Is<BuiltinDecoration>());
-  EXPECT_FALSE(d->Is<ConstantIdDecoration>());
+  EXPECT_FALSE(d->Is<OverrideDecoration>());
   EXPECT_FALSE(d->Is<LocationDecoration>());
   EXPECT_FALSE(d->Is<GroupDecoration>());
 }
diff --git a/src/ast/constant_id_decoration.cc b/src/ast/constant_id_decoration.cc
deleted file mode 100644
index 64f145e..0000000
--- a/src/ast/constant_id_decoration.cc
+++ /dev/null
@@ -1,45 +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/constant_id_decoration.h"
-
-#include "src/program_builder.h"
-
-TINT_INSTANTIATE_TYPEINFO(tint::ast::ConstantIdDecoration);
-
-namespace tint {
-namespace ast {
-
-ConstantIdDecoration::ConstantIdDecoration(ProgramID program_id,
-                                           const Source& source,
-                                           uint32_t val)
-    : Base(program_id, source), value_(val) {}
-
-ConstantIdDecoration::~ConstantIdDecoration() = default;
-
-void ConstantIdDecoration::to_str(const sem::Info&,
-                                  std::ostream& out,
-                                  size_t indent) const {
-  make_indent(out, indent);
-  out << "ConstantIdDecoration{" << value_ << "}" << std::endl;
-}
-
-ConstantIdDecoration* ConstantIdDecoration::Clone(CloneContext* ctx) const {
-  // Clone arguments outside of create() call to have deterministic ordering
-  auto src = ctx->Clone(source());
-  return ctx->dst->create<ConstantIdDecoration>(src, value_);
-}
-
-}  // namespace ast
-}  // namespace tint
diff --git a/src/ast/group_decoration_test.cc b/src/ast/group_decoration_test.cc
index 9dfbdd4..79999c1 100644
--- a/src/ast/group_decoration_test.cc
+++ b/src/ast/group_decoration_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/constant_id_decoration.h"
+#include "src/ast/override_decoration.h"
 #include "src/ast/test_helper.h"
 
 namespace tint {
@@ -30,7 +30,7 @@
   Decoration* d = create<GroupDecoration>(2);
   EXPECT_FALSE(d->Is<BindingDecoration>());
   EXPECT_FALSE(d->Is<BuiltinDecoration>());
-  EXPECT_FALSE(d->Is<ConstantIdDecoration>());
+  EXPECT_FALSE(d->Is<OverrideDecoration>());
   EXPECT_FALSE(d->Is<LocationDecoration>());
   EXPECT_TRUE(d->Is<GroupDecoration>());
 }
diff --git a/src/ast/location_decoration_test.cc b/src/ast/location_decoration_test.cc
index fae40f9..3b72d75 100644
--- a/src/ast/location_decoration_test.cc
+++ b/src/ast/location_decoration_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/constant_id_decoration.h"
+#include "src/ast/override_decoration.h"
 #include "src/ast/test_helper.h"
 
 namespace tint {
@@ -30,7 +30,7 @@
   Decoration* d = create<LocationDecoration>(2);
   EXPECT_FALSE(d->Is<BindingDecoration>());
   EXPECT_FALSE(d->Is<BuiltinDecoration>());
-  EXPECT_FALSE(d->Is<ConstantIdDecoration>());
+  EXPECT_FALSE(d->Is<OverrideDecoration>());
   EXPECT_TRUE(d->Is<LocationDecoration>());
   EXPECT_FALSE(d->Is<GroupDecoration>());
 }
diff --git a/src/ast/override_decoration.cc b/src/ast/override_decoration.cc
new file mode 100644
index 0000000..c50a993
--- /dev/null
+++ b/src/ast/override_decoration.cc
@@ -0,0 +1,45 @@
+// 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/override_decoration.h"
+
+#include "src/program_builder.h"
+
+TINT_INSTANTIATE_TYPEINFO(tint::ast::OverrideDecoration);
+
+namespace tint {
+namespace ast {
+
+OverrideDecoration::OverrideDecoration(ProgramID program_id,
+                                       const Source& source,
+                                       uint32_t val)
+    : Base(program_id, source), value_(val) {}
+
+OverrideDecoration::~OverrideDecoration() = default;
+
+void OverrideDecoration::to_str(const sem::Info&,
+                                std::ostream& out,
+                                size_t indent) const {
+  make_indent(out, indent);
+  out << "OverrideDecoration{" << value_ << "}" << std::endl;
+}
+
+OverrideDecoration* OverrideDecoration::Clone(CloneContext* ctx) const {
+  // Clone arguments outside of create() call to have deterministic ordering
+  auto src = ctx->Clone(source());
+  return ctx->dst->create<OverrideDecoration>(src, value_);
+}
+
+}  // namespace ast
+}  // namespace tint
diff --git a/src/ast/constant_id_decoration.h b/src/ast/override_decoration.h
similarity index 72%
rename from src/ast/constant_id_decoration.h
rename to src/ast/override_decoration.h
index 9261e01..b2f8b3b 100644
--- a/src/ast/constant_id_decoration.h
+++ b/src/ast/override_decoration.h
@@ -12,27 +12,25 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_AST_CONSTANT_ID_DECORATION_H_
-#define SRC_AST_CONSTANT_ID_DECORATION_H_
+#ifndef SRC_AST_OVERRIDE_DECORATION_H_
+#define SRC_AST_OVERRIDE_DECORATION_H_
 
 #include "src/ast/decoration.h"
 
 namespace tint {
 namespace ast {
 
-/// A constant id decoration
-class ConstantIdDecoration : public Castable<ConstantIdDecoration, Decoration> {
+/// An override decoration
+class OverrideDecoration : public Castable<OverrideDecoration, Decoration> {
  public:
   /// constructor
   /// @param program_id the identifier of the program that owns this node
   /// @param source the source of this decoration
-  /// @param val the constant_id value
-  ConstantIdDecoration(ProgramID program_id,
-                       const Source& source,
-                       uint32_t val);
-  ~ConstantIdDecoration() override;
+  /// @param val the override value
+  OverrideDecoration(ProgramID program_id, const Source& source, uint32_t val);
+  ~OverrideDecoration() override;
 
-  /// @returns the constant id value
+  /// @returns the override id value
   uint32_t value() const { return value_; }
 
   /// Outputs the decoration to the given stream
@@ -47,7 +45,7 @@
   /// `ctx`.
   /// @param ctx the clone context
   /// @return the newly cloned node
-  ConstantIdDecoration* Clone(CloneContext* ctx) const override;
+  OverrideDecoration* Clone(CloneContext* ctx) const override;
 
  private:
   uint32_t const value_;
@@ -56,4 +54,4 @@
 }  // namespace ast
 }  // namespace tint
 
-#endif  // SRC_AST_CONSTANT_ID_DECORATION_H_
+#endif  // SRC_AST_OVERRIDE_DECORATION_H_
diff --git a/src/ast/constant_id_decoration_test.cc b/src/ast/override_decoration_test.cc
similarity index 67%
rename from src/ast/constant_id_decoration_test.cc
rename to src/ast/override_decoration_test.cc
index 1dd9bf0..b5529cf 100644
--- a/src/ast/constant_id_decoration_test.cc
+++ b/src/ast/override_decoration_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/constant_id_decoration.h"
+#include "src/ast/override_decoration.h"
 
 #include "src/ast/test_helper.h"
 
@@ -20,25 +20,25 @@
 namespace ast {
 namespace {
 
-using ConstantIdDecorationTest = TestHelper;
+using OverrideDecorationTest = TestHelper;
 
-TEST_F(ConstantIdDecorationTest, Creation) {
-  auto* d = create<ConstantIdDecoration>(12);
+TEST_F(OverrideDecorationTest, Creation) {
+  auto* d = create<OverrideDecoration>(12);
   EXPECT_EQ(12u, d->value());
 }
 
-TEST_F(ConstantIdDecorationTest, Is) {
-  Decoration* d = create<ConstantIdDecoration>(27);
+TEST_F(OverrideDecorationTest, Is) {
+  Decoration* d = create<OverrideDecoration>(27);
   EXPECT_FALSE(d->Is<BindingDecoration>());
   EXPECT_FALSE(d->Is<BuiltinDecoration>());
-  EXPECT_TRUE(d->Is<ConstantIdDecoration>());
+  EXPECT_TRUE(d->Is<OverrideDecoration>());
   EXPECT_FALSE(d->Is<LocationDecoration>());
   EXPECT_FALSE(d->Is<GroupDecoration>());
 }
 
-TEST_F(ConstantIdDecorationTest, ToStr) {
-  auto* d = create<ConstantIdDecoration>(1200);
-  EXPECT_EQ(str(d), R"(ConstantIdDecoration{1200}
+TEST_F(OverrideDecorationTest, ToStr) {
+  auto* d = create<OverrideDecoration>(1200);
+  EXPECT_EQ(str(d), R"(OverrideDecoration{1200}
 )");
 }
 
diff --git a/src/ast/variable.cc b/src/ast/variable.cc
index 69a2964..9d62164 100644
--- a/src/ast/variable.cc
+++ b/src/ast/variable.cc
@@ -14,7 +14,7 @@
 
 #include "src/ast/variable.h"
 
-#include "src/ast/constant_id_decoration.h"
+#include "src/ast/override_decoration.h"
 #include "src/program_builder.h"
 #include "src/sem/variable.h"
 
@@ -63,7 +63,7 @@
 }
 
 uint32_t Variable::constant_id() const {
-  if (auto* cid = GetDecoration<ConstantIdDecoration>(decorations_)) {
+  if (auto* cid = GetDecoration<OverrideDecoration>(decorations_)) {
     return cid->value();
   }
   TINT_ASSERT(false);
diff --git a/src/ast/variable.h b/src/ast/variable.h
index 281c8b4..66c3cd7 100644
--- a/src/ast/variable.h
+++ b/src/ast/variable.h
@@ -146,8 +146,8 @@
   /// @returns the binding point information for the variable
   BindingPoint binding_point() const;
 
-  /// @returns the constant_id value for the variable. Assumes that this
-  /// variable has a constant ID decoration.
+  /// @returns the pipeline constant id value for the variable. Assumes that
+  /// this variable has an override decoration.
   uint32_t constant_id() const;
 
   /// Clones this node and all transitive child nodes using the `CloneContext`
diff --git a/src/ast/variable_test.cc b/src/ast/variable_test.cc
index c7bfd5f..a837701 100644
--- a/src/ast/variable_test.cc
+++ b/src/ast/variable_test.cc
@@ -13,7 +13,7 @@
 // limitations under the License.
 
 #include "gtest/gtest-spi.h"
-#include "src/ast/constant_id_decoration.h"
+#include "src/ast/override_decoration.h"
 #include "src/ast/test_helper.h"
 
 namespace tint {
@@ -115,13 +115,13 @@
                   DecorationList{
                       create<LocationDecoration>(1),
                       create<BuiltinDecoration>(Builtin::kPosition),
-                      create<ConstantIdDecoration>(1200),
+                      create<OverrideDecoration>(1200),
                   });
 
   auto& decorations = var->decorations();
   EXPECT_TRUE(ast::HasDecoration<ast::LocationDecoration>(decorations));
   EXPECT_TRUE(ast::HasDecoration<ast::BuiltinDecoration>(decorations));
-  EXPECT_TRUE(ast::HasDecoration<ast::ConstantIdDecoration>(decorations));
+  EXPECT_TRUE(ast::HasDecoration<ast::OverrideDecoration>(decorations));
 
   auto* location = ast::GetDecoration<ast::LocationDecoration>(decorations);
   ASSERT_NE(nullptr, location);
@@ -172,7 +172,7 @@
 TEST_F(VariableTest, ConstantId) {
   auto* var = Var("my_var", ty.i32(), StorageClass::kFunction, nullptr,
                   DecorationList{
-                      create<ConstantIdDecoration>(1200),
+                      create<OverrideDecoration>(1200),
                   });
 
   EXPECT_EQ(var->constant_id(), 1200u);
diff --git a/src/inspector/inspector.cc b/src/inspector/inspector.cc
index d1b38e9..578c07f 100644
--- a/src/inspector/inspector.cc
+++ b/src/inspector/inspector.cc
@@ -17,9 +17,9 @@
 #include <utility>
 
 #include "src/ast/bool_literal.h"
-#include "src/ast/constant_id_decoration.h"
 #include "src/ast/float_literal.h"
 #include "src/ast/module.h"
+#include "src/ast/override_decoration.h"
 #include "src/ast/scalar_constructor_expression.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/uint_literal.h"
@@ -273,7 +273,7 @@
 std::map<uint32_t, Scalar> Inspector::GetConstantIDs() {
   std::map<uint32_t, Scalar> result;
   for (auto* var : program_->AST().GlobalVariables()) {
-    if (!ast::HasDecoration<ast::ConstantIdDecoration>(var->decorations())) {
+    if (!ast::HasDecoration<ast::OverrideDecoration>(var->decorations())) {
       continue;
     }
 
diff --git a/src/inspector/inspector_test.cc b/src/inspector/inspector_test.cc
index 15324a6..ff4eb84 100644
--- a/src/inspector/inspector_test.cc
+++ b/src/inspector/inspector_test.cc
@@ -14,7 +14,7 @@
 
 #include "gtest/gtest.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/constant_id_decoration.h"
+#include "src/ast/override_decoration.h"
 #include "src/ast/stage_decoration.h"
 #include "src/ast/struct_block_decoration.h"
 #include "src/ast/workgroup_decoration.h"
@@ -151,7 +151,7 @@
     }
     GlobalConst(name, type, constructor,
                 ast::DecorationList{
-                    create<ast::ConstantIdDecoration>(id),
+                    create<ast::OverrideDecoration>(id),
                 });
   }
 
diff --git a/src/reader/spirv/namer.cc b/src/reader/spirv/namer.cc
index 67450d1..b459712 100644
--- a/src/reader/spirv/namer.cc
+++ b/src/reader/spirv/namer.cc
@@ -28,32 +28,32 @@
 
 const char* kWGSLReservedWords[] = {
     // Please keep this list sorted
-    "array",       "as",          "asm",
-    "bf16",        "binding",     "block",
-    "bool",        "break",       "builtin",
-    "case",        "cast",        "compute",
-    "const",       "constant_id", "continue",
-    "default",     "discard",     "do",
-    "else",        "elseif",      "entry_point",
-    "enum",        "f16",         "f32",
-    "fallthrough", "false",       "fn",
-    "for",         "fragment",    "i16",
-    "i32",         "i64",         "i8",
-    "if",          "image",       "import",
-    "in",          "let",         "location",
-    "loop",        "mat2x2",      "mat2x3",
-    "mat2x4",      "mat3x2",      "mat3x3",
-    "mat3x4",      "mat4x2",      "mat4x3",
-    "mat4x4",      "offset",      "out",
-    "premerge",    "private",     "ptr",
-    "regardless",  "return",      "set",
-    "storage",     "struct",      "switch",
-    "true",        "type",        "typedef",
-    "u16",         "u32",         "u64",
-    "u8",          "uniform",     "uniform_constant",
-    "unless",      "using",       "var",
-    "vec2",        "vec3",        "vec4",
-    "vertex",      "void",        "while",
+    "array",      "as",          "asm",
+    "bf16",       "binding",     "block",
+    "bool",       "break",       "builtin",
+    "case",       "cast",        "compute",
+    "const",      "continue",    "default",
+    "discard",    "do",          "else",
+    "elseif",     "entry_point", "enum",
+    "f16",        "f32",         "fallthrough",
+    "false",      "fn",          "for",
+    "fragment",   "i16",         "i32",
+    "i64",        "i8",          "if",
+    "image",      "import",      "in",
+    "let",        "location",    "loop",
+    "mat2x2",     "mat2x3",      "mat2x4",
+    "mat3x2",     "mat3x3",      "mat3x4",
+    "mat4x2",     "mat4x3",      "mat4x4",
+    "offset",     "out",         "override",
+    "premerge",   "private",     "ptr",
+    "regardless", "return",      "set",
+    "storage",    "struct",      "switch",
+    "true",       "type",        "typedef",
+    "u16",        "u32",         "u64",
+    "u8",         "uniform",     "uniform_constant",
+    "unless",     "using",       "var",
+    "vec2",       "vec3",        "vec4",
+    "vertex",     "void",        "while",
     "workgroup",
 };
 
diff --git a/src/reader/spirv/namer_test.cc b/src/reader/spirv/namer_test.cc
index 2ef9943..28f0b8c 100644
--- a/src/reader/spirv/namer_test.cc
+++ b/src/reader/spirv/namer_test.cc
@@ -372,32 +372,32 @@
                          SpvNamerReservedWordTest,
                          ::testing::ValuesIn(std::vector<std::string>{
                              // Please keep this list sorted.
-                             "array",       "as",          "asm",
-                             "bf16",        "binding",     "block",
-                             "bool",        "break",       "builtin",
-                             "case",        "cast",        "compute",
-                             "const",       "constant_id", "continue",
-                             "default",     "discard",     "do",
-                             "else",        "elseif",      "entry_point",
-                             "enum",        "f16",         "f32",
-                             "fallthrough", "false",       "fn",
-                             "for",         "fragment",    "i16",
-                             "i32",         "i64",         "i8",
-                             "if",          "image",       "import",
-                             "in",          "let",         "location",
-                             "loop",        "mat2x2",      "mat2x3",
-                             "mat2x4",      "mat3x2",      "mat3x3",
-                             "mat3x4",      "mat4x2",      "mat4x3",
-                             "mat4x4",      "offset",      "out",
-                             "premerge",    "private",     "ptr",
-                             "regardless",  "return",      "set",
-                             "storage",     "struct",      "switch",
-                             "true",        "type",        "typedef",
-                             "u16",         "u32",         "u64",
-                             "u8",          "uniform",     "uniform_constant",
-                             "unless",      "using",       "var",
-                             "vec2",        "vec3",        "vec4",
-                             "vertex",      "void",        "while",
+                             "array",      "as",          "asm",
+                             "bf16",       "binding",     "block",
+                             "bool",       "break",       "builtin",
+                             "case",       "cast",        "compute",
+                             "const",      "continue",    "default",
+                             "discard",    "do",          "else",
+                             "elseif",     "entry_point", "enum",
+                             "f16",        "f32",         "fallthrough",
+                             "false",      "fn",          "for",
+                             "fragment",   "i16",         "i32",
+                             "i64",        "i8",          "if",
+                             "image",      "import",      "in",
+                             "let",        "location",    "loop",
+                             "mat2x2",     "mat2x3",      "mat2x4",
+                             "mat3x2",     "mat3x3",      "mat3x4",
+                             "mat4x2",     "mat4x3",      "mat4x4",
+                             "offset",     "out",         "override",
+                             "premerge",   "private",     "ptr",
+                             "regardless", "return",      "set",
+                             "storage",    "struct",      "switch",
+                             "true",       "type",        "typedef",
+                             "u16",        "u32",         "u64",
+                             "u8",         "uniform",     "uniform_constant",
+                             "unless",     "using",       "var",
+                             "vec2",       "vec3",        "vec4",
+                             "vertex",     "void",        "while",
                              "workgroup",
                          }));
 
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc
index dd0e0fa..fe246ba 100644
--- a/src/reader/spirv/parser_impl.cc
+++ b/src/reader/spirv/parser_impl.cc
@@ -21,7 +21,7 @@
 
 #include "source/opt/build_module.h"
 #include "src/ast/bitcast_expression.h"
-#include "src/ast/constant_id_decoration.h"
+#include "src/ast/override_decoration.h"
 #include "src/ast/struct_block_decoration.h"
 #include "src/reader/spirv/function.h"
 #include "src/sem/access_control_type.h"
@@ -1157,7 +1157,7 @@
       ast::DecorationList spec_id_decos;
       for (const auto& deco : GetDecorationsFor(inst.result_id())) {
         if ((deco.size() == 2) && (deco[0] == SpvDecorationSpecId)) {
-          auto* cid = create<ast::ConstantIdDecoration>(Source{}, deco[1]);
+          auto* cid = create<ast::OverrideDecoration>(Source{}, deco[1]);
           spec_id_decos.push_back(cid);
           break;
         }
diff --git a/src/reader/spirv/parser_impl_module_var_test.cc b/src/reader/spirv/parser_impl_module_var_test.cc
index 9279b2b..67ca1f6 100644
--- a/src/reader/spirv/parser_impl_module_var_test.cc
+++ b/src/reader/spirv/parser_impl_module_var_test.cc
@@ -1851,7 +1851,7 @@
   EXPECT_THAT(module_str, HasSubstr(R"(
   VariableConst{
     Decorations{
-      ConstantIdDecoration{12}
+      OverrideDecoration{12}
     }
     myconst
     none
@@ -1876,7 +1876,7 @@
   EXPECT_THAT(module_str, HasSubstr(R"(
   VariableConst{
     Decorations{
-      ConstantIdDecoration{12}
+      OverrideDecoration{12}
     }
     myconst
     none
@@ -1901,7 +1901,7 @@
   EXPECT_THAT(module_str, HasSubstr(R"(
   VariableConst{
     Decorations{
-      ConstantIdDecoration{12}
+      OverrideDecoration{12}
     }
     myconst
     none
@@ -1926,7 +1926,7 @@
   EXPECT_THAT(module_str, HasSubstr(R"(
   VariableConst{
     Decorations{
-      ConstantIdDecoration{12}
+      OverrideDecoration{12}
     }
     myconst
     none
@@ -1951,7 +1951,7 @@
   EXPECT_THAT(module_str, HasSubstr(R"(
   VariableConst{
     Decorations{
-      ConstantIdDecoration{12}
+      OverrideDecoration{12}
     }
     myconst
     none
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index 99d7548..a49f475 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -20,13 +20,13 @@
 #include "src/ast/bitcast_expression.h"
 #include "src/ast/break_statement.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/constant_id_decoration.h"
 #include "src/ast/continue_statement.h"
 #include "src/ast/discard_statement.h"
 #include "src/ast/external_texture.h"
 #include "src/ast/fallthrough_statement.h"
 #include "src/ast/if_statement.h"
 #include "src/ast/loop_statement.h"
+#include "src/ast/override_decoration.h"
 #include "src/ast/return_statement.h"
 #include "src/ast/stage_decoration.h"
 #include "src/ast/struct_block_decoration.h"
@@ -121,9 +121,9 @@
 const char kBindingDecoration[] = "binding";
 const char kBlockDecoration[] = "block";
 const char kBuiltinDecoration[] = "builtin";
-const char kConstantIdDecoration[] = "constant_id";
 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";
@@ -139,8 +139,8 @@
   auto s = t.to_str();
   return s == kAccessDecoration || s == kAlignDecoration ||
          s == kBindingDecoration || s == kBlockDecoration ||
-         s == kBuiltinDecoration || s == kConstantIdDecoration ||
-         s == kGroupDecoration || s == kLocationDecoration ||
+         s == kBuiltinDecoration || s == kGroupDecoration ||
+         s == kLocationDecoration || s == kOverrideDecoration ||
          s == kOffsetDecoration || s == kSetDecoration ||
          s == kSizeDecoration || s == kStageDecoration ||
          s == kStrideDecoration || s == kWorkgroupSizeDecoration;
@@ -3102,14 +3102,14 @@
     });
   }
 
-  if (s == kConstantIdDecoration) {
-    const char* use = "constant_id decoration";
+  if (s == kOverrideDecoration) {
+    const char* use = "override decoration";
     return expect_paren_block(use, [&]() -> Result {
       auto val = expect_positive_sint(use);
       if (val.errored)
         return Failure::kErrored;
 
-      return create<ast::ConstantIdDecoration>(t.source(), val.value);
+      return create<ast::OverrideDecoration>(t.source(), val.value);
     });
   }
 
diff --git a/src/reader/wgsl/parser_impl_global_constant_decl_test.cc b/src/reader/wgsl/parser_impl_global_constant_decl_test.cc
index 0cdfb90..f0317b6 100644
--- a/src/reader/wgsl/parser_impl_global_constant_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_global_constant_decl_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/constant_id_decoration.h"
+#include "src/ast/override_decoration.h"
 #include "src/reader/wgsl/parser_impl_test_helper.h"
 
 namespace tint {
@@ -45,7 +45,7 @@
   EXPECT_TRUE(e->constructor()->Is<ast::ConstructorExpression>());
 
   EXPECT_FALSE(
-      ast::HasDecoration<ast::ConstantIdDecoration>(e.value->decorations()));
+      ast::HasDecoration<ast::OverrideDecoration>(e.value->decorations()));
 }
 
 TEST_F(ParserImplTest, GlobalConstantDecl_MissingEqual) {
@@ -100,8 +100,8 @@
   EXPECT_EQ(p->error(), "1:14: unable to parse constant literal");
 }
 
-TEST_F(ParserImplTest, GlobalConstantDec_ConstantId) {
-  auto p = parser("[[constant_id(7)]] let a : f32 = 1.");
+TEST_F(ParserImplTest, GlobalConstantDec_Override_WithId) {
+  auto p = parser("[[override(7)]] let a : f32 = 1.");
   auto decos = p->decoration_list();
   EXPECT_FALSE(decos.errored);
   EXPECT_TRUE(decos.matched);
@@ -118,20 +118,20 @@
   EXPECT_TRUE(e->declared_type()->Is<sem::F32>());
 
   EXPECT_EQ(e->source().range.begin.line, 1u);
-  EXPECT_EQ(e->source().range.begin.column, 24u);
+  EXPECT_EQ(e->source().range.begin.column, 21u);
   EXPECT_EQ(e->source().range.end.line, 1u);
-  EXPECT_EQ(e->source().range.end.column, 25u);
+  EXPECT_EQ(e->source().range.end.column, 22u);
 
   ASSERT_NE(e->constructor(), nullptr);
   EXPECT_TRUE(e->constructor()->Is<ast::ConstructorExpression>());
 
   EXPECT_TRUE(
-      ast::HasDecoration<ast::ConstantIdDecoration>(e.value->decorations()));
+      ast::HasDecoration<ast::OverrideDecoration>(e.value->decorations()));
   EXPECT_EQ(e.value->constant_id(), 7u);
 }
 
-TEST_F(ParserImplTest, GlobalConstantDec_ConstantId_Missing) {
-  auto p = parser("[[constant_id()]] let a : f32 = 1.");
+TEST_F(ParserImplTest, GlobalConstantDec_Override_MissingId) {
+  auto p = parser("[[override()]] let a : f32 = 1.");
   auto decos = p->decoration_list();
   EXPECT_TRUE(decos.errored);
   EXPECT_FALSE(decos.matched);
@@ -143,11 +143,11 @@
 
   EXPECT_TRUE(p->has_error());
   EXPECT_EQ(p->error(),
-            "1:15: expected signed integer literal for constant_id decoration");
+            "1:12: expected signed integer literal for override decoration");
 }
 
-TEST_F(ParserImplTest, GlobalConstantDec_ConstantId_Invalid) {
-  auto p = parser("[[constant_id(-7)]] let a : f32 = 1.");
+TEST_F(ParserImplTest, GlobalConstantDec_Override_InvalidId) {
+  auto p = parser("[[override(-7)]] let a : f32 = 1.");
   auto decos = p->decoration_list();
   EXPECT_TRUE(decos.errored);
   EXPECT_FALSE(decos.matched);
@@ -158,10 +158,10 @@
   ASSERT_NE(e.value, nullptr);
 
   EXPECT_TRUE(p->has_error());
-  EXPECT_EQ(p->error(), "1:15: constant_id decoration must be positive");
+  EXPECT_EQ(p->error(), "1:12: override decoration must be positive");
 }
 
-TEST_F(ParserImplTest, GlobalConstantDec_ConstantId_Const) {
+TEST_F(ParserImplTest, GlobalConstantDec_Const) {
   auto p = parser("const a : i32 = 1");
   auto decos = p->decoration_list();
   EXPECT_FALSE(decos.errored);
diff --git a/src/resolver/decoration_validation_test.cc b/src/resolver/decoration_validation_test.cc
index a6862a0..a482070 100644
--- a/src/resolver/decoration_validation_test.cc
+++ b/src/resolver/decoration_validation_test.cc
@@ -13,7 +13,7 @@
 // limitations under the License.
 
 #include "src/ast/access_decoration.h"
-#include "src/ast/constant_id_decoration.h"
+#include "src/ast/override_decoration.h"
 #include "src/ast/return_statement.h"
 #include "src/ast/stage_decoration.h"
 #include "src/ast/struct_block_decoration.h"
@@ -64,7 +64,7 @@
     case DecorationKind::kBuiltin:
       return builder.Builtin(source, ast::Builtin::kPosition);
     case DecorationKind::kConstantId:
-      return builder.create<ast::ConstantIdDecoration>(source, 0u);
+      return builder.create<ast::OverrideDecoration>(source, 0u);
     case DecorationKind::kGroup:
       return builder.create<ast::GroupDecoration>(source, 1u);
     case DecorationKind::kLocation:
diff --git a/src/resolver/resolver.cc b/src/resolver/resolver.cc
index 3e21014..471552b 100644
--- a/src/resolver/resolver.cc
+++ b/src/resolver/resolver.cc
@@ -24,7 +24,6 @@
 #include "src/ast/bitcast_expression.h"
 #include "src/ast/break_statement.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/constant_id_decoration.h"
 #include "src/ast/continue_statement.h"
 #include "src/ast/depth_texture.h"
 #include "src/ast/discard_statement.h"
@@ -33,6 +32,7 @@
 #include "src/ast/internal_decoration.h"
 #include "src/ast/loop_statement.h"
 #include "src/ast/matrix.h"
+#include "src/ast/override_decoration.h"
 #include "src/ast/pointer.h"
 #include "src/ast/return_statement.h"
 #include "src/ast/sampled_texture.h"
@@ -401,7 +401,7 @@
     Mark(deco);
     if (!(deco->Is<ast::BindingDecoration>() ||
           deco->Is<ast::BuiltinDecoration>() ||
-          deco->Is<ast::ConstantIdDecoration>() ||
+          deco->Is<ast::OverrideDecoration>() ||
           deco->Is<ast::GroupDecoration>() ||
           deco->Is<ast::LocationDecoration>())) {
       diagnostics_.add_error("decoration is not valid for variables",
diff --git a/src/transform/bound_array_accessors_test.cc b/src/transform/bound_array_accessors_test.cc
index bda6258..c8cb2b4 100644
--- a/src/transform/bound_array_accessors_test.cc
+++ b/src/transform/bound_array_accessors_test.cc
@@ -499,7 +499,7 @@
 
 // TODO(dsinclair): Implement when constant_id exists
 TEST_F(BoundArrayAccessorsTest, DISABLED_Vector_Constant_Id_Clamps) {
-  // [[constant_id(1300)]] let idx : i32;
+  // [[override(1300)]] let idx : i32;
   // var a : vec3<f32>
   // var b : f32 = a[idx]
   //
@@ -508,7 +508,7 @@
 
 // TODO(dsinclair): Implement when constant_id exists
 TEST_F(BoundArrayAccessorsTest, DISABLED_Array_Constant_Id_Clamps) {
-  // [[constant_id(1300)]] let idx : i32;
+  // [[override(1300)]] let idx : i32;
   // var a : array<f32, 4>
   // var b : f32 = a[idx]
   //
@@ -517,7 +517,7 @@
 
 // TODO(dsinclair): Implement when constant_id exists
 TEST_F(BoundArrayAccessorsTest, DISABLED_Matrix_Column_Constant_Id_Clamps) {
-  // [[constant_id(1300)]] let idx : i32;
+  // [[override(1300)]] let idx : i32;
   // var a : mat3x2<f32>
   // var b : f32 = a[idx][1]
   //
@@ -526,7 +526,7 @@
 
 // TODO(dsinclair): Implement when constant_id exists
 TEST_F(BoundArrayAccessorsTest, DISABLED_Matrix_Row_Constant_Id_Clamps) {
-  // [[constant_id(1300)]] let idx : i32;
+  // [[override(1300)]] let idx : i32;
   // var a : mat3x2<f32>
   // var b : f32 = a[1][idx]
   //
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index 98e8592..ffdef07 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -18,9 +18,9 @@
 #include <vector>
 
 #include "src/ast/call_statement.h"
-#include "src/ast/constant_id_decoration.h"
 #include "src/ast/fallthrough_statement.h"
 #include "src/ast/internal_decoration.h"
+#include "src/ast/override_decoration.h"
 #include "src/ast/variable_decl_statement.h"
 #include "src/sem/access_control_type.h"
 #include "src/sem/array.h"
@@ -2681,7 +2681,7 @@
   make_indent(out);
 
   for (auto* d : var->decorations()) {
-    if (!d->Is<ast::ConstantIdDecoration>()) {
+    if (!d->Is<ast::OverrideDecoration>()) {
       diagnostics_.add_error("Decorated const values not valid");
       return false;
     }
@@ -2703,7 +2703,7 @@
   auto* sem = builder_.Sem().Get(var);
   auto* type = sem->Type();
 
-  if (ast::HasDecoration<ast::ConstantIdDecoration>(var->decorations())) {
+  if (ast::HasDecoration<ast::OverrideDecoration>(var->decorations())) {
     auto const_id = var->constant_id();
 
     out << "#ifndef WGSL_SPEC_CONSTANT_" << const_id << std::endl;
diff --git a/src/writer/hlsl/generator_impl_module_constant_test.cc b/src/writer/hlsl/generator_impl_module_constant_test.cc
index 405b916..1f9a206 100644
--- a/src/writer/hlsl/generator_impl_module_constant_test.cc
+++ b/src/writer/hlsl/generator_impl_module_constant_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/constant_id_decoration.h"
+#include "src/ast/override_decoration.h"
 #include "src/writer/hlsl/test_helper.h"
 
 namespace tint {
@@ -35,7 +35,7 @@
 TEST_F(HlslGeneratorImplTest_ModuleConstant, Emit_SpecConstant) {
   auto* var = Const("pos", ty.f32(), Expr(3.0f),
                     ast::DecorationList{
-                        create<ast::ConstantIdDecoration>(23),
+                        create<ast::OverrideDecoration>(23),
                     });
   WrapInFunction(Decl(var));
 
@@ -53,7 +53,7 @@
 TEST_F(HlslGeneratorImplTest_ModuleConstant, Emit_SpecConstant_NoConstructor) {
   auto* var = Const("pos", ty.f32(), nullptr,
                     ast::DecorationList{
-                        create<ast::ConstantIdDecoration>(23),
+                        create<ast::OverrideDecoration>(23),
                     });
   WrapInFunction(Decl(var));
 
diff --git a/src/writer/hlsl/generator_impl_workgroup_var_test.cc b/src/writer/hlsl/generator_impl_workgroup_var_test.cc
index 9fdd5b4..ca73fdd 100644
--- a/src/writer/hlsl/generator_impl_workgroup_var_test.cc
+++ b/src/writer/hlsl/generator_impl_workgroup_var_test.cc
@@ -13,7 +13,7 @@
 // limitations under the License.
 
 #include "gmock/gmock.h"
-#include "src/ast/constant_id_decoration.h"
+#include "src/ast/override_decoration.h"
 #include "src/ast/stage_decoration.h"
 #include "src/writer/hlsl/test_helper.h"
 
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index fc31953..e0378a0 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -21,10 +21,10 @@
 
 #include "src/ast/bool_literal.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/constant_id_decoration.h"
 #include "src/ast/fallthrough_statement.h"
 #include "src/ast/float_literal.h"
 #include "src/ast/module.h"
+#include "src/ast/override_decoration.h"
 #include "src/ast/sint_literal.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/variable_decl_statement.h"
@@ -2250,7 +2250,7 @@
   make_indent();
 
   for (auto* d : var->decorations()) {
-    if (!d->Is<ast::ConstantIdDecoration>()) {
+    if (!d->Is<ast::OverrideDecoration>()) {
       diagnostics_.add_error("Decorated const values not valid");
       return false;
     }
@@ -2269,7 +2269,7 @@
     out_ << " " << program_->Symbols().NameFor(var->symbol());
   }
 
-  if (ast::HasDecoration<ast::ConstantIdDecoration>(var->decorations())) {
+  if (ast::HasDecoration<ast::OverrideDecoration>(var->decorations())) {
     out_ << " [[function_constant(" << var->constant_id() << ")]]";
   } else if (var->constructor() != nullptr) {
     out_ << " = ";
diff --git a/src/writer/msl/generator_impl_module_constant_test.cc b/src/writer/msl/generator_impl_module_constant_test.cc
index c793214..a939ee2 100644
--- a/src/writer/msl/generator_impl_module_constant_test.cc
+++ b/src/writer/msl/generator_impl_module_constant_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/constant_id_decoration.h"
+#include "src/ast/override_decoration.h"
 #include "src/writer/msl/test_helper.h"
 
 namespace tint {
@@ -35,7 +35,7 @@
 TEST_F(MslGeneratorImplTest, Emit_SpecConstant) {
   auto* var = Const("pos", ty.f32(), Expr(3.f),
                     ast::DecorationList{
-                        create<ast::ConstantIdDecoration>(23),
+                        create<ast::OverrideDecoration>(23),
                     });
   WrapInFunction(Decl(var));
 
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index b99323e..98f10e3 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -19,8 +19,8 @@
 
 #include "spirv/unified1/GLSL.std.450.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/constant_id_decoration.h"
 #include "src/ast/fallthrough_statement.h"
+#include "src/ast/override_decoration.h"
 #include "src/sem/array.h"
 #include "src/sem/call.h"
 #include "src/sem/depth_texture_type.h"
@@ -745,12 +745,12 @@
   } else if (!type_no_ac->Is<sem::Sampler>()) {
     // Certain cases require us to generate a constructor value.
     //
-    // 1- ConstantId's must be attached to the OpConstant, if we have a
-    //    variable with a constant_id that doesn't have a constructor we make
-    //    one
+    // 1- Pipeline constant IDs must be attached to the OpConstant, if we have a
+    //    variable with an override attribute that doesn't have a constructor we
+    //    make one
     // 2- If we don't have a constructor and we're an Output or Private variable
     //    then WGSL requires an initializer.
-    if (ast::HasDecoration<ast::ConstantIdDecoration>(var->decorations())) {
+    if (ast::HasDecoration<ast::OverrideDecoration>(var->decorations())) {
       if (type_no_ac->Is<sem::F32>()) {
         ast::FloatLiteral l(ProgramID(), Source{}, 0.0f);
         init_id = GenerateLiteralIfNeeded(var, &l);
@@ -764,7 +764,7 @@
         ast::BoolLiteral l(ProgramID(), Source{}, false);
         init_id = GenerateLiteralIfNeeded(var, &l);
       } else {
-        error_ = "invalid type for constant_id, must be scalar";
+        error_ = "invalid type for pipeline constant ID, must be scalar";
         return false;
       }
       if (init_id == 0) {
@@ -802,7 +802,7 @@
       push_annot(spv::Op::OpDecorate, {Operand::Int(var_id),
                                        Operand::Int(SpvDecorationDescriptorSet),
                                        Operand::Int(group->value())});
-    } else if (deco->Is<ast::ConstantIdDecoration>()) {
+    } else if (deco->Is<ast::OverrideDecoration>()) {
       // Spec constants are handled elsewhere
     } else {
       error_ = "unknown decoration";
@@ -1492,8 +1492,7 @@
                                           ast::Literal* lit) {
   ScalarConstant constant;
 
-  if (var &&
-      ast::HasDecoration<ast::ConstantIdDecoration>(var->decorations())) {
+  if (var && ast::HasDecoration<ast::OverrideDecoration>(var->decorations())) {
     constant.is_spec_op = true;
     constant.constant_id = var->constant_id();
   }
diff --git a/src/writer/spirv/builder_global_variable_test.cc b/src/writer/spirv/builder_global_variable_test.cc
index 53b0b5a..3551e36 100644
--- a/src/writer/spirv/builder_global_variable_test.cc
+++ b/src/writer/spirv/builder_global_variable_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/constant_id_decoration.h"
+#include "src/ast/override_decoration.h"
 #include "src/ast/stage_decoration.h"
 #include "src/ast/struct_block_decoration.h"
 #include "src/writer/spirv/spv_dump.h"
@@ -206,7 +206,7 @@
 TEST_F(BuilderTest, GlobalVar_ConstantId_Bool) {
   auto* v = Global("var", ty.bool_(), ast::StorageClass::kInput, Expr(true),
                    ast::DecorationList{
-                       create<ast::ConstantIdDecoration>(1200),
+                       create<ast::OverrideDecoration>(1200),
                    });
 
   spirv::Builder& b = Build();
@@ -226,7 +226,7 @@
 TEST_F(BuilderTest, GlobalVar_ConstantId_Bool_NoConstructor) {
   auto* v = Global("var", ty.bool_(), ast::StorageClass::kInput, nullptr,
                    ast::DecorationList{
-                       create<ast::ConstantIdDecoration>(1200),
+                       create<ast::OverrideDecoration>(1200),
                    });
 
   spirv::Builder& b = Build();
@@ -246,7 +246,7 @@
 TEST_F(BuilderTest, GlobalVar_ConstantId_Scalar) {
   auto* v = Global("var", ty.f32(), ast::StorageClass::kInput, Expr(2.f),
                    ast::DecorationList{
-                       create<ast::ConstantIdDecoration>(0),
+                       create<ast::OverrideDecoration>(0),
                    });
 
   spirv::Builder& b = Build();
@@ -266,7 +266,7 @@
 TEST_F(BuilderTest, GlobalVar_ConstantId_Scalar_F32_NoConstructor) {
   auto* v = Global("var", ty.f32(), ast::StorageClass::kInput, nullptr,
                    ast::DecorationList{
-                       create<ast::ConstantIdDecoration>(0),
+                       create<ast::OverrideDecoration>(0),
                    });
 
   spirv::Builder& b = Build();
@@ -286,7 +286,7 @@
 TEST_F(BuilderTest, GlobalVar_ConstantId_Scalar_I32_NoConstructor) {
   auto* v = Global("var", ty.i32(), ast::StorageClass::kInput, nullptr,
                    ast::DecorationList{
-                       create<ast::ConstantIdDecoration>(0),
+                       create<ast::OverrideDecoration>(0),
                    });
 
   spirv::Builder& b = Build();
@@ -306,7 +306,7 @@
 TEST_F(BuilderTest, GlobalVar_ConstantId_Scalar_U32_NoConstructor) {
   auto* v = Global("var", ty.u32(), ast::StorageClass::kInput, nullptr,
                    ast::DecorationList{
-                       create<ast::ConstantIdDecoration>(0),
+                       create<ast::OverrideDecoration>(0),
                    });
 
   spirv::Builder& b = Build();
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index 45477d3..b704841 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -22,7 +22,6 @@
 #include "src/ast/bool.h"
 #include "src/ast/bool_literal.h"
 #include "src/ast/call_statement.h"
-#include "src/ast/constant_id_decoration.h"
 #include "src/ast/depth_texture.h"
 #include "src/ast/f32.h"
 #include "src/ast/float_literal.h"
@@ -31,6 +30,7 @@
 #include "src/ast/matrix.h"
 #include "src/ast/module.h"
 #include "src/ast/multisampled_texture.h"
+#include "src/ast/override_decoration.h"
 #include "src/ast/pointer.h"
 #include "src/ast/sampled_texture.h"
 #include "src/ast/sint_literal.h"
@@ -811,8 +811,8 @@
       out_ << "location(" << location->value() << ")";
     } else if (auto* builtin = deco->As<ast::BuiltinDecoration>()) {
       out_ << "builtin(" << builtin->value() << ")";
-    } else if (auto* constant = deco->As<ast::ConstantIdDecoration>()) {
-      out_ << "constant_id(" << constant->value() << ")";
+    } else if (auto* override_deco = deco->As<ast::OverrideDecoration>()) {
+      out_ << "override(" << override_deco->value() << ")";
     } else if (auto* size = deco->As<ast::StructMemberSizeDecoration>()) {
       out_ << "size(" << size->size() << ")";
     } else if (auto* align = deco->As<ast::StructMemberAlignDecoration>()) {
diff --git a/src/writer/wgsl/generator_impl_variable_test.cc b/src/writer/wgsl/generator_impl_variable_test.cc
index 65ded54..055e085 100644
--- a/src/writer/wgsl/generator_impl_variable_test.cc
+++ b/src/writer/wgsl/generator_impl_variable_test.cc
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "src/ast/constant_id_decoration.h"
+#include "src/ast/override_decoration.h"
 #include "src/writer/wgsl/test_helper.h"
 
 namespace tint {
@@ -62,7 +62,7 @@
                        create<ast::BindingDecoration>(0),
                        create<ast::GroupDecoration>(1),
                        Location(2),
-                       create<ast::ConstantIdDecoration>(42),
+                       create<ast::OverrideDecoration>(42),
                    });
 
   GeneratorImpl& gen = Build();
@@ -70,7 +70,7 @@
   ASSERT_TRUE(gen.EmitVariable(v)) << gen.error();
   EXPECT_EQ(
       gen.result(),
-      R"([[builtin(position), binding(0), group(1), location(2), constant_id(42)]] var<private> a : f32;
+      R"([[builtin(position), binding(0), group(1), location(2), override(42)]] var<private> a : f32;
 )");
 }
 
diff --git a/test/BUILD.gn b/test/BUILD.gn
index cd3e013..e999f6c54 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -187,7 +187,6 @@
     "../src/ast/call_expression_test.cc",
     "../src/ast/call_statement_test.cc",
     "../src/ast/case_statement_test.cc",
-    "../src/ast/constant_id_decoration_test.cc",
     "../src/ast/continue_statement_test.cc",
     "../src/ast/depth_texture_test.cc",
     "../src/ast/discard_statement_test.cc",
@@ -209,6 +208,7 @@
     "../src/ast/module_clone_test.cc",
     "../src/ast/module_test.cc",
     "../src/ast/multisampled_texture_test.cc",
+    "../src/ast/override_decoration_test.cc",
     "../src/ast/pointer_test.cc",
     "../src/ast/return_statement_test.cc",
     "../src/ast/sampled_texture_test.cc",