diff --git a/BUILD.gn b/BUILD.gn
index 27adc0f..5ee239f 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -22,7 +22,6 @@
 
 config("tint_common_config") {
   defines = []
-
   if (tint_build_spv_reader) {
     defines += [ "TINT_BUILD_SPV_READER=1" ]
   } else {
@@ -46,6 +45,144 @@
   } else {
     defines += [ "TINT_BUILD_WGSL_WRITER=0" ]
   }
+
+  include_dirs = [
+    "${target_gen_dir}",
+    "${tint_root_dir}/",
+    "${tint_spirv_headers_dir}/include",
+    "${tint_spirv_tools_dir}/",
+    "${tint_spirv_tools_dir}/include",
+  ]
+}
+
+###############################################################################
+# Generated - Generated source files
+###############################################################################
+# These are copies of rules from SPIRV-Tools with the names tweaked to be Tint
+# specific. They are needed here because referencing generated files in sibling
+# packages is difficult/impossible in Chromium. Parts of Tint's SPIRV handling
+# code depend on internal parts of SPIRV-Tools. This causes issues because when
+# Tint references the internal headers, since it causes a dependency on these
+# generated files, but they are not visible in the context building Tint. Thus
+# Tint generates its own copy of the generated files. Since they come from the
+# same source of truth, they should not vary.
+
+template("tint_core_tables") {
+  assert(defined(invoker.version), "Need version in $target_name generation.")
+
+  action("tint_core_tables_" + target_name) {
+    script = "${tint_spirv_tools_dir}/utils/generate_grammar_tables.py"
+
+    version = invoker.version
+
+    core_json_file = "${tint_spirv_headers_dir}/include/spirv/$version/spirv.core.grammar.json"
+    core_insts_file = "${target_gen_dir}/core.insts-$version.inc"
+    operand_kinds_file = "${target_gen_dir}/operand.kinds-$version.inc"
+    debuginfo_insts_file =
+        "${tint_spirv_tools_dir}/source/extinst.debuginfo.grammar.json"
+    cldebuginfo100_insts_file = "${tint_spirv_tools_dir}/source/extinst.opencl.debuginfo.100.grammar.json"
+
+    sources = [
+      cldebuginfo100_insts_file,
+      core_json_file,
+      debuginfo_insts_file,
+    ]
+    outputs = [
+      core_insts_file,
+      operand_kinds_file,
+    ]
+    args = [
+      "--spirv-core-grammar",
+      rebase_path(core_json_file, root_build_dir),
+      "--core-insts-output",
+      rebase_path(core_insts_file, root_build_dir),
+      "--extinst-debuginfo-grammar",
+      rebase_path(debuginfo_insts_file, root_build_dir),
+      "--extinst-cldebuginfo100-grammar",
+      rebase_path(cldebuginfo100_insts_file, root_build_dir),
+      "--operand-kinds-output",
+      rebase_path(operand_kinds_file, root_build_dir),
+    ]
+  }
+}
+
+template("tint_core_enums") {
+  assert(defined(invoker.version), "Need version in $target_name generation.")
+
+  action("tint_core_enums_" + target_name) {
+    script = "${tint_spirv_tools_dir}/utils/generate_grammar_tables.py"
+
+    version = invoker.version
+
+    core_json_file = "${tint_spirv_headers_dir}/include/spirv/$version/spirv.core.grammar.json"
+    debuginfo_insts_file =
+        "${tint_spirv_tools_dir}/source/extinst.debuginfo.grammar.json"
+    cldebuginfo100_insts_file = "${tint_spirv_tools_dir}/source/extinst.opencl.debuginfo.100.grammar.json"
+
+    extension_enum_file = "${target_gen_dir}/extension_enum.inc"
+    extension_map_file = "${target_gen_dir}/enum_string_mapping.inc"
+
+    args = [
+      "--spirv-core-grammar",
+      rebase_path(core_json_file, root_build_dir),
+      "--extinst-debuginfo-grammar",
+      rebase_path(debuginfo_insts_file, root_build_dir),
+      "--extinst-cldebuginfo100-grammar",
+      rebase_path(cldebuginfo100_insts_file, root_build_dir),
+      "--extension-enum-output",
+      rebase_path(extension_enum_file, root_build_dir),
+      "--enum-string-mapping-output",
+      rebase_path(extension_map_file, root_build_dir),
+    ]
+    inputs = [
+      core_json_file,
+      debuginfo_insts_file,
+      cldebuginfo100_insts_file,
+    ]
+    outputs = [
+      extension_enum_file,
+      extension_map_file,
+    ]
+  }
+}
+
+template("tint_language_header") {
+  assert(defined(invoker.name), "Need name in $target_name generation.")
+
+  action("tint_language_header_" + target_name) {
+    script = "${tint_spirv_tools_dir}/utils/generate_language_headers.py"
+
+    name = invoker.name
+    extinst_output_path = "${target_gen_dir}/${name}.h"
+
+    args = [
+      "--extinst-grammar",
+      rebase_path(invoker.grammar_file, root_build_dir),
+      "--extinst-output-path",
+      rebase_path(extinst_output_path, root_build_dir),
+    ]
+    inputs = [ invoker.grammar_file ]
+    outputs = [ "${extinst_output_path}" ]
+  }
+}
+
+tint_core_tables("unified1") {
+  version = "unified1"
+}
+
+tint_core_enums("unified1") {
+  version = "unified1"
+}
+
+tint_language_header("debuginfo") {
+  name = "DebugInfo"
+  grammar_file = "${tint_spirv_tools_dir}/source/extinst.debuginfo.grammar.json"
+}
+
+tint_language_header("cldebuginfo100") {
+  name = "OpenCLDebugInfo100"
+  grammar_file =
+      "${tint_spirv_tools_dir}/source/extinst.opencl.debuginfo.100.grammar.json"
 }
 
 ###############################################################################
@@ -223,6 +360,13 @@
     "src/writer/writer.h",
   ]
 
+  deps = [
+    ":tint_core_enums_unified1",
+    ":tint_core_tables_unified1",
+    ":tint_language_header_cldebuginfo100",
+    ":tint_language_header_debuginfo",
+  ]
+
   configs += [ ":tint_common_config" ]
 
   if (build_with_chromium) {
@@ -231,14 +375,6 @@
   }
 }
 
-config("libtint_spv_config") {
-  include_dirs = [
-    "${tint_spirv_tools_dir}/",
-    "${tint_spirv_tools_dir}/include",
-    "${target_gen_dir}/${tint_spirv_tools_gen}",
-  ]
-}
-
 source_set("libtint_spv_reader_src") {
   sources = [
     "src/reader/spirv/enum_converter.cc",
@@ -255,15 +391,15 @@
   ]
 
   deps = [
-    "${tint_spirv_headers_dir}/:spv_headers",
+    ":tint_core_enums_unified1",
+    ":tint_core_tables_unified1",
+    ":tint_language_header_cldebuginfo100",
+    ":tint_language_header_debuginfo",
     "${tint_spirv_tools_dir}/:spvtools_opt",
     "${tint_spirv_tools_dir}/:spvtools_val",
   ]
 
-  configs += [
-    ":tint_common_config",
-    ":libtint_spv_config",
-  ]
+  configs += [ ":tint_common_config" ]
 
   if (build_with_chromium) {
     configs -= [ "//build/config/compiler:chromium_code" ]
@@ -287,12 +423,7 @@
     "src/writer/spirv/operand.h",
   ]
 
-  deps = [ "${tint_spirv_headers_dir}/:spv_headers" ]
-
-  configs += [
-    ":tint_common_config",
-    ":libtint_spv_config",
-  ]
+  configs += [ ":tint_common_config" ]
 
   if (build_with_chromium) {
     configs -= [ "//build/config/compiler:chromium_code" ]
@@ -535,10 +666,7 @@
     "src/reader/spirv/spirv_tools_helpers_test.h",
   ]
 
-  deps = [ "${tint_spirv_headers_dir}/:spv_headers" ]
-
   configs += [
-    ":libtint_spv_config",
     ":tint_common_config",
     ":tint_unittests_config",
   ]
@@ -574,10 +702,8 @@
     "src/writer/spirv/spv_dump.cc",
     "src/writer/spirv/spv_dump.h",
   ]
-  deps = [ "${tint_spirv_headers_dir}/:spv_headers" ]
 
   configs += [
-    ":libtint_spv_config",
     ":tint_common_config",
     ":tint_unittests_config",
   ]
@@ -770,13 +896,35 @@
 }
 
 ###############################################################################
+# Fuzzers - Libfuzzer based fuzzing targets for Chromium
+###############################################################################
+# To run the fuzzers outside of Chromium, use the CMake based builds.
+
+if (build_with_chromium) {
+  import("//testing/libfuzzer/fuzzer_test.gni")
+
+  source_set("tint_wgsl_reader_fuzzer_src") {
+    sources = [ "fuzzers/tint_wgsl_reader_fuzzer.cc" ]
+    configs += [ ":tint_common_config" ]
+  }
+
+  fuzzer_test("tint_wgsl_reader_fuzzer") {
+    sources = []
+    deps = [
+      ":libtint",
+      ":tint_wgsl_reader_fuzzer_src",
+    ]
+  }
+}
+
+###############################################################################
 # Samples - Executables exposing command line functionality
 ###############################################################################
 
 config("tint_exe_config") {
   include_dirs = []
   if (tint_build_spv_reader || tint_build_spv_writer) {
-    include_dirs = [ "${tint_spirv_tools_dir}/include/" ]
+    include_dirs += [ "${tint_spirv_tools_dir}/include/" ]
   }
 }
 
@@ -788,8 +936,10 @@
     deps += [ "${tint_spirv_headers_dir}/:spv_headers" ]
   }
 
-  configs += [ ":tint_common_config" ]
-  configs += [ ":tint_exe_config" ]
+  configs += [
+    ":tint_common_config",
+    ":tint_exe_config",
+  ]
 
   if (build_with_chromium) {
     configs -= [ "//build/config/compiler:chromium_code" ]
diff --git a/src/ast/import.cc b/src/ast/import.cc
index 536a90a..b86c6b1 100644
--- a/src/ast/import.cc
+++ b/src/ast/import.cc
@@ -19,6 +19,8 @@
 namespace tint {
 namespace ast {
 
+Import::Import() = default;
+
 Import::Import(const std::string& path, const std::string& name)
     : Node(), path_(path), name_(name) {}
 
@@ -27,6 +29,8 @@
                const std::string& name)
     : Node(source), path_(path), name_(name) {}
 
+Import::Import(Import&&) = default;
+
 Import::~Import() = default;
 
 bool Import::IsValid() const {
diff --git a/src/ast/import.h b/src/ast/import.h
index 9c73f3e..5f40188 100644
--- a/src/ast/import.h
+++ b/src/ast/import.h
@@ -30,7 +30,7 @@
 class Import : public Node {
  public:
   /// Create a new empty import statement
-  Import() = default;
+  Import();
   /// Create a new import statement
   /// @param path The import path e.g. GLSL.std.450
   /// @param name The import reference name e.g. std
@@ -43,7 +43,7 @@
          const std::string& path,
          const std::string& name);
   /// Move constructor
-  Import(Import&&) = default;
+  Import(Import&&);
 
   ~Import() override;
 
diff --git a/src/reader/spirv/function.cc b/src/reader/spirv/function.cc
index 4883ebb..426a4b1 100644
--- a/src/reader/spirv/function.cc
+++ b/src/reader/spirv/function.cc
@@ -697,7 +697,7 @@
   }
 
   if (inst.opcode() == SpvOpBitcast) {
-    auto target_ty = parser_impl_.ConvertType(inst.type_id());
+    auto* target_ty = parser_impl_.ConvertType(inst.type_id());
     return {target_ty,
             std::make_unique<ast::AsExpression>(target_ty, operand(0).expr)};
   }
diff --git a/src/reader/spirv/function_arithmetic_test.cc b/src/reader/spirv/function_arithmetic_test.cc
index f194de7..c92a84c 100644
--- a/src/reader/spirv/function_arithmetic_test.cc
+++ b/src/reader/spirv/function_arithmetic_test.cc
@@ -127,7 +127,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -154,7 +154,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -183,7 +183,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -212,7 +212,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -243,7 +243,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -274,7 +274,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -307,7 +307,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -340,7 +340,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -375,7 +375,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -402,7 +402,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -680,7 +680,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions())
       << p->error() << "\n"
       << assembly;
@@ -715,7 +715,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions())
       << p->error() << "\n"
       << assembly;
@@ -824,7 +824,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions())
       << p->error() << "\n"
       << assembly;
@@ -859,7 +859,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions())
       << p->error() << "\n"
       << assembly;
diff --git a/src/reader/spirv/function_bit_test.cc b/src/reader/spirv/function_bit_test.cc
index c2b133c..e32421e 100644
--- a/src/reader/spirv/function_bit_test.cc
+++ b/src/reader/spirv/function_bit_test.cc
@@ -384,7 +384,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -411,7 +411,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -440,7 +440,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -469,7 +469,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -496,7 +496,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -527,7 +527,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -560,7 +560,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -592,7 +592,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
diff --git a/src/reader/spirv/function_conversion_test.cc b/src/reader/spirv/function_conversion_test.cc
index bdb3f90..49aa594 100644
--- a/src/reader/spirv/function_conversion_test.cc
+++ b/src/reader/spirv/function_conversion_test.cc
@@ -71,7 +71,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
@@ -97,7 +97,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
diff --git a/src/reader/spirv/function_logical_test.cc b/src/reader/spirv/function_logical_test.cc
index fe46afe..bf480b0 100644
--- a/src/reader/spirv/function_logical_test.cc
+++ b/src/reader/spirv/function_logical_test.cc
@@ -202,7 +202,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc
index e057bf8..7016e5e 100644
--- a/src/reader/spirv/parser_impl.cc
+++ b/src/reader/spirv/parser_impl.cc
@@ -172,6 +172,17 @@
 
 }  // namespace
 
+TypedExpression::TypedExpression() : type(nullptr), expr(nullptr) {}
+
+TypedExpression::TypedExpression(ast::type::Type* t,
+                                 std::unique_ptr<ast::Expression> e)
+    : type(t), expr(std::move(e)) {}
+
+TypedExpression::TypedExpression(TypedExpression&& other)
+    : type(other.type), expr(std::move(other.expr)) {}
+
+TypedExpression::~TypedExpression() {}
+
 ParserImpl::ParserImpl(Context* ctx, const std::vector<uint32_t>& spv_binary)
     : Reader(ctx),
       spv_binary_(spv_binary),
@@ -509,9 +520,9 @@
 ast::type::Type* ParserImpl::ConvertType(
     const spvtools::opt::analysis::Integer* int_ty) {
   if (int_ty->width() == 32) {
-    auto signed_ty =
+    auto* signed_ty =
         ctx_.type_mgr().Get(std::make_unique<ast::type::I32Type>());
-    auto unsigned_ty =
+    auto* unsigned_ty =
         ctx_.type_mgr().Get(std::make_unique<ast::type::U32Type>());
     signed_type_for_[unsigned_ty] = signed_ty;
     unsigned_type_for_[signed_ty] = unsigned_ty;
diff --git a/src/reader/spirv/parser_impl.h b/src/reader/spirv/parser_impl.h
index 4811e78..743a5b2 100644
--- a/src/reader/spirv/parser_impl.h
+++ b/src/reader/spirv/parser_impl.h
@@ -55,16 +55,16 @@
 // An AST expression with its type.
 struct TypedExpression {
   /// Dummy constructor
-  TypedExpression() : type(nullptr), expr(nullptr) {}
+  TypedExpression();
   /// Constructor
   /// @param t the type
   /// @param e the expression
-  TypedExpression(ast::type::Type* t, std::unique_ptr<ast::Expression> e)
-      : type(t), expr(std::move(e)) {}
+  TypedExpression(ast::type::Type* t, std::unique_ptr<ast::Expression> e);
   /// Move constructor
   /// @param other the other typed expression
-  TypedExpression(TypedExpression&& other)
-      : type(other.type), expr(std::move(other.expr)) {}
+  TypedExpression(TypedExpression&& other);
+  /// Destructor
+  ~TypedExpression();
   /// The type
   ast::type::Type* type;
   /// The expression
diff --git a/src/type_determiner_test.cc b/src/type_determiner_test.cc
index 0f4da0d..fe22fde 100644
--- a/src/type_determiner_test.cc
+++ b/src/type_determiner_test.cc
@@ -1685,7 +1685,7 @@
       td()->GetImportData({0, 0}, "GLSL.std.450", param.name, params, &id);
   ASSERT_NE(type, nullptr);
   EXPECT_TRUE(type->is_float_vector());
-  EXPECT_EQ(type->AsVector()->size(), 3);
+  EXPECT_EQ(type->AsVector()->size(), 3u);
   EXPECT_EQ(id, param.value);
 }
 
@@ -1924,7 +1924,7 @@
       td()->GetImportData({0, 0}, "GLSL.std.450", param.name, params, &id);
   ASSERT_NE(type, nullptr);
   EXPECT_TRUE(type->is_float_vector());
-  EXPECT_EQ(type->AsVector()->size(), 3);
+  EXPECT_EQ(type->AsVector()->size(), 3u);
   EXPECT_EQ(id, param.value);
 }
 
@@ -2332,7 +2332,7 @@
       td()->GetImportData({0, 0}, "GLSL.std.450", param.name, params, &id);
   ASSERT_NE(type, nullptr);
   EXPECT_TRUE(type->is_float_vector());
-  EXPECT_EQ(type->AsVector()->size(), 3);
+  EXPECT_EQ(type->AsVector()->size(), 3u);
   EXPECT_EQ(id, param.value);
 }
 
diff --git a/tint_overrides_with_defaults.gni b/tint_overrides_with_defaults.gni
index a8861ea..67f683c 100644
--- a/tint_overrides_with_defaults.gni
+++ b/tint_overrides_with_defaults.gni
@@ -17,6 +17,11 @@
 # This file contains Tint-related build flags.
 
 declare_args() {
+  # Path to tint checkout
+  if (!defined(tint_root_dir)) {
+    tint_root_dir = "//"
+  }
+
   # Path to spirv-tools checkout
   if (!defined(tint_spirv_tools_dir)) {
     tint_spirv_tools_dir = "//third_party/spirv-tools"
@@ -37,10 +42,6 @@
     tint_spirv_headers_dir = "//third_party/spirv-headers"
   }
 
-  # Generate documentation
-  # TODO(rharrison): Implement documentation support
-  tint_build_doc = false
-
   # Build the SPIR-V input reader
   if (!defined(tint_build_spv_reader)) {
     tint_build_spv_reader = false
@@ -61,10 +62,6 @@
     tint_build_wgsl_writer = false
   }
 
-  # Generate fuzzers
-  # TODO(rharrison): Implement fuzzer support
-  tint_build_fuzzers = false
-
   # Enable memory sanitizer
   # TODO(rharrison): Implement sanitizer support
   tint_enable_msan = false
