diff --git a/BUILD.gn b/BUILD.gn
index 93bc286..698068f 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -732,7 +732,6 @@
     "src/reader/wgsl/parser_impl_assignment_stmt_test.cc",
     "src/reader/wgsl/parser_impl_body_stmt_test.cc",
     "src/reader/wgsl/parser_impl_break_stmt_test.cc",
-    "src/reader/wgsl/parser_impl_builtin_decoration_test.cc",
     "src/reader/wgsl/parser_impl_case_body_test.cc",
     "src/reader/wgsl/parser_impl_const_expr_test.cc",
     "src/reader/wgsl/parser_impl_const_literal_test.cc",
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index a1637eb..22fdd3501 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -363,7 +363,6 @@
     reader/wgsl/parser_impl_assignment_stmt_test.cc
     reader/wgsl/parser_impl_body_stmt_test.cc
     reader/wgsl/parser_impl_break_stmt_test.cc
-    reader/wgsl/parser_impl_builtin_decoration_test.cc
     reader/wgsl/parser_impl_case_body_test.cc
     reader/wgsl/parser_impl_const_expr_test.cc
     reader/wgsl/parser_impl_const_literal_test.cc
diff --git a/src/reader/wgsl/lexer.cc b/src/reader/wgsl/lexer.cc
index 4c8545e..5d11237 100644
--- a/src/reader/wgsl/lexer.cc
+++ b/src/reader/wgsl/lexer.cc
@@ -524,20 +524,12 @@
     return {Token::Type::kFine, source, "fine"};
   if (str == "fn")
     return {Token::Type::kFn, source, "fn"};
-  if (str == "frag_coord")
-    return {Token::Type::kFragCoord, source, "frag_coord"};
-  if (str == "frag_depth")
-    return {Token::Type::kFragDepth, source, "frag_depth"};
   if (str == "fragment")
     return {Token::Type::kFragment, source, "fragment"};
-  if (str == "front_facing")
-    return {Token::Type::kFrontFacing, source, "front_facing"};
   if (str == "function")
     return {Token::Type::kFunction, source, "function"};
   if (str == "fwidth")
     return {Token::Type::kFwidth, source, "fwidth"};
-  if (str == "global_invocation_id")
-    return {Token::Type::kGlobalInvocationId, source, "global_invocation_id"};
   if (str == "i32")
     return {Token::Type::kI32, source, "i32"};
   if (str == "if")
@@ -548,8 +540,6 @@
     return {Token::Type::kImport, source, "import"};
   if (str == "in")
     return {Token::Type::kIn, source, "in"};
-  if (str == "instance_idx")
-    return {Token::Type::kInstanceIdx, source, "instance_idx"};
   if (str == "is_nan")
     return {Token::Type::kIsNan, source, "is_nan"};
   if (str == "is_inf")
@@ -560,10 +550,6 @@
     return {Token::Type::kIsNormal, source, "is_normal"};
   if (str == "kill")
     return {Token::Type::kKill, source, "kill"};
-  if (str == "local_invocation_id")
-    return {Token::Type::kLocalInvocationId, source, "local_invocation_id"};
-  if (str == "local_invocation_idx")
-    return {Token::Type::kLocalInvocationIdx, source, "local_invocation_idx"};
   if (str == "location")
     return {Token::Type::kLocation, source, "location"};
   if (str == "loop")
@@ -586,16 +572,12 @@
     return {Token::Type::kMat4x3, source, "mat4x3"};
   if (str == "mat4x4")
     return {Token::Type::kMat4x4, source, "mat4x4"};
-  if (str == "num_workgroups")
-    return {Token::Type::kNumWorkgroups, source, "num_workgroups"};
   if (str == "offset")
     return {Token::Type::kOffset, source, "offset"};
   if (str == "out")
     return {Token::Type::kOut, source, "out"};
   if (str == "outer_product")
     return {Token::Type::kOuterProduct, source, "outer_product"};
-  if (str == "position")
-    return {Token::Type::kPosition, source, "position"};
   if (str == "private")
     return {Token::Type::kPrivate, source, "private"};
   if (str == "ptr")
@@ -632,14 +614,10 @@
     return {Token::Type::kVec4, source, "vec4"};
   if (str == "vertex")
     return {Token::Type::kVertex, source, "vertex"};
-  if (str == "vertex_idx")
-    return {Token::Type::kVertexIdx, source, "vertex_idx"};
   if (str == "void")
     return {Token::Type::kVoid, source, "void"};
   if (str == "workgroup")
     return {Token::Type::kWorkgroup, source, "workgroup"};
-  if (str == "workgroup_size")
-    return {Token::Type::kWorkgroupSize, source, "workgroup_size"};
 
   return {};
 }
diff --git a/src/reader/wgsl/lexer_test.cc b/src/reader/wgsl/lexer_test.cc
index 9944ee0..0b514f9 100644
--- a/src/reader/wgsl/lexer_test.cc
+++ b/src/reader/wgsl/lexer_test.cc
@@ -437,26 +437,19 @@
         TokenData{"false", Token::Type::kFalse},
         TokenData{"fine", Token::Type::kFine},
         TokenData{"fn", Token::Type::kFn},
-        TokenData{"frag_coord", Token::Type::kFragCoord},
-        TokenData{"frag_depth", Token::Type::kFragDepth},
         TokenData{"fragment", Token::Type::kFragment},
-        TokenData{"front_facing", Token::Type::kFrontFacing},
         TokenData{"function", Token::Type::kFunction},
         TokenData{"fwidth", Token::Type::kFwidth},
-        TokenData{"global_invocation_id", Token::Type::kGlobalInvocationId},
         TokenData{"i32", Token::Type::kI32},
         TokenData{"if", Token::Type::kIf},
         TokenData{"image", Token::Type::kImage},
         TokenData{"import", Token::Type::kImport},
         TokenData{"in", Token::Type::kIn},
-        TokenData{"instance_idx", Token::Type::kInstanceIdx},
         TokenData{"is_nan", Token::Type::kIsNan},
         TokenData{"is_inf", Token::Type::kIsInf},
         TokenData{"is_finite", Token::Type::kIsFinite},
         TokenData{"is_normal", Token::Type::kIsNormal},
         TokenData{"kill", Token::Type::kKill},
-        TokenData{"local_invocation_id", Token::Type::kLocalInvocationId},
-        TokenData{"local_invocation_idx", Token::Type::kLocalInvocationIdx},
         TokenData{"location", Token::Type::kLocation},
         TokenData{"loop", Token::Type::kLoop},
         TokenData{"mat2x2", Token::Type::kMat2x2},
@@ -468,11 +461,9 @@
         TokenData{"mat4x2", Token::Type::kMat4x2},
         TokenData{"mat4x3", Token::Type::kMat4x3},
         TokenData{"mat4x4", Token::Type::kMat4x4},
-        TokenData{"num_workgroups", Token::Type::kNumWorkgroups},
         TokenData{"offset", Token::Type::kOffset},
         TokenData{"out", Token::Type::kOut},
         TokenData{"outer_product", Token::Type::kOuterProduct},
-        TokenData{"position", Token::Type::kPosition},
         TokenData{"private", Token::Type::kPrivate},
         TokenData{"ptr", Token::Type::kPtr},
         TokenData{"return", Token::Type::kReturn},
@@ -491,10 +482,8 @@
         TokenData{"vec3", Token::Type::kVec3},
         TokenData{"vec4", Token::Type::kVec4},
         TokenData{"vertex", Token::Type::kVertex},
-        TokenData{"vertex_idx", Token::Type::kVertexIdx},
         TokenData{"void", Token::Type::kVoid},
-        TokenData{"workgroup", Token::Type::kWorkgroup},
-        TokenData{"workgroup_size", Token::Type::kWorkgroupSize}));
+        TokenData{"workgroup", Token::Type::kWorkgroup}));
 
 using KeywordTest_Reserved = testing::TestWithParam<const char*>;
 TEST_P(KeywordTest_Reserved, Parses) {
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index e64a74b..0cfd6e5 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -70,6 +70,46 @@
 namespace tint {
 namespace reader {
 namespace wgsl {
+namespace {
+
+ast::Builtin ident_to_builtin(const std::string& str) {
+  if (str == "position") {
+    return ast::Builtin::kPosition;
+  }
+  if (str == "vertex_idx") {
+    return ast::Builtin::kVertexIdx;
+  }
+  if (str == "instance_idx") {
+    return ast::Builtin::kInstanceIdx;
+  }
+  if (str == "front_facing") {
+    return ast::Builtin::kFrontFacing;
+  }
+  if (str == "frag_coord") {
+    return ast::Builtin::kFragCoord;
+  }
+  if (str == "frag_depth") {
+    return ast::Builtin::kFragDepth;
+  }
+  if (str == "num_workgroups") {
+    return ast::Builtin::kNumWorkgroups;
+  }
+  if (str == "workgroup_size") {
+    return ast::Builtin::kWorkgroupSize;
+  }
+  if (str == "local_invocation_id") {
+    return ast::Builtin::kLocalInvocationId;
+  }
+  if (str == "local_invocation_idx") {
+    return ast::Builtin::kLocalInvocationIdx;
+  }
+  if (str == "global_invocation_id") {
+    return ast::Builtin::kGlobalInvocationId;
+  }
+  return ast::Builtin::kNone;
+}
+
+}  // namespace
 
 ParserImpl::ParserImpl(Context* ctx, const std::string& input)
     : ctx_(*ctx), lexer_(std::make_unique<Lexer>(input)) {}
@@ -395,7 +435,7 @@
 }
 
 // variable_decoration_list
-//  : ATTR_LEFT variable_decoration (COMMA variable_decoration)* ATTR_RIGHT
+//  : ATTR_LEFT (variable_decoration COMMA)* variable_decoration ATTR_RIGHT
 ast::VariableDecorationList ParserImpl::variable_decoration_list() {
   ast::VariableDecorationList decos;
 
@@ -452,7 +492,7 @@
 
 // variable_decoration
 //  : LOCATION INT_LITERAL
-//  | BUILTIN builtin_decoration
+//  | BUILTIN IDENT
 //  | BINDING INT_LITERAL
 //  | SET INT_LITERAL
 std::unique_ptr<ast::VariableDecoration> ParserImpl::variable_decoration() {
@@ -471,11 +511,15 @@
   if (t.IsBuiltin()) {
     next();  // consume the peek
 
-    ast::Builtin builtin = builtin_decoration();
-    if (has_error())
+    t = next();
+    if (!t.IsIdentifier() || t.to_str().empty()) {
+      set_error(t, "expected identifier for builtin");
       return {};
+    }
+
+    ast::Builtin builtin = ident_to_builtin(t.to_str());
     if (builtin == ast::Builtin::kNone) {
-      set_error(peek(), "invalid value for builtin decoration");
+      set_error(t, "invalid value for builtin decoration");
       return {};
     }
 
@@ -507,67 +551,6 @@
   return nullptr;
 }
 
-// builtin_decoration
-//  : POSITION
-//  | VERTEX_IDX
-//  | INSTANCE_IDX
-//  | FRONT_FACING
-//  | FRAG_COORD
-//  | FRAG_DEPTH
-//  | NUM_WORKGROUPS
-//  | WORKGROUP_SIZE
-//  | LOCAL_INVOC_ID
-//  | LOCAL_INVOC_IDX
-//  | GLOBAL_INVOC_ID
-ast::Builtin ParserImpl::builtin_decoration() {
-  auto t = peek();
-  if (t.IsPosition()) {
-    next();  // consume the peek
-    return ast::Builtin::kPosition;
-  }
-  if (t.IsVertexIdx()) {
-    next();  // consume the peek
-    return ast::Builtin::kVertexIdx;
-  }
-  if (t.IsInstanceIdx()) {
-    next();  // consume the peek
-    return ast::Builtin::kInstanceIdx;
-  }
-  if (t.IsFrontFacing()) {
-    next();  // consume the peek
-    return ast::Builtin::kFrontFacing;
-  }
-  if (t.IsFragCoord()) {
-    next();  // consume the peek
-    return ast::Builtin::kFragCoord;
-  }
-  if (t.IsFragDepth()) {
-    next();  // consume the peek
-    return ast::Builtin::kFragDepth;
-  }
-  if (t.IsNumWorkgroups()) {
-    next();  // consume the peek
-    return ast::Builtin::kNumWorkgroups;
-  }
-  if (t.IsWorkgroupSize()) {
-    next();  // consume the peek
-    return ast::Builtin::kWorkgroupSize;
-  }
-  if (t.IsLocalInvocationId()) {
-    next();  // consume the peek
-    return ast::Builtin::kLocalInvocationId;
-  }
-  if (t.IsLocalInvocationIdx()) {
-    next();  // consume the peek
-    return ast::Builtin::kLocalInvocationIdx;
-  }
-  if (t.IsGlobalInvocationId()) {
-    next();  // consume the peek
-    return ast::Builtin::kGlobalInvocationId;
-  }
-  return ast::Builtin::kNone;
-}
-
 // variable_decl
 //   : VAR variable_storage_decoration? variable_ident_decl
 std::unique_ptr<ast::Variable> ParserImpl::variable_decl() {
diff --git a/src/reader/wgsl/parser_impl.h b/src/reader/wgsl/parser_impl.h
index 4f33cf0..3767686 100644
--- a/src/reader/wgsl/parser_impl.h
+++ b/src/reader/wgsl/parser_impl.h
@@ -117,9 +117,6 @@
   /// Parses a `variable_decoration` grammar element
   /// @returns the variable decoration or nullptr if an error is encountered
   std::unique_ptr<ast::VariableDecoration> variable_decoration();
-  /// Parses a `builtin_decoration` grammar element
-  /// @returns the builtin or Builtin::kNone if none matched
-  ast::Builtin builtin_decoration();
   /// Parses a `variable_decl` grammar element
   /// @returns the parsed variable or nullptr otherwise
   std::unique_ptr<ast::Variable> variable_decl();
diff --git a/src/reader/wgsl/parser_impl_builtin_decoration_test.cc b/src/reader/wgsl/parser_impl_builtin_decoration_test.cc
deleted file mode 100644
index db95974..0000000
--- a/src/reader/wgsl/parser_impl_builtin_decoration_test.cc
+++ /dev/null
@@ -1,94 +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 "gtest/gtest.h"
-#include "src/ast/builtin.h"
-#include "src/reader/wgsl/parser_impl.h"
-#include "src/reader/wgsl/parser_impl_test_helper.h"
-
-namespace tint {
-namespace reader {
-namespace wgsl {
-namespace {
-
-struct BuiltinData {
-  const char* input;
-  ast::Builtin result;
-};
-inline std::ostream& operator<<(std::ostream& out, BuiltinData data) {
-  out << std::string(data.input);
-  return out;
-}
-
-class BuiltinTest : public testing::TestWithParam<BuiltinData> {
- public:
-  BuiltinTest() = default;
-  ~BuiltinTest() override = default;
-
-  void SetUp() override { ctx_.Reset(); }
-
-  void TearDown() override { impl_ = nullptr; }
-
-  ParserImpl* parser(const std::string& str) {
-    impl_ = std::make_unique<ParserImpl>(&ctx_, str);
-    return impl_.get();
-  }
-
- private:
-  std::unique_ptr<ParserImpl> impl_;
-  Context ctx_;
-};
-
-TEST_P(BuiltinTest, Parses) {
-  auto params = GetParam();
-  auto* p = parser(params.input);
-
-  auto builtin = p->builtin_decoration();
-  ASSERT_FALSE(p->has_error());
-  EXPECT_EQ(builtin, params.result);
-
-  auto t = p->next();
-  EXPECT_TRUE(t.IsEof());
-}
-INSTANTIATE_TEST_SUITE_P(
-    ParserImplTest,
-    BuiltinTest,
-    testing::Values(
-        BuiltinData{"position", ast::Builtin::kPosition},
-        BuiltinData{"vertex_idx", ast::Builtin::kVertexIdx},
-        BuiltinData{"instance_idx", ast::Builtin::kInstanceIdx},
-        BuiltinData{"front_facing", ast::Builtin::kFrontFacing},
-        BuiltinData{"frag_coord", ast::Builtin::kFragCoord},
-        BuiltinData{"frag_depth", ast::Builtin::kFragDepth},
-        BuiltinData{"num_workgroups", ast::Builtin::kNumWorkgroups},
-        BuiltinData{"workgroup_size", ast::Builtin::kWorkgroupSize},
-        BuiltinData{"local_invocation_id", ast::Builtin::kLocalInvocationId},
-        BuiltinData{"local_invocation_idx", ast::Builtin::kLocalInvocationIdx},
-        BuiltinData{"global_invocation_id",
-                    ast::Builtin::kGlobalInvocationId}));
-
-TEST_F(ParserImplTest, BuiltinDecoration_NoMatch) {
-  auto* p = parser("not-a-builtin");
-  auto builtin = p->builtin_decoration();
-  ASSERT_EQ(builtin, ast::Builtin::kNone);
-
-  auto t = p->next();
-  EXPECT_TRUE(t.IsIdentifier());
-  EXPECT_EQ(t.to_str(), "not");
-}
-
-}  // namespace
-}  // namespace wgsl
-}  // namespace reader
-}  // namespace tint
diff --git a/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc b/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc
index a93e21d..85cb1b1 100644
--- a/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc
@@ -26,7 +26,7 @@
 TEST_F(ParserImplTest, VariableDecorationList_Parses) {
   auto* p = parser(R"([[location 4, builtin position]])");
   auto decos = p->variable_decoration_list();
-  ASSERT_FALSE(p->has_error());
+  ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_EQ(decos.size(), 2u);
   ASSERT_TRUE(decos[0]->IsLocation());
   EXPECT_EQ(decos[0]->AsLocation()->value(), 4u);
diff --git a/src/reader/wgsl/parser_impl_variable_decoration_test.cc b/src/reader/wgsl/parser_impl_variable_decoration_test.cc
index 8c30a26..4fc9e5c 100644
--- a/src/reader/wgsl/parser_impl_variable_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_decoration_test.cc
@@ -52,23 +52,77 @@
   EXPECT_EQ(p->error(), "1:10: invalid value for location decoration");
 }
 
-TEST_F(ParserImplTest, VariableDecoration_Builtin) {
-  auto* p = parser("builtin frag_depth");
+struct BuiltinData {
+  const char* input;
+  ast::Builtin result;
+};
+inline std::ostream& operator<<(std::ostream& out, BuiltinData data) {
+  out << std::string(data.input);
+  return out;
+}
+class BuiltinTest : public testing::TestWithParam<BuiltinData> {
+ public:
+  BuiltinTest() = default;
+  ~BuiltinTest() override = default;
+
+  void SetUp() override { ctx_.Reset(); }
+
+  void TearDown() override { impl_ = nullptr; }
+
+  ParserImpl* parser(const std::string& str) {
+    impl_ = std::make_unique<ParserImpl>(&ctx_, str);
+    return impl_.get();
+  }
+
+ private:
+  std::unique_ptr<ParserImpl> impl_;
+  Context ctx_;
+};
+
+TEST_P(BuiltinTest, VariableDecoration_Builtin) {
+  auto params = GetParam();
+  auto* p = parser(std::string("builtin ") + params.input);
+
   auto deco = p->variable_decoration();
-  ASSERT_FALSE(p->has_error());
+  ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(deco, nullptr);
   ASSERT_TRUE(deco->IsBuiltin());
 
   auto* builtin = deco->AsBuiltin();
-  EXPECT_EQ(builtin->value(), ast::Builtin::kFragDepth);
+  EXPECT_EQ(builtin->value(), params.result);
 }
+INSTANTIATE_TEST_SUITE_P(
+    ParserImplTest,
+    BuiltinTest,
+    testing::Values(
+        BuiltinData{"position", ast::Builtin::kPosition},
+        BuiltinData{"vertex_idx", ast::Builtin::kVertexIdx},
+        BuiltinData{"instance_idx", ast::Builtin::kInstanceIdx},
+        BuiltinData{"front_facing", ast::Builtin::kFrontFacing},
+        BuiltinData{"frag_coord", ast::Builtin::kFragCoord},
+        BuiltinData{"frag_depth", ast::Builtin::kFragDepth},
+        BuiltinData{"num_workgroups", ast::Builtin::kNumWorkgroups},
+        BuiltinData{"workgroup_size", ast::Builtin::kWorkgroupSize},
+        BuiltinData{"local_invocation_id", ast::Builtin::kLocalInvocationId},
+        BuiltinData{"local_invocation_idx", ast::Builtin::kLocalInvocationIdx},
+        BuiltinData{"global_invocation_id",
+                    ast::Builtin::kGlobalInvocationId}));
 
 TEST_F(ParserImplTest, VariableDecoration_Builtin_MissingValue) {
   auto* p = parser("builtin");
   auto deco = p->variable_decoration();
   ASSERT_EQ(deco, nullptr);
   ASSERT_TRUE(p->has_error());
-  EXPECT_EQ(p->error(), "1:8: invalid value for builtin decoration");
+  EXPECT_EQ(p->error(), "1:8: expected identifier for builtin");
+}
+
+
+TEST_F(ParserImplTest, VariableDecoration_Builtin_InvalidValue) {
+  auto* p = parser("builtin other_thingy");
+  auto deco = p->variable_decoration();
+  ASSERT_EQ(deco, nullptr);
+  ASSERT_TRUE(p->has_error());
+  EXPECT_EQ(p->error(), "1:9: invalid value for builtin decoration");
 }
 
 TEST_F(ParserImplTest, VariableDecoration_Builtin_MissingInvalid) {
@@ -76,7 +130,7 @@
   auto deco = p->variable_decoration();
   ASSERT_EQ(deco, nullptr);
   ASSERT_TRUE(p->has_error());
-  EXPECT_EQ(p->error(), "1:9: invalid value for builtin decoration");
+  EXPECT_EQ(p->error(), "1:9: expected identifier for builtin");
 }
 
 TEST_F(ParserImplTest, VariableDecoration_Binding) {
diff --git a/src/reader/wgsl/token.cc b/src/reader/wgsl/token.cc
index 0d78a9c..300fbe4 100644
--- a/src/reader/wgsl/token.cc
+++ b/src/reader/wgsl/token.cc
@@ -161,20 +161,12 @@
       return "fine";
     case Token::Type::kFn:
       return "fn";
-    case Token::Type::kFragCoord:
-      return "frag_coord";
-    case Token::Type::kFragDepth:
-      return "frag_depth";
     case Token::Type::kFragment:
       return "fragment";
-    case Token::Type::kFrontFacing:
-      return "front_facing";
     case Token::Type::kFunction:
       return "function";
     case Token::Type::kFwidth:
       return "fwidth";
-    case Token::Type::kGlobalInvocationId:
-      return "global_invocation_id";
     case Token::Type::kI32:
       return "i32";
     case Token::Type::kIf:
@@ -185,8 +177,6 @@
       return "import";
     case Token::Type::kIn:
       return "in";
-    case Token::Type::kInstanceIdx:
-      return "instance_idx";
     case Token::Type::kIsNan:
       return "is_nan";
     case Token::Type::kIsInf:
@@ -197,10 +187,6 @@
       return "is_normal";
     case Token::Type::kKill:
       return "kill";
-    case Token::Type::kLocalInvocationId:
-      return "local_invocation_id";
-    case Token::Type::kLocalInvocationIdx:
-      return "local_invocation_idx";
     case Token::Type::kLocation:
       return "location";
     case Token::Type::kLoop:
@@ -223,16 +209,12 @@
       return "mat4x3";
     case Token::Type::kMat4x4:
       return "mat4x4";
-    case Token::Type::kNumWorkgroups:
-      return "num_workgroups";
     case Token::Type::kOffset:
       return "offset";
     case Token::Type::kOut:
       return "out";
     case Token::Type::kOuterProduct:
       return "outer_product";
-    case Token::Type::kPosition:
-      return "position";
     case Token::Type::kPremerge:
       return "premerge";
     case Token::Type::kPrivate:
@@ -273,14 +255,10 @@
       return "vec4";
     case Token::Type::kVertex:
       return "vertex";
-    case Token::Type::kVertexIdx:
-      return "vertex_idx";
     case Token::Type::kVoid:
       return "void";
     case Token::Type::kWorkgroup:
       return "workgroup";
-    case Token::Type::kWorkgroupSize:
-      return "workgroup_size";
   }
 
   return "<unknown>";
diff --git a/src/reader/wgsl/token.h b/src/reader/wgsl/token.h
index 1953f6f..53a37cd 100644
--- a/src/reader/wgsl/token.h
+++ b/src/reader/wgsl/token.h
@@ -172,20 +172,12 @@
     kFine,
     /// A 'fn'
     kFn,
-    /// A 'frag_coord'
-    kFragCoord,
-    // A 'frag_depth'
-    kFragDepth,
     /// A 'fragment'
     kFragment,
-    /// A 'front_facing'
-    kFrontFacing,
     /// A 'function'
     kFunction,
     /// A 'fwidth'
     kFwidth,
-    /// A 'global_invocation_id'
-    kGlobalInvocationId,
     /// A 'i32'
     kI32,
     /// A 'if'
@@ -196,8 +188,6 @@
     kImport,
     /// A 'in'
     kIn,
-    /// A 'instance_idx'
-    kInstanceIdx,
     /// A 'is_nan'
     kIsNan,
     /// A 'is_inf'
@@ -208,10 +198,6 @@
     kIsNormal,
     /// A 'kill'
     kKill,
-    /// A 'local_invocation_id'
-    kLocalInvocationId,
-    /// A 'local_invocation_idx'
-    kLocalInvocationIdx,
     /// A 'location'
     kLocation,
     /// A 'loop'
@@ -234,16 +220,12 @@
     kMat4x3,
     /// A 'mat4x4'
     kMat4x4,
-    /// A 'num_workgroups'
-    kNumWorkgroups,
     /// A 'offset'
     kOffset,
     /// A 'out'
     kOut,
     /// A 'outer_product'
     kOuterProduct,
-    /// A 'position'
-    kPosition,
     /// A 'premerge'
     kPremerge,
     /// A 'private'
@@ -284,14 +266,10 @@
     kVec4,
     /// A 'vertex'
     kVertex,
-    /// A 'vertex_idx'
-    kVertexIdx,
     /// A 'void'
     kVoid,
     /// A 'workgroup'
-    kWorkgroup,
-    /// A 'workgroup_size'
-    kWorkgroupSize
+    kWorkgroup
   };
 
   /// Converts a token type to a name
@@ -479,22 +457,12 @@
   bool IsFine() const { return type_ == Type::kFine; }
   /// @returns true if token is a 'fn'
   bool IsFn() const { return type_ == Type::kFn; }
-  /// @returns true if token is a 'frag_coord'
-  bool IsFragCoord() const { return type_ == Type::kFragCoord; }
-  /// @returns true if token is a 'frag_depth'
-  bool IsFragDepth() const { return type_ == Type::kFragDepth; }
   /// @returns true if token is a 'fragment'
   bool IsFragment() const { return type_ == Type::kFragment; }
-  /// @returns true if token is a 'front_facing'
-  bool IsFrontFacing() const { return type_ == Type::kFrontFacing; }
   /// @returns true if token is a 'function'
   bool IsFunction() const { return type_ == Type::kFunction; }
   /// @returns true if token is a 'fwidth'
   bool IsFwidth() const { return type_ == Type::kFwidth; }
-  /// @returns true if token is a 'global_invocation_id'
-  bool IsGlobalInvocationId() const {
-    return type_ == Type::kGlobalInvocationId;
-  }
   /// @returns true if token is a 'i32'
   bool IsI32() const { return type_ == Type::kI32; }
   /// @returns true if token is a 'if'
@@ -505,8 +473,6 @@
   bool IsImport() const { return type_ == Type::kImport; }
   /// @returns true if token is a 'in'
   bool IsIn() const { return type_ == Type::kIn; }
-  /// @returns true if token is a 'instance_idx'
-  bool IsInstanceIdx() const { return type_ == Type::kInstanceIdx; }
   /// @returns true if token is a 'is_nan'
   bool IsIsNan() const { return type_ == Type::kIsNan; }
   /// @returns true if token is a 'is_inf'
@@ -517,12 +483,6 @@
   bool IsIsNormal() const { return type_ == Type::kIsNormal; }
   /// @returns true if token is a 'kill'
   bool IsKill() const { return type_ == Type::kKill; }
-  /// @returns true if token is a 'local_invocation_id'
-  bool IsLocalInvocationId() const { return type_ == Type::kLocalInvocationId; }
-  /// @returns true if token is a 'local_invocation_idx'
-  bool IsLocalInvocationIdx() const {
-    return type_ == Type::kLocalInvocationIdx;
-  }
   /// @returns true if token is a 'location'
   bool IsLocation() const { return type_ == Type::kLocation; }
   /// @returns true if token is a 'loop'
@@ -545,16 +505,12 @@
   bool IsMat4x3() const { return type_ == Type::kMat4x3; }
   /// @returns true if token is a 'mat4x4'
   bool IsMat4x4() const { return type_ == Type::kMat4x4; }
-  /// @returns true if token is a 'num_workgroups'
-  bool IsNumWorkgroups() const { return type_ == Type::kNumWorkgroups; }
   /// @returns true if token is a 'offset'
   bool IsOffset() const { return type_ == Type::kOffset; }
   /// @returns true if token is a 'out'
   bool IsOut() const { return type_ == Type::kOut; }
   /// @returns true if token is a 'outer_product'
   bool IsOuterProduct() const { return type_ == Type::kOuterProduct; }
-  /// @returns true if token is a 'position'
-  bool IsPosition() const { return type_ == Type::kPosition; }
   /// @returns true if token is a 'private'
   bool IsPrivate() const { return type_ == Type::kPrivate; }
   /// @returns true if token is a 'ptr'
@@ -591,14 +547,10 @@
   bool IsVec4() const { return type_ == Type::kVec4; }
   /// @returns true if token is a 'vertex'
   bool IsVertex() const { return type_ == Type::kVertex; }
-  /// @returns true if token is a 'vertex_idx'
-  bool IsVertexIdx() const { return type_ == Type::kVertexIdx; }
   /// @returns true if token is a 'void'
   bool IsVoid() const { return type_ == Type::kVoid; }
   /// @returns true if token is a 'workgroup'
   bool IsWorkgroup() const { return type_ == Type::kWorkgroup; }
-  /// @returns true if token is a 'workgroup_size'
-  bool IsWorkgroupSize() const { return type_ == Type::kWorkgroupSize; }
 
   /// @returns the source line of the token
   size_t line() const { return source_.line; }
