diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc
index 1aa16db..cac4b4e 100644
--- a/src/reader/wgsl/parser_impl.cc
+++ b/src/reader/wgsl/parser_impl.cc
@@ -322,18 +322,6 @@
   return last_token_;
 }
 
-void ParserImpl::register_type(const std::string& name,
-                               const ast::TypeDecl* type_decl) {
-  registered_types_[name] = type_decl;
-}
-
-const ast::TypeDecl* ParserImpl::get_type(const std::string& name) {
-  if (registered_types_.find(name) == registered_types_.end()) {
-    return nullptr;
-  }
-  return registered_types_[name];
-}
-
 bool ParserImpl::Parse() {
   translation_unit();
   return !has_error();
@@ -419,7 +407,6 @@
       if (!expect("struct declaration", Token::Type::kSemicolon))
         return Failure::kErrored;
 
-      register_type(builder_.Symbols().NameFor(str.value->name), str.value);
       builder_.AST().AddTypeDecl(str.value);
       return true;
     }
@@ -1006,10 +993,8 @@
   if (!type.matched)
     return add_error(peek(), "invalid type alias");
 
-  auto* alias = builder_.ty.alias(make_source_range_from(t.source()),
-                                  name.value, type.value);
-  register_type(name.value, alias);
-  return alias;
+  return builder_.ty.alias(make_source_range_from(t.source()), name.value,
+                           type.value);
 }
 
 // type_decl
@@ -1059,11 +1044,6 @@
   auto t = peek();
   Source source;
   if (match(Token::Type::kIdentifier, &source)) {
-    // TODO(crbug.com/tint/697): Remove
-    auto* ty = get_type(t.to_str());
-    if (ty == nullptr)
-      return add_error(t, "unknown type '" + t.to_str() + "'");
-
     return builder_.create<ast::TypeName>(
         source, builder_.Symbols().Register(t.to_str()));
   }
@@ -2212,7 +2192,7 @@
     return create<ast::BitcastExpression>(source, type.value, params.value);
   }
 
-  if (t.IsIdentifier() && !get_type(t.to_str())) {
+  if (t.IsIdentifier()) {
     next();
 
     auto* ident = create<ast::IdentifierExpression>(
@@ -2890,40 +2870,40 @@
       return add_error(peek(), "unable to parse constant literal");
     }
     return lit.value;
-  } else if (!t.IsIdentifier() || get_type(t.to_str())) {
-    if (peek_is(Token::Type::kParenLeft, 1) ||
-        peek_is(Token::Type::kLessThan, 1)) {
-      auto type = expect_type("const_expr");
-      if (type.errored) {
-        return Failure::kErrored;
-      }
+  }
 
-      auto params = expect_paren_block(
-          "type constructor", [&]() -> Expect<ast::ExpressionList> {
-            ast::ExpressionList list;
-            while (continue_parsing()) {
-              if (peek_is(Token::Type::kParenRight)) {
-                break;
-              }
-
-              auto arg = expect_const_expr();
-              if (arg.errored) {
-                return Failure::kErrored;
-              }
-              list.emplace_back(arg.value);
-
-              if (!match(Token::Type::kComma)) {
-                break;
-              }
-            }
-            return list;
-          });
-
-      if (params.errored)
-        return Failure::kErrored;
-
-      return builder_.Construct(source, type.value, params.value);
+  if (peek_is(Token::Type::kParenLeft, 1) ||
+      peek_is(Token::Type::kLessThan, 1)) {
+    auto type = expect_type("const_expr");
+    if (type.errored) {
+      return Failure::kErrored;
     }
+
+    auto params = expect_paren_block(
+        "type constructor", [&]() -> Expect<ast::ExpressionList> {
+          ast::ExpressionList list;
+          while (continue_parsing()) {
+            if (peek_is(Token::Type::kParenRight)) {
+              break;
+            }
+
+            auto arg = expect_const_expr();
+            if (arg.errored) {
+              return Failure::kErrored;
+            }
+            list.emplace_back(arg.value);
+
+            if (!match(Token::Type::kComma)) {
+              break;
+            }
+          }
+          return list;
+        });
+
+    if (params.errored)
+      return Failure::kErrored;
+
+    return builder_.Construct(source, type.value, params.value);
   }
   return add_error(peek(), "unable to parse const_expr");
 }
diff --git a/src/reader/wgsl/parser_impl.h b/src/reader/wgsl/parser_impl.h
index 26601c4..e059f09 100644
--- a/src/reader/wgsl/parser_impl.h
+++ b/src/reader/wgsl/parser_impl.h
@@ -380,17 +380,6 @@
   /// @param source the source to associate the error with
   /// @param msg the warning message
   void deprecated(const Source& source, const std::string& msg);
-  /// Registers a declared type into the parser
-  /// TODO(crbug.com/tint/724): Remove
-  /// @param name the type name
-  /// @param type_decl the type declaration
-  void register_type(const std::string& name, const ast::TypeDecl* type_decl);
-  /// Retrieves a declared type
-  /// TODO(crbug.com/tint/724): Remove
-  /// @param name The name to lookup
-  /// @returns the declared type for `name` or `nullptr` if not found
-  const ast::TypeDecl* get_type(const std::string& name);
-
   /// Parses the `translation_unit` grammar element
   void translation_unit();
   /// Parses the `global_decl` grammar element, erroring on parse failure.
@@ -893,7 +882,6 @@
   uint32_t parse_depth_ = 0;
   std::vector<Token::Type> sync_tokens_;
   int silence_errors_ = 0;
-  std::unordered_map<std::string, const ast::TypeDecl*> registered_types_;
   ProgramBuilder builder_;
   size_t max_errors_ = 25;
 };
diff --git a/src/reader/wgsl/parser_impl_const_expr_test.cc b/src/reader/wgsl/parser_impl_const_expr_test.cc
index e31763f..9d3dab8 100644
--- a/src/reader/wgsl/parser_impl_const_expr_test.cc
+++ b/src/reader/wgsl/parser_impl_const_expr_test.cc
@@ -124,25 +124,17 @@
   EXPECT_EQ(p->error(), "1:1: unable to parse const_expr");
 }
 
-TEST_F(ParserImplTest, ConstExpr_RegisteredType) {
+TEST_F(ParserImplTest, ConstExpr_TypeConstructor) {
   auto p = parser("S(0)");
 
-  auto* mem = Member("m", ty.i32(), ast::DecorationList{});
-  auto* s = Structure(Sym("S"), {mem});
-  p->register_type("S", s);
-
   auto e = p->expect_const_expr();
   ASSERT_FALSE(e.errored);
   ASSERT_TRUE(e->Is<ast::CallExpression>());
-}
-
-TEST_F(ParserImplTest, ConstExpr_NotRegisteredType) {
-  auto p = parser("S(0)");
-  auto e = p->expect_const_expr();
-  ASSERT_TRUE(p->has_error());
-  ASSERT_TRUE(e.errored);
-  ASSERT_EQ(e.value, nullptr);
-  EXPECT_EQ(p->error(), "1:1: unable to parse const_expr");
+  ASSERT_NE(e->As<ast::CallExpression>()->target.type, nullptr);
+  ASSERT_TRUE(e->As<ast::CallExpression>()->target.type->Is<ast::TypeName>());
+  EXPECT_EQ(
+      e->As<ast::CallExpression>()->target.type->As<ast::TypeName>()->name,
+      p->builder().Symbols().Get("S"));
 }
 
 TEST_F(ParserImplTest, ConstExpr_Recursion) {
diff --git a/src/reader/wgsl/parser_impl_error_msg_test.cc b/src/reader/wgsl/parser_impl_error_msg_test.cc
index 132e143..a224585 100644
--- a/src/reader/wgsl/parser_impl_error_msg_test.cc
+++ b/src/reader/wgsl/parser_impl_error_msg_test.cc
@@ -494,22 +494,6 @@
       "        ^\n");
 }
 
-TEST_F(ParserImplErrorTest, GlobalDeclConstNotConstExprWithParn) {
-  EXPECT(
-      "let a = 1;\n"
-      "let b = a();",
-      "test.wgsl:2:9 error: unable to parse const_expr\n"
-      "let b = a();\n"
-      "        ^\n");
-}
-
-TEST_F(ParserImplErrorTest, GlobalDeclConstConstExprRegisteredType) {
-  EXPECT("let a = S0(0);",
-         "test.wgsl:1:9 error: unable to parse const_expr\n"
-         "let a = S0(0);\n"
-         "        ^^\n");
-}
-
 TEST_F(ParserImplErrorTest, GlobalDeclConstExprMaxDepth) {
   uint32_t kMaxDepth = 128;
 
@@ -784,13 +768,6 @@
          "               ^\n");
 }
 
-TEST_F(ParserImplErrorTest, GlobalDeclTypeInvalid) {
-  EXPECT("var x : fish;",
-         "test.wgsl:1:9 error: unknown type 'fish'\n"
-         "var x : fish;\n"
-         "        ^^^^\n");
-}
-
 TEST_F(ParserImplErrorTest, GlobalDeclTypeDecoInvalid) {
   EXPECT("var x : [[]] i32;",
          "test.wgsl:1:11 error: empty decoration list\n"
diff --git a/src/reader/wgsl/parser_impl_function_header_test.cc b/src/reader/wgsl/parser_impl_function_header_test.cc
index b17581e..369e8d0 100644
--- a/src/reader/wgsl/parser_impl_function_header_test.cc
+++ b/src/reader/wgsl/parser_impl_function_header_test.cc
@@ -141,15 +141,6 @@
   EXPECT_EQ(p->error(), "1:10: expected ')' for function declaration");
 }
 
-TEST_F(ParserImplTest, FunctionHeader_InvalidReturnType) {
-  auto p = parser("fn main() -> invalid");
-  auto f = p->function_header();
-  EXPECT_FALSE(f.matched);
-  EXPECT_TRUE(f.errored);
-  EXPECT_TRUE(p->has_error());
-  EXPECT_EQ(p->error(), "1:14: unknown type 'invalid'");
-}
-
 TEST_F(ParserImplTest, FunctionHeader_MissingReturnType) {
   auto p = parser("fn main() ->");
   auto f = p->function_header();
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 f77aa31..2c4cd54 100644
--- a/src/reader/wgsl/parser_impl_global_constant_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_global_constant_decl_test.cc
@@ -75,19 +75,6 @@
       ast::HasDecoration<ast::OverrideDecoration>(e.value->decorations));
 }
 
-TEST_F(ParserImplTest, GlobalConstantDecl_InvalidVariable) {
-  auto p = parser("let a : invalid = 1.");
-  auto decos = p->decoration_list();
-  EXPECT_FALSE(decos.errored);
-  EXPECT_FALSE(decos.matched);
-  auto e = p->global_constant_decl(decos.value);
-  EXPECT_TRUE(p->has_error());
-  EXPECT_TRUE(e.errored);
-  EXPECT_FALSE(e.matched);
-  EXPECT_EQ(e.value, nullptr);
-  EXPECT_EQ(p->error(), "1:9: unknown type 'invalid'");
-}
-
 TEST_F(ParserImplTest, GlobalConstantDecl_InvalidExpression) {
   auto p = parser("let a : f32 = if (a) {}");
   auto decos = p->decoration_list();
diff --git a/src/reader/wgsl/parser_impl_global_decl_test.cc b/src/reader/wgsl/parser_impl_global_decl_test.cc
index 8489fe6..97ec487 100644
--- a/src/reader/wgsl/parser_impl_global_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_global_decl_test.cc
@@ -44,13 +44,6 @@
   EXPECT_EQ(p->error(), "1:16: expected ':' for variable declaration");
 }
 
-TEST_F(ParserImplTest, GlobalDecl_GlobalVariable_Invalid) {
-  auto p = parser("var<private> a : vec2<invalid>;");
-  p->expect_global_decl();
-  ASSERT_TRUE(p->has_error());
-  EXPECT_EQ(p->error(), "1:23: unknown type 'invalid'");
-}
-
 TEST_F(ParserImplTest, GlobalDecl_GlobalVariable_MissingSemicolon) {
   auto p = parser("var<private> a : vec2<i32>");
   p->expect_global_decl();
@@ -120,13 +113,6 @@
   EXPECT_EQ(tn->name, str->name);
 }
 
-TEST_F(ParserImplTest, GlobalDecl_TypeAlias_Invalid) {
-  auto p = parser("type A = invalid;");
-  p->expect_global_decl();
-  ASSERT_TRUE(p->has_error());
-  EXPECT_EQ(p->error(), "1:10: unknown type 'invalid'");
-}
-
 TEST_F(ParserImplTest, GlobalDecl_TypeAlias_MissingSemicolon) {
   auto p = parser("type A = i32");
   p->expect_global_decl();
diff --git a/src/reader/wgsl/parser_impl_primary_expression_test.cc b/src/reader/wgsl/parser_impl_primary_expression_test.cc
index 0b5eac8..97fc0d1 100644
--- a/src/reader/wgsl/parser_impl_primary_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_primary_expression_test.cc
@@ -131,9 +131,8 @@
   ASSERT_TRUE(e->Is<ast::CallExpression>());
   auto* call = e->As<ast::CallExpression>();
 
-  ASSERT_TRUE(call->target.type->Is<ast::TypeName>());
-  EXPECT_EQ(call->target.type->As<ast::TypeName>()->name,
-            p->builder().Symbols().Get("S"));
+  ASSERT_NE(call->target.name, nullptr);
+  EXPECT_EQ(call->target.name->symbol, p->builder().Symbols().Get("S"));
 
   ASSERT_EQ(call->args.size(), 0u);
 }
@@ -156,9 +155,8 @@
   ASSERT_TRUE(e->Is<ast::CallExpression>());
   auto* call = e->As<ast::CallExpression>();
 
-  ASSERT_TRUE(call->target.type->Is<ast::TypeName>());
-  EXPECT_EQ(call->target.type->As<ast::TypeName>()->name,
-            p->builder().Symbols().Get("S"));
+  ASSERT_NE(call->target.name, nullptr);
+  EXPECT_EQ(call->target.name->symbol, p->builder().Symbols().Get("S"));
 
   ASSERT_EQ(call->args.size(), 2u);
 
@@ -273,16 +271,6 @@
   EXPECT_EQ(p->error(), "1:9: invalid type for bitcast expression");
 }
 
-TEST_F(ParserImplTest, PrimaryExpression_Bitcast_InvalidType) {
-  auto p = parser("bitcast<invalid>(1)");
-  auto e = p->primary_expression();
-  EXPECT_FALSE(e.matched);
-  EXPECT_TRUE(e.errored);
-  EXPECT_EQ(e.value, nullptr);
-  ASSERT_TRUE(p->has_error());
-  EXPECT_EQ(p->error(), "1:9: unknown type 'invalid'");
-}
-
 TEST_F(ParserImplTest, PrimaryExpression_Bitcast_MissingLeftParen) {
   auto p = parser("bitcast<f32>1)");
   auto e = p->primary_expression();
diff --git a/src/reader/wgsl/parser_impl_struct_decl_test.cc b/src/reader/wgsl/parser_impl_struct_decl_test.cc
index e7c4e9f..4f041b5 100644
--- a/src/reader/wgsl/parser_impl_struct_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_decl_test.cc
@@ -139,22 +139,6 @@
   EXPECT_EQ(p->error(), "1:10: expected '{' for struct declaration");
 }
 
-TEST_F(ParserImplTest, StructDecl_InvalidStructBody) {
-  auto p = parser("struct S { a : B; }");
-  auto decos = p->decoration_list();
-  EXPECT_FALSE(decos.errored);
-  EXPECT_FALSE(decos.matched);
-  ASSERT_EQ(decos.value.size(), 0u);
-
-  auto s = p->struct_decl(decos.value);
-  EXPECT_TRUE(s.errored);
-  EXPECT_FALSE(s.matched);
-  EXPECT_EQ(s.value, nullptr);
-
-  EXPECT_TRUE(p->has_error());
-  EXPECT_EQ(p->error(), "1:16: unknown type 'B'");
-}
-
 TEST_F(ParserImplTest, StructDecl_InvalidDecorationDecl) {
   auto p = parser("[[block struct S { a : i32; }");
   auto decos = p->decoration_list();
diff --git a/src/reader/wgsl/parser_impl_struct_member_test.cc b/src/reader/wgsl/parser_impl_struct_member_test.cc
index 8a514ac..0f0f980 100644
--- a/src/reader/wgsl/parser_impl_struct_member_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_member_test.cc
@@ -162,19 +162,6 @@
             "1:8: expected signed integer literal for size decoration");
 }
 
-TEST_F(ParserImplTest, StructMember_InvalidVariable) {
-  auto p = parser("[[size(4)]] a : B;");
-  auto decos = p->decoration_list();
-  EXPECT_FALSE(decos.errored);
-  EXPECT_TRUE(decos.matched);
-
-  auto m = p->expect_struct_member(decos.value);
-  ASSERT_TRUE(p->has_error());
-  ASSERT_TRUE(m.errored);
-  ASSERT_EQ(m.value, nullptr);
-  EXPECT_EQ(p->error(), "1:17: unknown type 'B'");
-}
-
 TEST_F(ParserImplTest, StructMember_MissingSemicolon) {
   auto p = parser("a : i32");
   auto decos = p->decoration_list();
diff --git a/src/reader/wgsl/parser_impl_test.cc b/src/reader/wgsl/parser_impl_test.cc
index 4573ede..c354fc8 100644
--- a/src/reader/wgsl/parser_impl_test.cc
+++ b/src/reader/wgsl/parser_impl_test.cc
@@ -105,21 +105,6 @@
   ASSERT_EQ(1u, p->program().AST().Functions().size());
 }
 
-TEST_F(ParserImplTest, GetRegisteredType) {
-  auto p = parser("");
-  auto* alias = create<ast::Alias>(Sym("my_alias"), ty.i32());
-  p->register_type("my_alias", alias);
-
-  auto* got = p->get_type("my_alias");
-  EXPECT_EQ(got, alias);
-}
-
-TEST_F(ParserImplTest, GetUnregisteredType) {
-  auto p = parser("");
-  auto* alias = p->get_type("my_alias");
-  ASSERT_EQ(alias, nullptr);
-}
-
 }  // namespace
 }  // namespace wgsl
 }  // namespace reader
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 970e430..fbd8127 100644
--- a/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
+++ b/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
@@ -110,16 +110,6 @@
   EXPECT_EQ(t.value->source.range, (Source::Range{{1u, 1u}, {1u, 16u}}));
 }
 
-TEST_F(ParserImplTest, TextureSamplerTypes_SampledTexture_Invalid) {
-  auto p = parser("texture_1d<abc>");
-  auto t = p->texture_sampler_types();
-  ASSERT_TRUE(p->has_error());
-  EXPECT_EQ(t.value, nullptr);
-  EXPECT_FALSE(t.matched);
-  EXPECT_TRUE(t.errored);
-  EXPECT_EQ(p->error(), "1:12: unknown type 'abc'");
-}
-
 TEST_F(ParserImplTest, TextureSamplerTypes_SampledTexture_MissingType) {
   auto p = parser("texture_1d<>");
   auto t = p->texture_sampler_types();
@@ -164,16 +154,6 @@
   EXPECT_EQ(t.value->source.range, (Source::Range{{1u, 1u}, {1u, 29u}}));
 }
 
-TEST_F(ParserImplTest, TextureSamplerTypes_MultisampledTexture_Invalid) {
-  auto p = parser("texture_multisampled_2d<abc>");
-  auto t = p->texture_sampler_types();
-  ASSERT_TRUE(p->has_error());
-  EXPECT_EQ(t.value, nullptr);
-  EXPECT_FALSE(t.matched);
-  EXPECT_TRUE(t.errored);
-  EXPECT_EQ(p->error(), "1:25: unknown type 'abc'");
-}
-
 TEST_F(ParserImplTest, TextureSamplerTypes_MultisampledTexture_MissingType) {
   auto p = parser("texture_multisampled_2d<>");
   auto t = p->texture_sampler_types();
diff --git a/src/reader/wgsl/parser_impl_type_alias_test.cc b/src/reader/wgsl/parser_impl_type_alias_test.cc
index 5f1e03d..45e2e32 100644
--- a/src/reader/wgsl/parser_impl_type_alias_test.cc
+++ b/src/reader/wgsl/parser_impl_type_alias_test.cc
@@ -37,9 +37,6 @@
 TEST_F(ParserImplTest, TypeDecl_ParsesStruct_Ident) {
   auto p = parser("type a = B");
 
-  auto* str = p->builder().Structure(p->builder().Symbols().Register("B"), {});
-  p->register_type("B", str);
-
   auto t = p->type_alias();
   EXPECT_FALSE(p->has_error());
   EXPECT_FALSE(t.errored);
@@ -82,16 +79,6 @@
   EXPECT_EQ(p->error(), "1:8: expected '=' for type alias");
 }
 
-TEST_F(ParserImplTest, TypeDecl_InvalidType) {
-  auto p = parser("type a = B");
-  auto t = p->type_alias();
-  EXPECT_TRUE(t.errored);
-  EXPECT_FALSE(t.matched);
-  EXPECT_TRUE(p->has_error());
-  EXPECT_EQ(t.value, nullptr);
-  EXPECT_EQ(p->error(), "1:10: unknown type 'B'");
-}
-
 }  // namespace
 }  // namespace wgsl
 }  // namespace reader
diff --git a/src/reader/wgsl/parser_impl_type_decl_test.cc b/src/reader/wgsl/parser_impl_type_decl_test.cc
index 17c3b20..d08a23d 100644
--- a/src/reader/wgsl/parser_impl_type_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_type_decl_test.cc
@@ -36,10 +36,6 @@
 TEST_F(ParserImplTest, TypeDecl_Identifier) {
   auto p = parser("A");
 
-  auto& builder = p->builder();
-  auto* alias_type = builder.ty.alias("A", builder.ty.i32());
-  p->register_type("A", alias_type);
-
   auto t = p->type_decl();
   EXPECT_TRUE(t.matched);
   EXPECT_FALSE(t.errored);
@@ -50,17 +46,6 @@
   EXPECT_EQ(type_name->source.range, (Source::Range{{1u, 1u}, {1u, 2u}}));
 }
 
-TEST_F(ParserImplTest, TypeDecl_Identifier_NotFound) {
-  auto p = parser("B");
-
-  auto t = p->type_decl();
-  EXPECT_TRUE(t.errored);
-  EXPECT_FALSE(t.matched);
-  ASSERT_EQ(t.value, nullptr);
-  EXPECT_TRUE(p->has_error());
-  EXPECT_EQ(p->error(), "1:1: unknown type 'B'");
-}
-
 TEST_F(ParserImplTest, TypeDecl_Bool) {
   auto p = parser("bool");
 
@@ -172,24 +157,6 @@
                                          VecData{"vec3", 3, {}},
                                          VecData{"vec4", 4, {}}));
 
-class VecBadType : public ParserImplTestWithParam<VecData> {};
-
-TEST_P(VecBadType, Handles_Unknown_Type) {
-  auto params = GetParam();
-  auto p = parser(params.input);
-  auto t = p->type_decl();
-  EXPECT_TRUE(t.errored);
-  EXPECT_FALSE(t.matched);
-  ASSERT_EQ(t.value, nullptr);
-  ASSERT_TRUE(p->has_error());
-  ASSERT_EQ(p->error(), "1:6: unknown type 'unknown'");
-}
-INSTANTIATE_TEST_SUITE_P(ParserImplTest,
-                         VecBadType,
-                         testing::Values(VecData{"vec2<unknown", 2, {}},
-                                         VecData{"vec3<unknown", 3, {}},
-                                         VecData{"vec4<unknown", 4, {}}));
-
 class VecMissingType : public ParserImplTestWithParam<VecData> {};
 
 TEST_P(VecMissingType, Handles_Missing_Type) {
@@ -358,16 +325,6 @@
   ASSERT_EQ(p->error(), "1:5: invalid storage class for ptr declaration");
 }
 
-TEST_F(ParserImplTest, TypeDecl_Ptr_BadType) {
-  auto p = parser("ptr<function, unknown>");
-  auto t = p->type_decl();
-  EXPECT_TRUE(t.errored);
-  EXPECT_FALSE(t.matched);
-  ASSERT_EQ(t.value, nullptr);
-  ASSERT_TRUE(p->has_error());
-  ASSERT_EQ(p->error(), "1:15: unknown type 'unknown'");
-}
-
 TEST_F(ParserImplTest, TypeDecl_Ptr_BadAccess) {
   auto p = parser("ptr<function, i32, unknown>");
   auto t = p->type_decl();
@@ -702,16 +659,6 @@
   EXPECT_EQ(t.value->source.range, (Source::Range{{1u, 1u}, {1u, 17u}}));
 }
 
-TEST_F(ParserImplTest, TypeDecl_Array_BadType) {
-  auto p = parser("array<unknown, 3>");
-  auto t = p->type_decl();
-  EXPECT_TRUE(t.errored);
-  EXPECT_FALSE(t.matched);
-  ASSERT_EQ(t.value, nullptr);
-  ASSERT_TRUE(p->has_error());
-  ASSERT_EQ(p->error(), "1:7: unknown type 'unknown'");
-}
-
 TEST_F(ParserImplTest, TypeDecl_Array_BadSize) {
   auto p = parser("array<f32, !>");
   auto t = p->type_decl();
@@ -851,31 +798,6 @@
                                          MatrixData{"mat4x3 f32>", 4, 3, {}},
                                          MatrixData{"mat4x4 f32>", 4, 4, {}}));
 
-class MatrixBadType : public ParserImplTestWithParam<MatrixData> {};
-
-TEST_P(MatrixBadType, Handles_Unknown_Type) {
-  auto params = GetParam();
-  auto p = parser(params.input);
-  auto t = p->type_decl();
-  EXPECT_TRUE(t.errored);
-  EXPECT_FALSE(t.matched);
-  ASSERT_EQ(t.value, nullptr);
-  ASSERT_TRUE(p->has_error());
-  ASSERT_EQ(p->error(), "1:8: unknown type 'unknown'");
-}
-INSTANTIATE_TEST_SUITE_P(
-    ParserImplTest,
-    MatrixBadType,
-    testing::Values(MatrixData{"mat2x2<unknown>", 2, 2, {}},
-                    MatrixData{"mat2x3<unknown>", 2, 3, {}},
-                    MatrixData{"mat2x4<unknown>", 2, 4, {}},
-                    MatrixData{"mat3x2<unknown>", 3, 2, {}},
-                    MatrixData{"mat3x3<unknown>", 3, 3, {}},
-                    MatrixData{"mat3x4<unknown>", 3, 4, {}},
-                    MatrixData{"mat4x2<unknown>", 4, 2, {}},
-                    MatrixData{"mat4x3<unknown>", 4, 3, {}},
-                    MatrixData{"mat4x4<unknown>", 4, 4, {}}));
-
 class MatrixMissingType : public ParserImplTestWithParam<MatrixData> {};
 
 TEST_P(MatrixMissingType, Handles_Missing_Type) {
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 0cf6a31..489463e 100644
--- a/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc
@@ -76,14 +76,6 @@
   ASSERT_EQ(p->error(), "1:1: expected identifier for test");
 }
 
-TEST_F(ParserImplTest, VariableIdentDecl_InvalidType) {
-  auto p = parser("my_var : invalid");
-  auto decl = p->expect_variable_ident_decl("test");
-  ASSERT_TRUE(p->has_error());
-  ASSERT_TRUE(decl.errored);
-  ASSERT_EQ(p->error(), "1:10: unknown type 'invalid'");
-}
-
 TEST_F(ParserImplTest, VariableIdentDecl_NonAccessDecoFail) {
   auto p = parser("my_var : [[stride(1)]] S");
 
@@ -95,10 +87,6 @@
   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);
diff --git a/src/reader/wgsl/parser_impl_variable_stmt_test.cc b/src/reader/wgsl/parser_impl_variable_stmt_test.cc
index 1d5748a..74f51f3 100644
--- a/src/reader/wgsl/parser_impl_variable_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_stmt_test.cc
@@ -58,16 +58,6 @@
   EXPECT_TRUE(e->variable->constructor->Is<ast::LiteralExpression>());
 }
 
-TEST_F(ParserImplTest, VariableStmt_VariableDecl_Invalid) {
-  auto p = parser("var a : invalid;");
-  auto e = p->variable_stmt();
-  EXPECT_FALSE(e.matched);
-  EXPECT_TRUE(e.errored);
-  EXPECT_EQ(e.value, nullptr);
-  EXPECT_TRUE(p->has_error());
-  EXPECT_EQ(p->error(), "1:9: unknown type 'invalid'");
-}
-
 TEST_F(ParserImplTest, VariableStmt_VariableDecl_ConstructorInvalid) {
   auto p = parser("var a : i32 = if(a) {}");
   auto e = p->variable_stmt();
@@ -165,16 +155,6 @@
   ASSERT_EQ(e->source.range.end.column, 6u);
 }
 
-TEST_F(ParserImplTest, VariableStmt_Let_InvalidVarIdent) {
-  auto p = parser("let a : invalid = 1");
-  auto e = p->variable_stmt();
-  EXPECT_FALSE(e.matched);
-  EXPECT_TRUE(e.errored);
-  EXPECT_EQ(e.value, nullptr);
-  EXPECT_TRUE(p->has_error());
-  EXPECT_EQ(p->error(), "1:9: unknown type 'invalid'");
-}
-
 TEST_F(ParserImplTest, VariableStmt_Let_MissingEqual) {
   auto p = parser("let a : i32 1");
   auto e = p->variable_stmt();
