diff --git a/BUILD.gn b/BUILD.gn
index a3b566b..04bf5dc 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -13,12 +13,14 @@
 # limitations under the License.
 
 import("//build_overrides/build.gni")
+import("//testing/test.gni")
 import("tint_overrides_with_defaults.gni")
 
+###############################################################################
+# Common - Configs, etc. shared across targets
+###############################################################################
+
 config("tint_common_config") {
-  cflags = []
-  ldflags = []
-  include_dirs = []
   defines = []
 
   if (tint_build_spv_reader) {
@@ -46,15 +48,20 @@
   }
 }
 
-# libtint source sets are divided into a non-optional core in :libtint_core and
-# optional :libtint_* subsets, because ninja does not like having multiple source
-# files with the same name, like function.cc, in the same source set target.
+###############################################################################
+# Library - Tint core and optional modules of libtint
+###############################################################################
+# libtint source sets are divided into a non-optional core in :libtint_core_src
+# and optional :libtint_*_src subsets, because ninja does not like having
+# multiple source files with the same name, like function.cc, in the same
+# source set
+# target.
 #
-# Targets that want to use tint as a library should depend on ":libtint" and use
-# the build flags to control what is included, instead of trying to specify the
-# subsets that they want.
+# Targets that want to use tint as a library should depend on ":libtint" and
+# use the build flags to control what is included, instead of trying to specify
+# the subsets that they want.
 
-source_set("libtint_core") {
+source_set("libtint_core_src") {
   sources = [
     "src/ast/array_accessor_expression.cc",
     "src/ast/array_accessor_expression.h",
@@ -224,7 +231,7 @@
   }
 }
 
-config("tint_spv_reader_config") {
+config("libtint_spv_config") {
   include_dirs = [
     "${tint_spirv_tools_dir}/",
     "${tint_spirv_tools_dir}/include",
@@ -232,7 +239,7 @@
   ]
 }
 
-source_set("libtint_spv_reader") {
+source_set("libtint_spv_reader_src") {
   sources = [
     "src/reader/spirv/enum_converter.cc",
     "src/reader/spirv/enum_converter.h",
@@ -253,8 +260,10 @@
     "${tint_spirv_tools_dir}/:spvtools_val",
   ]
 
-  configs += [ ":tint_common_config" ]
-  configs += [ ":tint_spv_reader_config" ]
+  configs += [
+    ":tint_common_config",
+    ":libtint_spv_config",
+  ]
 
   if (build_with_chromium) {
     configs -= [ "//build/config/compiler:chromium_code" ]
@@ -262,7 +271,7 @@
   }
 }
 
-source_set("libtint_spv_writer") {
+source_set("libtint_spv_writer_src") {
   sources = [
     "src/writer/spirv/binary_writer.cc",
     "src/writer/spirv/binary_writer.h",
@@ -280,7 +289,10 @@
 
   deps = [ "${tint_spirv_headers_dir}/:spv_headers" ]
 
-  configs += [ ":tint_common_config" ]
+  configs += [
+    ":tint_common_config",
+    ":libtint_spv_config",
+  ]
 
   if (build_with_chromium) {
     configs -= [ "//build/config/compiler:chromium_code" ]
@@ -288,7 +300,7 @@
   }
 }
 
-source_set("libtint_wgsl_reader") {
+source_set("libtint_wgsl_reader_src") {
   sources = [
     "src/reader/wgsl/lexer.cc",
     "src/reader/wgsl/lexer.h",
@@ -308,7 +320,7 @@
   }
 }
 
-source_set("libtint_wgsl_writer") {
+source_set("libtint_wgsl_writer_src") {
   sources = [
     "src/writer/wgsl/generator.cc",
     "src/writer/wgsl/generator.h",
@@ -325,22 +337,22 @@
 }
 
 source_set("libtint") {
-  deps = [ ":libtint_core" ]
+  deps = [ ":libtint_core_src" ]
 
   if (tint_build_spv_reader) {
-    deps += [ ":libtint_spv_reader" ]
+    deps += [ ":libtint_spv_reader_src" ]
   }
 
   if (tint_build_spv_writer) {
-    deps += [ ":libtint_spv_writer" ]
+    deps += [ ":libtint_spv_writer_src" ]
   }
 
   if (tint_build_wgsl_reader) {
-    deps += [ ":libtint_wgsl_reader" ]
+    deps += [ ":libtint_wgsl_reader_src" ]
   }
 
   if (tint_build_wgsl_writer) {
-    deps += [ ":libtint_wgsl_writer" ]
+    deps += [ ":libtint_wgsl_writer_src" ]
   }
 
   configs += [ ":tint_common_config" ]
@@ -351,6 +363,408 @@
   }
 }
 
+###############################################################################
+# Gtest Gmock - Handle building inside and outside of Chromium.
+###############################################################################
+# When building outside of Chromium we need to define our own targets for GTest
+# and GMock. However when compiling inside of Chromium we need to reuse the
+# existing targets, both because Chromium has a special harness for swarming
+# and because otherwise the "gn check" fails.
+
+if (!build_with_chromium) {
+  # When we aren't in Chromium we define out own targets based on the location
+  # of the googletest repo.
+  config("gtest_config") {
+    include_dirs = [
+      "${tint_googletest_dir}/googletest",
+      "${tint_googletest_dir}/googletest/include",
+    ]
+  }
+  static_library("gtest") {
+    testonly = true
+    sources = [ "${tint_googletest_dir}/googletest/src/gtest-all.cc" ]
+    public_configs = [ ":gtest_config" ]
+  }
+
+  config("gmock_config") {
+    include_dirs = [
+      "${tint_googletest_dir}/googlemock",
+      "${tint_googletest_dir}/googlemock/include",
+      "${tint_googletest_dir}/googletest/include",
+    ]
+  }
+
+  static_library("gmock") {
+    testonly = true
+    sources = [
+      "${tint_googletest_dir}/googlemock/src/gmock-all.cc",
+      "${tint_googletest_dir}/googlemock/src/gmock_main.cc",
+    ]
+    public_configs = [ ":gmock_config" ]
+  }
+
+  group("gmock_and_gtest") {
+    testonly = true
+    public_deps = [
+      ":gmock",
+      ":gtest",
+    ]
+  }
+} else {
+  # When we are in Chromium we reuse its targets, and also add some deps that
+  # are needed to launch the test in swarming mode.
+  group("gmock_and_gtest") {
+    testonly = true
+    public_deps = [
+      "//base",
+      "//base/test:test_support",
+      "//testing/gmock",
+      "//testing/gtest",
+    ]
+  }
+}
+
+###############################################################################
+# Tests - For libtint core and optional modules
+###############################################################################
+config("tint_unittests_config") {
+  include_dirs = [
+    "${tint_googletest_dir}/googlemock/include",
+    "${tint_googletest_dir}/googletest/include",
+  ]
+}
+
+source_set("tint_unittests_core_src") {
+  sources = [
+    "src/ast/array_accessor_expression_test.cc",
+    "src/ast/as_expression_test.cc",
+    "src/ast/assignment_statement_test.cc",
+    "src/ast/binary_expression_test.cc",
+    "src/ast/binding_decoration_test.cc",
+    "src/ast/bool_literal_test.cc",
+    "src/ast/break_statement_test.cc",
+    "src/ast/builtin_decoration_test.cc",
+    "src/ast/call_expression_test.cc",
+    "src/ast/case_statement_test.cc",
+    "src/ast/cast_expression_test.cc",
+    "src/ast/continue_statement_test.cc",
+    "src/ast/decorated_variable_test.cc",
+    "src/ast/else_statement_test.cc",
+    "src/ast/entry_point_test.cc",
+    "src/ast/fallthrough_statement_test.cc",
+    "src/ast/float_literal_test.cc",
+    "src/ast/function_test.cc",
+    "src/ast/identifier_expression_test.cc",
+    "src/ast/if_statement_test.cc",
+    "src/ast/import_test.cc",
+    "src/ast/int_literal_test.cc",
+    "src/ast/kill_statement_test.cc",
+    "src/ast/location_decoration_test.cc",
+    "src/ast/loop_statement_test.cc",
+    "src/ast/member_accessor_expression_test.cc",
+    "src/ast/module_test.cc",
+    "src/ast/nop_statement_test.cc",
+    "src/ast/return_statement_test.cc",
+    "src/ast/scalar_constructor_expression_test.cc",
+    "src/ast/set_decoration_test.cc",
+    "src/ast/struct_member_offset_decoration_test.cc",
+    "src/ast/struct_member_test.cc",
+    "src/ast/struct_test.cc",
+    "src/ast/switch_statement_test.cc",
+    "src/ast/type/alias_type_test.cc",
+    "src/ast/type/array_type_test.cc",
+    "src/ast/type/bool_type_test.cc",
+    "src/ast/type/f32_type_test.cc",
+    "src/ast/type/i32_type_test.cc",
+    "src/ast/type/matrix_type_test.cc",
+    "src/ast/type/pointer_type_test.cc",
+    "src/ast/type/struct_type_test.cc",
+    "src/ast/type/u32_type_test.cc",
+    "src/ast/type/vector_type_test.cc",
+    "src/ast/type_constructor_expression_test.cc",
+    "src/ast/uint_literal_test.cc",
+    "src/ast/unary_derivative_expression_test.cc",
+    "src/ast/unary_method_expression_test.cc",
+    "src/ast/unary_op_expression_test.cc",
+    "src/ast/unless_statement_test.cc",
+    "src/ast/variable_decl_statement_test.cc",
+    "src/ast/variable_test.cc",
+    "src/scope_stack_test.cc",
+    "src/type_determiner_test.cc",
+    "src/type_manager_test.cc",
+    "src/validator_impl_import_test.cc",
+  ]
+
+  configs += [
+    ":tint_common_config",
+    ":tint_unittests_config",
+  ]
+
+  if (build_with_chromium) {
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+  }
+}
+
+source_set("tint_unittests_spv_reader_src") {
+  sources = [
+    "src/reader/spirv/enum_converter_test.cc",
+    "src/reader/spirv/fail_stream_test.cc",
+    "src/reader/spirv/function_arithmetic_test.cc",
+    "src/reader/spirv/function_decl_test.cc",
+    "src/reader/spirv/function_logical_test.cc",
+    "src/reader/spirv/function_memory_test.cc",
+    "src/reader/spirv/function_var_test.cc",
+    "src/reader/spirv/namer_test.cc",
+    "src/reader/spirv/parser_impl_convert_member_decoration_test.cc",
+    "src/reader/spirv/parser_impl_convert_type_test.cc",
+    "src/reader/spirv/parser_impl_entry_point_test.cc",
+    "src/reader/spirv/parser_impl_function_decl_test.cc",
+    "src/reader/spirv/parser_impl_get_decorations_test.cc",
+    "src/reader/spirv/parser_impl_import_test.cc",
+    "src/reader/spirv/parser_impl_module_var_test.cc",
+    "src/reader/spirv/parser_impl_named_types_test.cc",
+    "src/reader/spirv/parser_impl_test.cc",
+    "src/reader/spirv/parser_impl_user_name_test.cc",
+    "src/reader/spirv/parser_test.cc",
+    "src/reader/spirv/spirv_tools_helpers_test.cc",
+    "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",
+  ]
+
+  if (build_with_chromium) {
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+  }
+}
+
+source_set("tint_unittests_spv_writer_src") {
+  sources = [
+    "src/writer/spirv/binary_writer_test.cc",
+    "src/writer/spirv/builder_assign_test.cc",
+    "src/writer/spirv/builder_binary_expression_test.cc",
+    "src/writer/spirv/builder_constructor_expression_test.cc",
+    "src/writer/spirv/builder_entry_point_test.cc",
+    "src/writer/spirv/builder_function_test.cc",
+    "src/writer/spirv/builder_function_variable_test.cc",
+    "src/writer/spirv/builder_global_variable_test.cc",
+    "src/writer/spirv/builder_ident_expression_test.cc",
+    "src/writer/spirv/builder_if_test.cc",
+    "src/writer/spirv/builder_literal_test.cc",
+    "src/writer/spirv/builder_return_test.cc",
+    "src/writer/spirv/builder_test.cc",
+    "src/writer/spirv/builder_type_test.cc",
+    "src/writer/spirv/instruction_test.cc",
+    "src/writer/spirv/operand_test.cc",
+    "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",
+  ]
+
+  if (build_with_chromium) {
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+  }
+}
+
+source_set("tint_unittests_wgsl_reader_src") {
+  sources = [
+    "src/reader/wgsl/lexer_test.cc",
+    "src/reader/wgsl/parser_impl_additive_expression_test.cc",
+    "src/reader/wgsl/parser_impl_and_expression_test.cc",
+    "src/reader/wgsl/parser_impl_argument_expression_list_test.cc",
+    "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",
+    "src/reader/wgsl/parser_impl_continue_stmt_test.cc",
+    "src/reader/wgsl/parser_impl_continuing_stmt_test.cc",
+    "src/reader/wgsl/parser_impl_derivative_modifier_test.cc",
+    "src/reader/wgsl/parser_impl_else_stmt_test.cc",
+    "src/reader/wgsl/parser_impl_elseif_stmt_test.cc",
+    "src/reader/wgsl/parser_impl_entry_point_decl_test.cc",
+    "src/reader/wgsl/parser_impl_equality_expression_test.cc",
+    "src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc",
+    "src/reader/wgsl/parser_impl_function_decl_test.cc",
+    "src/reader/wgsl/parser_impl_function_header_test.cc",
+    "src/reader/wgsl/parser_impl_function_type_decl_test.cc",
+    "src/reader/wgsl/parser_impl_global_constant_decl_test.cc",
+    "src/reader/wgsl/parser_impl_global_decl_test.cc",
+    "src/reader/wgsl/parser_impl_global_variable_decl_test.cc",
+    "src/reader/wgsl/parser_impl_if_stmt_test.cc",
+    "src/reader/wgsl/parser_impl_import_decl_test.cc",
+    "src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc",
+    "src/reader/wgsl/parser_impl_logical_and_expression_test.cc",
+    "src/reader/wgsl/parser_impl_logical_or_expression_test.cc",
+    "src/reader/wgsl/parser_impl_loop_stmt_test.cc",
+    "src/reader/wgsl/parser_impl_multiplicative_expression_test.cc",
+    "src/reader/wgsl/parser_impl_param_list_test.cc",
+    "src/reader/wgsl/parser_impl_paren_rhs_stmt_test.cc",
+    "src/reader/wgsl/parser_impl_pipeline_stage_test.cc",
+    "src/reader/wgsl/parser_impl_postfix_expression_test.cc",
+    "src/reader/wgsl/parser_impl_primary_expression_test.cc",
+    "src/reader/wgsl/parser_impl_relational_expression_test.cc",
+    "src/reader/wgsl/parser_impl_shift_expression_test.cc",
+    "src/reader/wgsl/parser_impl_statement_test.cc",
+    "src/reader/wgsl/parser_impl_statements_test.cc",
+    "src/reader/wgsl/parser_impl_storage_class_test.cc",
+    "src/reader/wgsl/parser_impl_struct_body_decl_test.cc",
+    "src/reader/wgsl/parser_impl_struct_decl_test.cc",
+    "src/reader/wgsl/parser_impl_struct_decoration_decl_test.cc",
+    "src/reader/wgsl/parser_impl_struct_decoration_test.cc",
+    "src/reader/wgsl/parser_impl_struct_member_decoration_decl_test.cc",
+    "src/reader/wgsl/parser_impl_struct_member_decoration_test.cc",
+    "src/reader/wgsl/parser_impl_struct_member_test.cc",
+    "src/reader/wgsl/parser_impl_switch_body_test.cc",
+    "src/reader/wgsl/parser_impl_switch_stmt_test.cc",
+    "src/reader/wgsl/parser_impl_test.cc",
+    "src/reader/wgsl/parser_impl_test_helper.cc",
+    "src/reader/wgsl/parser_impl_test_helper.h",
+    "src/reader/wgsl/parser_impl_type_alias_test.cc",
+    "src/reader/wgsl/parser_impl_type_decl_test.cc",
+    "src/reader/wgsl/parser_impl_unary_expression_test.cc",
+    "src/reader/wgsl/parser_impl_unless_stmt_test.cc",
+    "src/reader/wgsl/parser_impl_variable_decl_test.cc",
+    "src/reader/wgsl/parser_impl_variable_decoration_list_test.cc",
+    "src/reader/wgsl/parser_impl_variable_decoration_test.cc",
+    "src/reader/wgsl/parser_impl_variable_ident_decl_test.cc",
+    "src/reader/wgsl/parser_impl_variable_stmt_test.cc",
+    "src/reader/wgsl/parser_impl_variable_storage_decoration_test.cc",
+    "src/reader/wgsl/parser_test.cc",
+    "src/reader/wgsl/token_test.cc",
+  ]
+
+  configs += [
+    ":tint_common_config",
+    ":tint_unittests_config",
+  ]
+
+  if (build_with_chromium) {
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+  }
+}
+
+source_set("tint_unittests_wgsl_writer_src") {
+  sources = [
+    "src/writer/wgsl/generator_impl_alias_type_test.cc",
+    "src/writer/wgsl/generator_impl_array_accessor_test.cc",
+    "src/writer/wgsl/generator_impl_as_test.cc",
+    "src/writer/wgsl/generator_impl_assign_test.cc",
+    "src/writer/wgsl/generator_impl_break_test.cc",
+    "src/writer/wgsl/generator_impl_call_test.cc",
+    "src/writer/wgsl/generator_impl_case_test.cc",
+    "src/writer/wgsl/generator_impl_cast_test.cc",
+    "src/writer/wgsl/generator_impl_constructor_test.cc",
+    "src/writer/wgsl/generator_impl_continue_test.cc",
+    "src/writer/wgsl/generator_impl_else_test.cc",
+    "src/writer/wgsl/generator_impl_entry_point_test.cc",
+    "src/writer/wgsl/generator_impl_fallthrough_test.cc",
+    "src/writer/wgsl/generator_impl_function_test.cc",
+    "src/writer/wgsl/generator_impl_identifier_test.cc",
+    "src/writer/wgsl/generator_impl_if_test.cc",
+    "src/writer/wgsl/generator_impl_import_test.cc",
+    "src/writer/wgsl/generator_impl_kill_test.cc",
+    "src/writer/wgsl/generator_impl_loop_test.cc",
+    "src/writer/wgsl/generator_impl_member_accessor_test.cc",
+    "src/writer/wgsl/generator_impl_nop_test.cc",
+    "src/writer/wgsl/generator_impl_relational_test.cc",
+    "src/writer/wgsl/generator_impl_return_test.cc",
+    "src/writer/wgsl/generator_impl_switch_test.cc",
+    "src/writer/wgsl/generator_impl_test.cc",
+    "src/writer/wgsl/generator_impl_type_test.cc",
+    "src/writer/wgsl/generator_impl_unary_derivative_test.cc",
+    "src/writer/wgsl/generator_impl_unary_method_test.cc",
+    "src/writer/wgsl/generator_impl_unary_op_test.cc",
+    "src/writer/wgsl/generator_impl_unless_test.cc",
+    "src/writer/wgsl/generator_impl_variable_decl_statement_test.cc",
+    "src/writer/wgsl/generator_impl_variable_test.cc",
+  ]
+
+  configs += [
+    ":tint_common_config",
+    ":tint_unittests_config",
+  ]
+
+  if (build_with_chromium) {
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+  }
+}
+
+source_set("tint_unittests_src") {
+  deps = [ ":tint_unittests_core_src" ]
+
+  if (tint_build_spv_reader) {
+    deps += [ ":tint_unittests_spv_reader_src" ]
+  }
+
+  if (tint_build_spv_writer) {
+    deps += [ ":tint_unittests_spv_writer_src" ]
+  }
+
+  if (tint_build_wgsl_reader) {
+    deps += [ ":tint_unittests_wgsl_reader_src" ]
+  }
+
+  if (tint_build_wgsl_writer) {
+    deps += [ ":tint_unittests_wgsl_writer_src" ]
+  }
+
+  configs += [
+    ":tint_common_config",
+    ":tint_unittests_config",
+  ]
+
+  if (build_with_chromium) {
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+  }
+}
+
+test("tint_unittests") {
+  deps = [
+    ":gmock_and_gtest",
+    ":libtint",
+    ":tint_unittests_src",
+  ]
+
+  # TODO(rharrison): Use main() from chromium for chromium tree builds. This
+  # requires adding a file to //gpu like Dawn has done.
+
+  configs += [
+    ":tint_common_config",
+    ":tint_unittests_config",
+  ]
+
+  if (build_with_chromium) {
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+  }
+
+  testonly = true
+}
+
+###############################################################################
+# Samples - Executables exposing command line functionality
+###############################################################################
+
 config("tint_exe_config") {
   include_dirs = []
   if (tint_build_spv_reader || tint_build_spv_writer) {
@@ -363,7 +777,7 @@
   deps = [ ":libtint" ]
 
   if (tint_build_spv_reader || tint_build_spv_writer) {
-    deps += ["${tint_spirv_headers_dir}/:spv_headers" ]
+    deps += [ "${tint_spirv_headers_dir}/:spv_headers" ]
   }
 
   configs += [ ":tint_common_config" ]
@@ -374,7 +788,3 @@
     configs += [ "//build/config/compiler:no_chromium_code" ]
   }
 }
-
-group("tint_all") {
-  deps = [ ":tint_exe" ]
-}
diff --git a/DEPS b/DEPS
index 8cad279..a4e62d5 100644
--- a/DEPS
+++ b/DEPS
@@ -9,18 +9,16 @@
   'buildtools_revision': '74cfb57006f83cfe050817526db359d5c8a11628',
   'clang_revision': '3605577b67603ec5776afcfada9e0ff4ea05cf0e',
   'cpplint_revision': '305ac8725a166ed42e3f5dd3f80d6de2cf840ef1',
-  'googletest_revision': '482ac6ee63429af2aa9c44f4e6427873fb68fb1f',
+  'googletest_revision': 'dcc92d0ab6c4ce022162a23566d44f673251eee4',
   'spirv_headers_revision': 'f8bf11a0253a32375c32cad92c841237b96696c0',
   'spirv_tools_revision': '60104cd97446877dad8ed1010a635218937a2f18',
+  'testing_revision': 'e5ced5141379ee8ae28b4f93d3c02df039d2b052',
 }
 
 deps = {
   'third_party/cpplint': Var('chromium_git') + Var('github') +
       '/google/styleguide.git@' + Var('cpplint_revision'),
 
-  'third_party/googletest': Var('chromium_git') + Var('github') +
-      '/google/googletest.git@' + Var('googletest_revision'),
-
   'third_party/spirv-headers': Var('chromium_git') + Var('github') +
       '/KhronosGroup/SPIRV-Headers.git@' + Var('spirv_headers_revision'),
 
@@ -39,6 +37,13 @@
 
   'third_party/binutils': Var('chromium_git') +
       '/chromium/src/third_party/binutils@' + Var('binutils_revision'),
+
+  # Dependencies required for testing
+  'testing': Var('chromium_git') + '/chromium/src/testing@' +
+      Var('testing_revision'),
+
+  'third_party/googletest': Var('chromium_git') + Var('github') +
+      '/google/googletest.git@' + Var('googletest_revision'),
 }
 
 hooks = [
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 9a1077b..9d2c2fe 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -402,6 +402,7 @@
     reader/wgsl/parser_impl_switch_body_test.cc
     reader/wgsl/parser_impl_switch_stmt_test.cc
     reader/wgsl/parser_impl_test.cc
+    reader/wgsl/parser_impl_test_helper.cc
     reader/wgsl/parser_impl_test_helper.h
     reader/wgsl/parser_impl_type_alias_test.cc
     reader/wgsl/parser_impl_type_decl_test.cc
diff --git a/src/ast/array_accessor_expression_test.cc b/src/ast/array_accessor_expression_test.cc
index 833e46f..a08a837 100644
--- a/src/ast/array_accessor_expression_test.cc
+++ b/src/ast/array_accessor_expression_test.cc
@@ -27,8 +27,8 @@
   auto ary = std::make_unique<IdentifierExpression>("ary");
   auto idx = std::make_unique<IdentifierExpression>("idx");
 
-  auto ary_ptr = ary.get();
-  auto idx_ptr = idx.get();
+  auto* ary_ptr = ary.get();
+  auto* idx_ptr = idx.get();
 
   ArrayAccessorExpression exp(std::move(ary), std::move(idx));
   ASSERT_EQ(exp.array(), ary_ptr);
@@ -40,8 +40,8 @@
 
   ArrayAccessorExpression exp(Source{20, 2}, std::move(ary), std::move(idx));
   auto src = exp.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(ArrayAccessorExpressionTest, IsArrayAccessor) {
diff --git a/src/ast/as_expression_test.cc b/src/ast/as_expression_test.cc
index e41c0ba..e29a89d 100644
--- a/src/ast/as_expression_test.cc
+++ b/src/ast/as_expression_test.cc
@@ -28,7 +28,7 @@
   type::F32Type f32;
   auto expr = std::make_unique<IdentifierExpression>("expr");
 
-  auto expr_ptr = expr.get();
+  auto* expr_ptr = expr.get();
 
   AsExpression exp(&f32, std::move(expr));
   ASSERT_EQ(exp.type(), &f32);
@@ -41,8 +41,8 @@
 
   AsExpression exp(Source{20, 2}, &f32, std::move(expr));
   auto src = exp.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(AsExpressionTest, IsAs) {
diff --git a/src/ast/assignment_statement_test.cc b/src/ast/assignment_statement_test.cc
index f8959e3..85a29d6 100644
--- a/src/ast/assignment_statement_test.cc
+++ b/src/ast/assignment_statement_test.cc
@@ -27,8 +27,8 @@
   auto lhs = std::make_unique<ast::IdentifierExpression>("lhs");
   auto rhs = std::make_unique<ast::IdentifierExpression>("rhs");
 
-  auto lhs_ptr = lhs.get();
-  auto rhs_ptr = rhs.get();
+  auto* lhs_ptr = lhs.get();
+  auto* rhs_ptr = rhs.get();
 
   AssignmentStatement stmt(std::move(lhs), std::move(rhs));
   EXPECT_EQ(stmt.lhs(), lhs_ptr);
@@ -41,8 +41,8 @@
 
   AssignmentStatement stmt(Source{20, 2}, std::move(lhs), std::move(rhs));
   auto src = stmt.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(AssignmentStatementTest, IsAssign) {
diff --git a/src/ast/binary_expression_test.cc b/src/ast/binary_expression_test.cc
index 0ca73aa..b7c50b1 100644
--- a/src/ast/binary_expression_test.cc
+++ b/src/ast/binary_expression_test.cc
@@ -29,8 +29,8 @@
   auto lhs = std::make_unique<IdentifierExpression>("lhs");
   auto rhs = std::make_unique<IdentifierExpression>("rhs");
 
-  auto lhs_ptr = lhs.get();
-  auto rhs_ptr = rhs.get();
+  auto* lhs_ptr = lhs.get();
+  auto* rhs_ptr = rhs.get();
 
   BinaryExpression r(BinaryOp::kEqual, std::move(lhs), std::move(rhs));
   EXPECT_EQ(r.lhs(), lhs_ptr);
@@ -45,8 +45,8 @@
   BinaryExpression r(Source{20, 2}, BinaryOp::kEqual, std::move(lhs),
                      std::move(rhs));
   auto src = r.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(BinaryExpressionTest, IsBinaryal) {
diff --git a/src/ast/binding_decoration_test.cc b/src/ast/binding_decoration_test.cc
index 71fefdf..677fd69 100644
--- a/src/ast/binding_decoration_test.cc
+++ b/src/ast/binding_decoration_test.cc
@@ -24,7 +24,7 @@
 
 TEST_F(BindingDecorationTest, Creation) {
   BindingDecoration d{2};
-  EXPECT_EQ(2, d.value());
+  EXPECT_EQ(2u, d.value());
 }
 
 TEST_F(BindingDecorationTest, Is) {
diff --git a/src/ast/break_statement_test.cc b/src/ast/break_statement_test.cc
index 87ace59..49df1ba 100644
--- a/src/ast/break_statement_test.cc
+++ b/src/ast/break_statement_test.cc
@@ -32,7 +32,7 @@
 
 TEST_F(BreakStatementTest, CreationWithConditional) {
   auto expr = std::make_unique<IdentifierExpression>("expr");
-  auto expr_ptr = expr.get();
+  auto* expr_ptr = expr.get();
 
   BreakStatement stmt(StatementCondition::kIf, std::move(expr));
   EXPECT_EQ(stmt.condition(), StatementCondition::kIf);
@@ -42,8 +42,8 @@
 TEST_F(BreakStatementTest, Creation_WithSource) {
   BreakStatement stmt(Source{20, 2});
   auto src = stmt.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(BreakStatementTest, Creation_WithSourceAndCondition) {
@@ -52,8 +52,8 @@
   BreakStatement stmt(Source{20, 2}, StatementCondition::kUnless,
                       std::move(expr));
   auto src = stmt.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(BreakStatementTest, IsBreak) {
diff --git a/src/ast/call_expression_test.cc b/src/ast/call_expression_test.cc
index e88627f..a89441f 100644
--- a/src/ast/call_expression_test.cc
+++ b/src/ast/call_expression_test.cc
@@ -29,15 +29,15 @@
   params.push_back(std::make_unique<IdentifierExpression>("param1"));
   params.push_back(std::make_unique<IdentifierExpression>("param2"));
 
-  auto func_ptr = func.get();
-  auto param1_ptr = params[0].get();
-  auto param2_ptr = params[1].get();
+  auto* func_ptr = func.get();
+  auto* param1_ptr = params[0].get();
+  auto* param2_ptr = params[1].get();
 
   CallExpression stmt(std::move(func), std::move(params));
   EXPECT_EQ(stmt.func(), func_ptr);
 
   const auto& vec = stmt.params();
-  ASSERT_EQ(vec.size(), 2);
+  ASSERT_EQ(vec.size(), 2u);
   EXPECT_EQ(vec[0].get(), param1_ptr);
   EXPECT_EQ(vec[1].get(), param2_ptr);
 }
@@ -46,8 +46,8 @@
   auto func = std::make_unique<IdentifierExpression>("func");
   CallExpression stmt(Source{20, 2}, std::move(func), {});
   auto src = stmt.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(CallExpressionTest, IsCall) {
diff --git a/src/ast/case_statement_test.cc b/src/ast/case_statement_test.cc
index b88b0fe..8aad2ba 100644
--- a/src/ast/case_statement_test.cc
+++ b/src/ast/case_statement_test.cc
@@ -32,12 +32,12 @@
   StatementList stmts;
   stmts.push_back(std::make_unique<NopStatement>());
 
-  auto bool_ptr = b.get();
-  auto nop_ptr = stmts[0].get();
+  auto* bool_ptr = b.get();
+  auto* nop_ptr = stmts[0].get();
 
   CaseStatement c(std::move(b), std::move(stmts));
   EXPECT_EQ(c.condition(), bool_ptr);
-  ASSERT_EQ(c.body().size(), 1);
+  ASSERT_EQ(c.body().size(), 1u);
   EXPECT_EQ(c.body()[0].get(), nop_ptr);
 }
 
@@ -49,8 +49,8 @@
 
   CaseStatement c(Source{20, 2}, std::move(b), std::move(stmts));
   auto src = c.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(CaseStatementTest, IsDefault_WithoutCondition) {
diff --git a/src/ast/cast_expression_test.cc b/src/ast/cast_expression_test.cc
index d7f9498..4fe7566 100644
--- a/src/ast/cast_expression_test.cc
+++ b/src/ast/cast_expression_test.cc
@@ -27,7 +27,7 @@
 TEST_F(CastExpressionTest, Creation) {
   type::F32Type f32;
   auto expr = std::make_unique<IdentifierExpression>("expr");
-  auto expr_ptr = expr.get();
+  auto* expr_ptr = expr.get();
 
   CastExpression c(&f32, std::move(expr));
   EXPECT_EQ(c.type(), &f32);
@@ -40,8 +40,8 @@
 
   CastExpression c(Source{20, 2}, &f32, std::move(expr));
   auto src = c.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(CastExpressionTest, IsCast) {
diff --git a/src/ast/continue_statement_test.cc b/src/ast/continue_statement_test.cc
index 5f4a88c..10026bd 100644
--- a/src/ast/continue_statement_test.cc
+++ b/src/ast/continue_statement_test.cc
@@ -32,7 +32,7 @@
 
 TEST_F(ContinueStatementTest, CreationWithConditional) {
   auto expr = std::make_unique<IdentifierExpression>("expr");
-  auto expr_ptr = expr.get();
+  auto* expr_ptr = expr.get();
 
   ContinueStatement stmt(StatementCondition::kIf, std::move(expr));
   EXPECT_EQ(stmt.condition(), StatementCondition::kIf);
@@ -42,8 +42,8 @@
 TEST_F(ContinueStatementTest, Creation_WithSource) {
   ContinueStatement stmt(Source{20, 2});
   auto src = stmt.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(ContinueStatementTest, Creation_WithSourceAndCondition) {
@@ -52,8 +52,8 @@
   ContinueStatement stmt(Source{20, 2}, StatementCondition::kUnless,
                          std::move(expr));
   auto src = stmt.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(ContinueStatementTest, IsContinue) {
diff --git a/src/ast/decorated_variable_test.cc b/src/ast/decorated_variable_test.cc
index 11954ab..01d39f0 100644
--- a/src/ast/decorated_variable_test.cc
+++ b/src/ast/decorated_variable_test.cc
@@ -37,8 +37,8 @@
   EXPECT_EQ(dv.name(), "my_var");
   EXPECT_EQ(dv.storage_class(), StorageClass::kFunction);
   EXPECT_EQ(dv.type(), &t);
-  EXPECT_EQ(dv.line(), 0);
-  EXPECT_EQ(dv.column(), 0);
+  EXPECT_EQ(dv.line(), 0u);
+  EXPECT_EQ(dv.column(), 0u);
 }
 
 TEST_F(DecoratedVariableTest, CreationWithSource) {
@@ -50,8 +50,8 @@
   EXPECT_EQ(dv.name(), "i");
   EXPECT_EQ(dv.storage_class(), StorageClass::kPrivate);
   EXPECT_EQ(dv.type(), &t);
-  EXPECT_EQ(dv.line(), 27);
-  EXPECT_EQ(dv.column(), 4);
+  EXPECT_EQ(dv.line(), 27u);
+  EXPECT_EQ(dv.column(), 4u);
 }
 
 TEST_F(DecoratedVariableTest, IsValid) {
diff --git a/src/ast/else_statement_test.cc b/src/ast/else_statement_test.cc
index bfa0c77..07ee8ec 100644
--- a/src/ast/else_statement_test.cc
+++ b/src/ast/else_statement_test.cc
@@ -34,20 +34,20 @@
   StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
-  auto cond_ptr = cond.get();
-  auto nop_ptr = body[0].get();
+  auto* cond_ptr = cond.get();
+  auto* nop_ptr = body[0].get();
 
   ElseStatement e(std::move(cond), std::move(body));
   EXPECT_EQ(e.condition(), cond_ptr);
-  ASSERT_EQ(e.body().size(), 1);
+  ASSERT_EQ(e.body().size(), 1u);
   EXPECT_EQ(e.body()[0].get(), nop_ptr);
 }
 
 TEST_F(ElseStatementTest, Creation_WithSource) {
   ElseStatement e(Source{20, 2}, {});
   auto src = e.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(ElseStatementTest, IsElse) {
diff --git a/src/ast/entry_point_test.cc b/src/ast/entry_point_test.cc
index 2dfb0b8..0f34fb9 100644
--- a/src/ast/entry_point_test.cc
+++ b/src/ast/entry_point_test.cc
@@ -30,8 +30,8 @@
   EXPECT_EQ(e.name(), "main");
   EXPECT_EQ(e.function_name(), "vtx_main");
   EXPECT_EQ(e.stage(), PipelineStage::kVertex);
-  EXPECT_EQ(e.line(), 0);
-  EXPECT_EQ(e.column(), 0);
+  EXPECT_EQ(e.line(), 0u);
+  EXPECT_EQ(e.column(), 0u);
 }
 
 TEST_F(EntryPointTest, CreationWithSource) {
@@ -41,8 +41,8 @@
   EXPECT_EQ(e.name(), "main");
   EXPECT_EQ(e.function_name(), "vtx_main");
   EXPECT_EQ(e.stage(), PipelineStage::kVertex);
-  EXPECT_EQ(e.line(), 27);
-  EXPECT_EQ(e.column(), 4);
+  EXPECT_EQ(e.line(), 27u);
+  EXPECT_EQ(e.column(), 4u);
 }
 
 TEST_F(EntryPointTest, CreationEmpty) {
@@ -56,8 +56,8 @@
   EXPECT_EQ(e.function_name(), "my_func");
   EXPECT_EQ(e.name(), "a_name");
   EXPECT_EQ(e.stage(), PipelineStage::kFragment);
-  EXPECT_EQ(e.line(), 27);
-  EXPECT_EQ(e.column(), 4);
+  EXPECT_EQ(e.line(), 27u);
+  EXPECT_EQ(e.column(), 4u);
 }
 
 TEST_F(EntryPointTest, IsValid) {
diff --git a/src/ast/fallthrough_statement_test.cc b/src/ast/fallthrough_statement_test.cc
index 632b940..c7dbe58 100644
--- a/src/ast/fallthrough_statement_test.cc
+++ b/src/ast/fallthrough_statement_test.cc
@@ -24,15 +24,15 @@
 
 TEST_F(FallthroughStatementTest, Creation) {
   FallthroughStatement stmt;
-  EXPECT_EQ(stmt.line(), 0);
-  EXPECT_EQ(stmt.column(), 0);
+  EXPECT_EQ(stmt.line(), 0u);
+  EXPECT_EQ(stmt.column(), 0u);
 }
 
 TEST_F(FallthroughStatementTest, Creation_WithSource) {
   FallthroughStatement stmt(Source{20, 2});
   auto src = stmt.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(FallthroughStatementTest, IsFallthrough) {
diff --git a/src/ast/function_test.cc b/src/ast/function_test.cc
index adac67d..faae8d1 100644
--- a/src/ast/function_test.cc
+++ b/src/ast/function_test.cc
@@ -34,11 +34,11 @@
   VariableList params;
   params.push_back(
       std::make_unique<Variable>("var", StorageClass::kNone, &i32));
-  auto var_ptr = params[0].get();
+  auto* var_ptr = params[0].get();
 
   Function f("func", std::move(params), &void_type);
   EXPECT_EQ(f.name(), "func");
-  ASSERT_EQ(f.params().size(), 1);
+  ASSERT_EQ(f.params().size(), 1u);
   EXPECT_EQ(f.return_type(), &void_type);
   EXPECT_EQ(f.params()[0].get(), var_ptr);
 }
@@ -53,8 +53,8 @@
 
   Function f(Source{20, 2}, "func", std::move(params), &void_type);
   auto src = f.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(FunctionTest, IsValid) {
diff --git a/src/ast/identifier_expression_test.cc b/src/ast/identifier_expression_test.cc
index 3252ab3..44eeb9f 100644
--- a/src/ast/identifier_expression_test.cc
+++ b/src/ast/identifier_expression_test.cc
@@ -24,20 +24,20 @@
 
 TEST_F(IdentifierExpressionTest, Creation) {
   IdentifierExpression i("ident");
-  ASSERT_EQ(i.name().size(), 1);
+  ASSERT_EQ(i.name().size(), 1u);
   EXPECT_EQ(i.name()[0], "ident");
 }
 
 TEST_F(IdentifierExpressionTest, Creation_WithSource) {
   IdentifierExpression i(Source{20, 2}, {"ns1", "ns2", "ident"});
-  ASSERT_EQ(i.name().size(), 3);
+  ASSERT_EQ(i.name().size(), 3u);
   EXPECT_EQ(i.name()[0], "ns1");
   EXPECT_EQ(i.name()[1], "ns2");
   EXPECT_EQ(i.name()[2], "ident");
 
   auto src = i.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(IdentifierExpressionTest, IsIdentifier) {
diff --git a/src/ast/if_statement_test.cc b/src/ast/if_statement_test.cc
index 7a96899..8455613 100644
--- a/src/ast/if_statement_test.cc
+++ b/src/ast/if_statement_test.cc
@@ -30,12 +30,12 @@
   StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
-  auto cond_ptr = cond.get();
-  auto stmt_ptr = body[0].get();
+  auto* cond_ptr = cond.get();
+  auto* stmt_ptr = body[0].get();
 
   IfStatement stmt(std::move(cond), std::move(body));
   EXPECT_EQ(stmt.condition(), cond_ptr);
-  ASSERT_EQ(stmt.body().size(), 1);
+  ASSERT_EQ(stmt.body().size(), 1u);
   EXPECT_EQ(stmt.body()[0].get(), stmt_ptr);
 }
 
@@ -46,8 +46,8 @@
 
   IfStatement stmt(Source{20, 2}, std::move(cond), std::move(body));
   auto src = stmt.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(IfStatementTest, IsIf) {
diff --git a/src/ast/import_test.cc b/src/ast/import_test.cc
index 0bde102..af77bab 100644
--- a/src/ast/import_test.cc
+++ b/src/ast/import_test.cc
@@ -29,8 +29,8 @@
 
   EXPECT_EQ(i.path(), "GLSL.std.430");
   EXPECT_EQ(i.name(), "std::glsl");
-  EXPECT_EQ(i.line(), 0);
-  EXPECT_EQ(i.column(), 0);
+  EXPECT_EQ(i.line(), 0u);
+  EXPECT_EQ(i.column(), 0u);
 }
 
 TEST_F(ImportTest, CreationWithSource) {
@@ -39,8 +39,8 @@
 
   EXPECT_EQ(i.path(), "GLSL.std.430");
   EXPECT_EQ(i.name(), "std::glsl");
-  EXPECT_EQ(i.line(), 27);
-  EXPECT_EQ(i.column(), 4);
+  EXPECT_EQ(i.line(), 27u);
+  EXPECT_EQ(i.column(), 4u);
 }
 
 TEST_F(ImportTest, CreationEmpty) {
@@ -52,8 +52,8 @@
 
   EXPECT_EQ(i.path(), "GLSL.std.430");
   EXPECT_EQ(i.name(), "std::glsl");
-  EXPECT_EQ(i.line(), 27);
-  EXPECT_EQ(i.column(), 4);
+  EXPECT_EQ(i.line(), 27u);
+  EXPECT_EQ(i.column(), 4u);
 }
 
 TEST_F(ImportTest, to_str) {
diff --git a/src/ast/kill_statement_test.cc b/src/ast/kill_statement_test.cc
index e75988a..653b6ad 100644
--- a/src/ast/kill_statement_test.cc
+++ b/src/ast/kill_statement_test.cc
@@ -26,14 +26,14 @@
 
 TEST_F(KillStatementTest, Creation) {
   KillStatement k;
-  EXPECT_EQ(k.line(), 0);
-  EXPECT_EQ(k.column(), 0);
+  EXPECT_EQ(k.line(), 0u);
+  EXPECT_EQ(k.column(), 0u);
 }
 
 TEST_F(KillStatementTest, Creation_WithSource) {
   KillStatement k(Source{20, 2});
-  EXPECT_EQ(k.line(), 20);
-  EXPECT_EQ(k.column(), 2);
+  EXPECT_EQ(k.line(), 20u);
+  EXPECT_EQ(k.column(), 2u);
 }
 
 TEST_F(KillStatementTest, IsKill) {
diff --git a/src/ast/location_decoration_test.cc b/src/ast/location_decoration_test.cc
index a5340e8..c0ed6b1 100644
--- a/src/ast/location_decoration_test.cc
+++ b/src/ast/location_decoration_test.cc
@@ -26,7 +26,7 @@
 
 TEST_F(LocationDecorationTest, Creation) {
   LocationDecoration d{2};
-  EXPECT_EQ(2, d.value());
+  EXPECT_EQ(2u, d.value());
 }
 
 TEST_F(LocationDecorationTest, Is) {
diff --git a/src/ast/loop_statement_test.cc b/src/ast/loop_statement_test.cc
index dad5c6b..a12b2f7 100644
--- a/src/ast/loop_statement_test.cc
+++ b/src/ast/loop_statement_test.cc
@@ -31,16 +31,16 @@
 TEST_F(LoopStatementTest, Creation) {
   StatementList body;
   body.push_back(std::make_unique<KillStatement>());
-  auto b_ptr = body[0].get();
+  auto* b_ptr = body[0].get();
 
   StatementList continuing;
   continuing.push_back(std::make_unique<NopStatement>());
-  auto c_ptr = continuing[0].get();
+  auto* c_ptr = continuing[0].get();
 
   LoopStatement l(std::move(body), std::move(continuing));
-  ASSERT_EQ(l.body().size(), 1);
+  ASSERT_EQ(l.body().size(), 1u);
   EXPECT_EQ(l.body()[0].get(), b_ptr);
-  ASSERT_EQ(l.continuing().size(), 1);
+  ASSERT_EQ(l.continuing().size(), 1u);
   EXPECT_EQ(l.continuing()[0].get(), c_ptr);
 }
 
@@ -53,8 +53,8 @@
 
   LoopStatement l(Source{20, 2}, std::move(body), std::move(continuing));
   auto src = l.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(LoopStatementTest, IsLoop) {
diff --git a/src/ast/member_accessor_expression_test.cc b/src/ast/member_accessor_expression_test.cc
index f42110b..888884e 100644
--- a/src/ast/member_accessor_expression_test.cc
+++ b/src/ast/member_accessor_expression_test.cc
@@ -29,8 +29,8 @@
   auto str = std::make_unique<IdentifierExpression>("structure");
   auto mem = std::make_unique<IdentifierExpression>("member");
 
-  auto str_ptr = str.get();
-  auto mem_ptr = mem.get();
+  auto* str_ptr = str.get();
+  auto* mem_ptr = mem.get();
 
   MemberAccessorExpression stmt(std::move(str), std::move(mem));
   EXPECT_EQ(stmt.structure(), str_ptr);
@@ -43,8 +43,8 @@
 
   MemberAccessorExpression stmt(Source{20, 2}, std::move(str), std::move(mem));
   auto src = stmt.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(MemberAccessorExpressionTest, IsMemberAccessor) {
diff --git a/src/ast/module_test.cc b/src/ast/module_test.cc
index f9f5968..0e02c13 100644
--- a/src/ast/module_test.cc
+++ b/src/ast/module_test.cc
@@ -33,13 +33,13 @@
 TEST_F(ModuleTest, Creation) {
   Module m;
 
-  EXPECT_EQ(m.imports().size(), 0);
+  EXPECT_EQ(m.imports().size(), 0u);
 }
 
 TEST_F(ModuleTest, ToStrEmitsPreambleAndPostamble) {
   Module m;
   const auto str = m.to_str();
-  const auto expected = "Module{\n}\n";
+  auto* const expected = "Module{\n}\n";
   EXPECT_EQ(str, expected);
 }
 
@@ -49,7 +49,7 @@
   m.AddImport(std::make_unique<Import>("GLSL.std.430", "std::glsl"));
   m.AddImport(std::make_unique<Import>("OpenCL.debug.100", "std::debug"));
 
-  EXPECT_EQ(2, m.imports().size());
+  EXPECT_EQ(2u, m.imports().size());
   EXPECT_EQ("std::glsl", m.imports()[0]->name());
 }
 
@@ -70,7 +70,7 @@
   m.AddImport(std::move(i));
   m.AddImport(std::make_unique<Import>("OpenCL.debug.100", "std::debug"));
 
-  auto import = m.FindImportByName("std::glsl");
+  auto* import = m.FindImportByName("std::glsl");
   ASSERT_NE(nullptr, import);
   EXPECT_EQ(import->path(), "GLSL.std.430");
   EXPECT_EQ(import->name(), "std::glsl");
diff --git a/src/ast/nop_statement_test.cc b/src/ast/nop_statement_test.cc
index 502622d..b7dda99 100644
--- a/src/ast/nop_statement_test.cc
+++ b/src/ast/nop_statement_test.cc
@@ -26,14 +26,14 @@
 
 TEST_F(NopStatementTest, Creation) {
   NopStatement n;
-  EXPECT_EQ(n.line(), 0);
-  EXPECT_EQ(n.column(), 0);
+  EXPECT_EQ(n.line(), 0u);
+  EXPECT_EQ(n.column(), 0u);
 }
 
 TEST_F(NopStatementTest, Creation_WithSource) {
   NopStatement n(Source{20, 2});
-  EXPECT_EQ(n.line(), 20);
-  EXPECT_EQ(n.column(), 2);
+  EXPECT_EQ(n.line(), 20u);
+  EXPECT_EQ(n.column(), 2u);
 }
 
 TEST_F(NopStatementTest, IsNop) {
diff --git a/src/ast/return_statement_test.cc b/src/ast/return_statement_test.cc
index 3cd4a04..2477015 100644
--- a/src/ast/return_statement_test.cc
+++ b/src/ast/return_statement_test.cc
@@ -27,7 +27,7 @@
 
 TEST_F(ReturnStatementTest, Creation) {
   auto expr = std::make_unique<IdentifierExpression>("expr");
-  auto expr_ptr = expr.get();
+  auto* expr_ptr = expr.get();
 
   ReturnStatement r(std::move(expr));
   EXPECT_EQ(r.value(), expr_ptr);
@@ -36,8 +36,8 @@
 TEST_F(ReturnStatementTest, Creation_WithSource) {
   ReturnStatement r(Source{20, 2});
   auto src = r.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(ReturnStatementTest, IsReturn) {
diff --git a/src/ast/scalar_constructor_expression_test.cc b/src/ast/scalar_constructor_expression_test.cc
index 817905d..ea3dddc 100644
--- a/src/ast/scalar_constructor_expression_test.cc
+++ b/src/ast/scalar_constructor_expression_test.cc
@@ -27,7 +27,7 @@
 TEST_F(ScalarConstructorExpressionTest, Creation) {
   ast::type::BoolType bool_type;
   auto b = std::make_unique<BoolLiteral>(&bool_type, true);
-  auto b_ptr = b.get();
+  auto* b_ptr = b.get();
   ScalarConstructorExpression c(std::move(b));
   EXPECT_EQ(c.literal(), b_ptr);
 }
@@ -37,8 +37,8 @@
   auto b = std::make_unique<BoolLiteral>(&bool_type, true);
   ScalarConstructorExpression c(Source{20, 2}, std::move(b));
   auto src = c.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(ScalarConstructorExpressionTest, IsValid) {
diff --git a/src/ast/set_decoration_test.cc b/src/ast/set_decoration_test.cc
index 9b70c4e..5a90c9d 100644
--- a/src/ast/set_decoration_test.cc
+++ b/src/ast/set_decoration_test.cc
@@ -24,7 +24,7 @@
 
 TEST_F(SetDecorationTest, Creation) {
   SetDecoration d{2};
-  EXPECT_EQ(2, d.value());
+  EXPECT_EQ(2u, d.value());
 }
 
 TEST_F(SetDecorationTest, Is) {
diff --git a/src/ast/struct_member_offset_decoration_test.cc b/src/ast/struct_member_offset_decoration_test.cc
index a73b367..141fbe5 100644
--- a/src/ast/struct_member_offset_decoration_test.cc
+++ b/src/ast/struct_member_offset_decoration_test.cc
@@ -24,7 +24,7 @@
 
 TEST_F(StructMemberOffsetDecorationTest, Creation) {
   StructMemberOffsetDecoration d{2};
-  EXPECT_EQ(2, d.offset());
+  EXPECT_EQ(2u, d.offset());
 }
 
 TEST_F(StructMemberOffsetDecorationTest, Is) {
diff --git a/src/ast/struct_member_test.cc b/src/ast/struct_member_test.cc
index b6f3ded..c73a8a8 100644
--- a/src/ast/struct_member_test.cc
+++ b/src/ast/struct_member_test.cc
@@ -35,10 +35,10 @@
   StructMember st{"a", &i32, std::move(decorations)};
   EXPECT_EQ(st.name(), "a");
   EXPECT_EQ(st.type(), &i32);
-  EXPECT_EQ(st.decorations().size(), 1);
+  EXPECT_EQ(st.decorations().size(), 1u);
   EXPECT_TRUE(st.decorations()[0]->IsOffset());
-  EXPECT_EQ(st.line(), 0);
-  EXPECT_EQ(st.column(), 0);
+  EXPECT_EQ(st.line(), 0u);
+  EXPECT_EQ(st.column(), 0u);
 }
 
 TEST_F(StructMemberTest, CreationWithSource) {
@@ -48,9 +48,9 @@
   StructMember st{s, "a", &i32, {}};
   EXPECT_EQ(st.name(), "a");
   EXPECT_EQ(st.type(), &i32);
-  EXPECT_EQ(st.decorations().size(), 0);
-  EXPECT_EQ(st.line(), 27);
-  EXPECT_EQ(st.column(), 4);
+  EXPECT_EQ(st.decorations().size(), 0u);
+  EXPECT_EQ(st.line(), 27u);
+  EXPECT_EQ(st.column(), 4u);
 }
 
 TEST_F(StructMemberTest, IsValid) {
diff --git a/src/ast/struct_test.cc b/src/ast/struct_test.cc
index 15dbad9..0b416a2 100644
--- a/src/ast/struct_test.cc
+++ b/src/ast/struct_test.cc
@@ -36,10 +36,10 @@
       std::make_unique<StructMember>("a", &i32, StructMemberDecorationList()));
 
   Struct s{StructDecoration::kNone, std::move(members)};
-  EXPECT_EQ(s.members().size(), 1);
+  EXPECT_EQ(s.members().size(), 1u);
   EXPECT_EQ(s.decoration(), StructDecoration::kNone);
-  EXPECT_EQ(s.line(), 0);
-  EXPECT_EQ(s.column(), 0);
+  EXPECT_EQ(s.line(), 0u);
+  EXPECT_EQ(s.column(), 0u);
 }
 
 TEST_F(StructTest, CreationWithSource) {
@@ -50,10 +50,10 @@
       std::make_unique<StructMember>("a", &i32, StructMemberDecorationList()));
 
   Struct s{source, StructDecoration::kNone, std::move(members)};
-  EXPECT_EQ(s.members().size(), 1);
+  EXPECT_EQ(s.members().size(), 1u);
   EXPECT_EQ(s.decoration(), StructDecoration::kNone);
-  EXPECT_EQ(s.line(), 27);
-  EXPECT_EQ(s.column(), 4);
+  EXPECT_EQ(s.line(), 27u);
+  EXPECT_EQ(s.column(), 4u);
 }
 
 TEST_F(StructTest, IsValid) {
diff --git a/src/ast/switch_statement_test.cc b/src/ast/switch_statement_test.cc
index 08ea6f3..c4adb28 100644
--- a/src/ast/switch_statement_test.cc
+++ b/src/ast/switch_statement_test.cc
@@ -36,12 +36,12 @@
   body.push_back(
       std::make_unique<CaseStatement>(std::move(lit), StatementList()));
 
-  auto ident_ptr = ident.get();
-  auto case_ptr = body[0].get();
+  auto* ident_ptr = ident.get();
+  auto* case_ptr = body[0].get();
 
   SwitchStatement stmt(std::move(ident), std::move(body));
   EXPECT_EQ(stmt.condition(), ident_ptr);
-  ASSERT_EQ(stmt.body().size(), 1);
+  ASSERT_EQ(stmt.body().size(), 1u);
   EXPECT_EQ(stmt.body()[0].get(), case_ptr);
 }
 
@@ -50,8 +50,8 @@
 
   SwitchStatement stmt(Source{20, 2}, std::move(ident), CaseStatementList());
   auto src = stmt.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(SwitchStatementTest, IsSwitch) {
diff --git a/src/ast/type/array_type_test.cc b/src/ast/type/array_type_test.cc
index 4751641..b7ff819 100644
--- a/src/ast/type/array_type_test.cc
+++ b/src/ast/type/array_type_test.cc
@@ -29,7 +29,7 @@
   U32Type u32;
   ArrayType arr{&u32, 3};
   EXPECT_EQ(arr.type(), &u32);
-  EXPECT_EQ(arr.size(), 3);
+  EXPECT_EQ(arr.size(), 3u);
   EXPECT_TRUE(arr.IsArray());
   EXPECT_FALSE(arr.IsRuntimeArray());
 }
@@ -38,7 +38,7 @@
   U32Type u32;
   ArrayType arr{&u32};
   EXPECT_EQ(arr.type(), &u32);
-  EXPECT_EQ(arr.size(), 0);
+  EXPECT_EQ(arr.size(), 0u);
   EXPECT_TRUE(arr.IsArray());
   EXPECT_TRUE(arr.IsRuntimeArray());
 }
diff --git a/src/ast/type/matrix_type_test.cc b/src/ast/type/matrix_type_test.cc
index 1babb7d..4fcd024 100644
--- a/src/ast/type/matrix_type_test.cc
+++ b/src/ast/type/matrix_type_test.cc
@@ -28,8 +28,8 @@
   I32Type i32;
   MatrixType m{&i32, 2, 4};
   EXPECT_EQ(m.type(), &i32);
-  EXPECT_EQ(m.rows(), 2);
-  EXPECT_EQ(m.columns(), 4);
+  EXPECT_EQ(m.rows(), 2u);
+  EXPECT_EQ(m.columns(), 4u);
 }
 
 TEST_F(MatrixTypeTest, Is) {
diff --git a/src/ast/type/struct_type_test.cc b/src/ast/type/struct_type_test.cc
index 6492a15..5c3c65e 100644
--- a/src/ast/type/struct_type_test.cc
+++ b/src/ast/type/struct_type_test.cc
@@ -28,7 +28,7 @@
 
 TEST_F(StructTypeTest, Creation) {
   auto impl = std::make_unique<Struct>();
-  auto ptr = impl.get();
+  auto* ptr = impl.get();
   StructType s{std::move(impl)};
   EXPECT_EQ(s.impl(), ptr);
 }
diff --git a/src/ast/type/vector_type_test.cc b/src/ast/type/vector_type_test.cc
index cd2ce3a..b4fd515 100644
--- a/src/ast/type/vector_type_test.cc
+++ b/src/ast/type/vector_type_test.cc
@@ -28,7 +28,7 @@
   I32Type i32;
   VectorType v{&i32, 2};
   EXPECT_EQ(v.type(), &i32);
-  EXPECT_EQ(v.size(), 2);
+  EXPECT_EQ(v.size(), 2u);
 }
 
 TEST_F(VectorTypeTest, Is) {
diff --git a/src/ast/type_constructor_expression_test.cc b/src/ast/type_constructor_expression_test.cc
index ad4e01a..28b3608 100644
--- a/src/ast/type_constructor_expression_test.cc
+++ b/src/ast/type_constructor_expression_test.cc
@@ -33,11 +33,11 @@
   type::F32Type f32;
   ExpressionList expr;
   expr.push_back(std::make_unique<IdentifierExpression>("expr"));
-  auto expr_ptr = expr[0].get();
+  auto* expr_ptr = expr[0].get();
 
   TypeConstructorExpression t(&f32, std::move(expr));
   EXPECT_EQ(t.type(), &f32);
-  ASSERT_EQ(t.values().size(), 1);
+  ASSERT_EQ(t.values().size(), 1u);
   EXPECT_EQ(t.values()[0].get(), expr_ptr);
 }
 
@@ -48,8 +48,8 @@
 
   TypeConstructorExpression t(Source{20, 2}, &f32, std::move(expr));
   auto src = t.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(TypeConstructorExpressionTest, IsTypeConstructor) {
diff --git a/src/ast/uint_literal_test.cc b/src/ast/uint_literal_test.cc
index d19811c..a1402b3 100644
--- a/src/ast/uint_literal_test.cc
+++ b/src/ast/uint_literal_test.cc
@@ -27,7 +27,7 @@
   ast::type::U32Type u32;
   UintLiteral u{&u32, 47};
   ASSERT_TRUE(u.IsUint());
-  EXPECT_EQ(u.value(), 47);
+  EXPECT_EQ(u.value(), 47u);
 }
 
 TEST_F(UintLiteralTest, Is) {
diff --git a/src/ast/unary_derivative_expression_test.cc b/src/ast/unary_derivative_expression_test.cc
index 6a9d3661..96d1e46 100644
--- a/src/ast/unary_derivative_expression_test.cc
+++ b/src/ast/unary_derivative_expression_test.cc
@@ -27,7 +27,7 @@
 
 TEST_F(UnaryDerivativeExpressionTest, Creation) {
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  auto ident_ptr = ident.get();
+  auto* ident_ptr = ident.get();
 
   UnaryDerivativeExpression d(UnaryDerivative::kDpdy,
                               DerivativeModifier::kCoarse, std::move(ident));
@@ -42,8 +42,8 @@
   UnaryDerivativeExpression d(Source{20, 2}, UnaryDerivative::kDpdy,
                               DerivativeModifier::kCoarse, std::move(ident));
   auto src = d.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(UnaryDerivativeExpressionTest, IsUnaryDerivative) {
diff --git a/src/ast/unary_method_expression_test.cc b/src/ast/unary_method_expression_test.cc
index 92f265e..1a2d9ed 100644
--- a/src/ast/unary_method_expression_test.cc
+++ b/src/ast/unary_method_expression_test.cc
@@ -30,11 +30,11 @@
   ExpressionList params;
   params.push_back(std::make_unique<IdentifierExpression>("ident"));
 
-  auto ident_ptr = params[0].get();
+  auto* ident_ptr = params[0].get();
 
   UnaryMethodExpression u(UnaryMethod::kAll, std::move(params));
   EXPECT_EQ(u.op(), UnaryMethod::kAll);
-  ASSERT_EQ(u.params().size(), 1);
+  ASSERT_EQ(u.params().size(), 1u);
   EXPECT_EQ(u.params()[0].get(), ident_ptr);
 }
 
@@ -44,8 +44,8 @@
 
   UnaryMethodExpression u(Source{20, 2}, UnaryMethod::kAll, std::move(params));
   auto src = u.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(UnaryMethodExpressionTest, IsUnaryMethod) {
diff --git a/src/ast/unary_op_expression_test.cc b/src/ast/unary_op_expression_test.cc
index 93462bb..1d5e319 100644
--- a/src/ast/unary_op_expression_test.cc
+++ b/src/ast/unary_op_expression_test.cc
@@ -27,7 +27,7 @@
 
 TEST_F(UnaryOpExpressionTest, Creation) {
   auto ident = std::make_unique<IdentifierExpression>("ident");
-  auto ident_ptr = ident.get();
+  auto* ident_ptr = ident.get();
 
   UnaryOpExpression u(UnaryOp::kNot, std::move(ident));
   EXPECT_EQ(u.op(), UnaryOp::kNot);
@@ -38,8 +38,8 @@
   auto ident = std::make_unique<IdentifierExpression>("ident");
   UnaryOpExpression u(Source{20, 2}, UnaryOp::kNot, std::move(ident));
   auto src = u.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(UnaryOpExpressionTest, IsUnaryOp) {
diff --git a/src/ast/unless_statement_test.cc b/src/ast/unless_statement_test.cc
index 6937f9b..45b7b7d 100644
--- a/src/ast/unless_statement_test.cc
+++ b/src/ast/unless_statement_test.cc
@@ -30,12 +30,12 @@
   StatementList body;
   body.push_back(std::make_unique<NopStatement>());
 
-  auto ident_ptr = ident.get();
-  auto nop_ptr = body[0].get();
+  auto* ident_ptr = ident.get();
+  auto* nop_ptr = body[0].get();
 
   UnlessStatement u(std::move(ident), std::move(body));
   EXPECT_EQ(u.condition(), ident_ptr);
-  ASSERT_EQ(u.body().size(), 1);
+  ASSERT_EQ(u.body().size(), 1u);
   EXPECT_EQ(u.body()[0].get(), nop_ptr);
 }
 
@@ -46,8 +46,8 @@
 
   UnlessStatement u(Source{20, 2}, std::move(ident), std::move(body));
   auto src = u.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(UnlessStatementTest, IsUnless) {
diff --git a/src/ast/variable_decl_statement_test.cc b/src/ast/variable_decl_statement_test.cc
index 84149c1..d96b07b 100644
--- a/src/ast/variable_decl_statement_test.cc
+++ b/src/ast/variable_decl_statement_test.cc
@@ -27,7 +27,7 @@
 TEST_F(VariableDeclStatementTest, Creation) {
   type::F32Type f32;
   auto var = std::make_unique<Variable>("a", StorageClass::kNone, &f32);
-  auto var_ptr = var.get();
+  auto* var_ptr = var.get();
 
   VariableDeclStatement stmt(std::move(var));
   EXPECT_EQ(stmt.variable(), var_ptr);
@@ -39,8 +39,8 @@
 
   VariableDeclStatement stmt(Source{20, 2}, std::move(var));
   auto src = stmt.source();
-  EXPECT_EQ(src.line, 20);
-  EXPECT_EQ(src.column, 2);
+  EXPECT_EQ(src.line, 20u);
+  EXPECT_EQ(src.column, 2u);
 }
 
 TEST_F(VariableDeclStatementTest, IsVariableDecl) {
diff --git a/src/ast/variable_test.cc b/src/ast/variable_test.cc
index 1e4b72c..fd0db76 100644
--- a/src/ast/variable_test.cc
+++ b/src/ast/variable_test.cc
@@ -32,8 +32,8 @@
   EXPECT_EQ(v.name(), "my_var");
   EXPECT_EQ(v.storage_class(), StorageClass::kFunction);
   EXPECT_EQ(v.type(), &t);
-  EXPECT_EQ(v.line(), 0);
-  EXPECT_EQ(v.column(), 0);
+  EXPECT_EQ(v.line(), 0u);
+  EXPECT_EQ(v.column(), 0u);
 }
 
 TEST_F(VariableTest, CreationWithSource) {
@@ -44,8 +44,8 @@
   EXPECT_EQ(v.name(), "i");
   EXPECT_EQ(v.storage_class(), StorageClass::kPrivate);
   EXPECT_EQ(v.type(), &t);
-  EXPECT_EQ(v.line(), 27);
-  EXPECT_EQ(v.column(), 4);
+  EXPECT_EQ(v.line(), 27u);
+  EXPECT_EQ(v.column(), 4u);
 }
 
 TEST_F(VariableTest, CreationEmpty) {
@@ -61,8 +61,8 @@
   EXPECT_EQ(v.name(), "a_var");
   EXPECT_EQ(v.storage_class(), StorageClass::kWorkgroup);
   EXPECT_EQ(v.type(), &t);
-  EXPECT_EQ(v.line(), 27);
-  EXPECT_EQ(v.column(), 4);
+  EXPECT_EQ(v.line(), 27u);
+  EXPECT_EQ(v.column(), 4u);
 }
 
 TEST_F(VariableTest, IsValid) {
diff --git a/src/reader/spirv/function_arithmetic_test.cc b/src/reader/spirv/function_arithmetic_test.cc
index b2945af..a0ccf6e 100644
--- a/src/reader/spirv/function_arithmetic_test.cc
+++ b/src/reader/spirv/function_arithmetic_test.cc
@@ -137,7 +137,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_decl_test.cc b/src/reader/spirv/function_decl_test.cc
index 75cc74f..20e5b1b 100644
--- a/src/reader/spirv/function_decl_test.cc
+++ b/src/reader/spirv/function_decl_test.cc
@@ -50,7 +50,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctionDeclaration_VoidFunctionWithoutParams) {
-  auto p = parser(test::Assemble(CommonTypes() + R"(
+  auto* p = parser(test::Assemble(CommonTypes() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      OpReturn
@@ -67,7 +67,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctionDeclaration_NonVoidResultType) {
-  auto p = parser(test::Assemble(CommonTypes() + R"(
+  auto* p = parser(test::Assemble(CommonTypes() + R"(
      %fn_ret_float = OpTypeFunction %float
      %100 = OpFunction %float None %fn_ret_float
      %entry = OpLabel
@@ -86,7 +86,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctionDeclaration_MixedParamTypes) {
-  auto p = parser(test::Assemble(Names({"a", "b", "c"}) + CommonTypes() + R"(
+  auto* p = parser(test::Assemble(Names({"a", "b", "c"}) + CommonTypes() + R"(
      %fn_mixed_params = OpTypeFunction %float %uint %float %int
 
      %100 = OpFunction %void None %fn_mixed_params
@@ -125,7 +125,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctionDeclaration_GenerateParamNames) {
-  auto p = parser(test::Assemble(CommonTypes() + R"(
+  auto* p = parser(test::Assemble(CommonTypes() + R"(
      %fn_mixed_params = OpTypeFunction %float %uint %float %int
 
      %100 = OpFunction %void None %fn_mixed_params
diff --git a/src/reader/spirv/function_logical_test.cc b/src/reader/spirv/function_logical_test.cc
index 7f58959..a3e0b36 100644
--- a/src/reader/spirv/function_logical_test.cc
+++ b/src/reader/spirv/function_logical_test.cc
@@ -159,7 +159,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_memory_test.cc b/src/reader/spirv/function_memory_test.cc
index 9b96018..aafc6cb 100644
--- a/src/reader/spirv/function_memory_test.cc
+++ b/src/reader/spirv/function_memory_test.cc
@@ -29,7 +29,7 @@
 using ::testing::HasSubstr;
 
 TEST_F(SpvParserTest, EmitStatement_StoreBoolConst) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
      %void = OpTypeVoid
      %voidfn = OpTypeFunction %void
      %ty = OpTypeBool
@@ -64,7 +64,7 @@
 }
 
 TEST_F(SpvParserTest, EmitStatement_StoreUintConst) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
      %void = OpTypeVoid
      %voidfn = OpTypeFunction %void
      %ty = OpTypeInt 32 0
@@ -92,7 +92,7 @@
 }
 
 TEST_F(SpvParserTest, EmitStatement_StoreIntConst) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
      %void = OpTypeVoid
      %voidfn = OpTypeFunction %void
      %ty = OpTypeInt 32 1
@@ -120,7 +120,7 @@
 }
 
 TEST_F(SpvParserTest, EmitStatement_StoreFloatConst) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
      %void = OpTypeVoid
      %voidfn = OpTypeFunction %void
      %ty = OpTypeFloat 32
@@ -148,7 +148,7 @@
 }
 
 TEST_F(SpvParserTest, EmitStatement_LoadBool) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
      %void = OpTypeVoid
      %voidfn = OpTypeFunction %void
      %ty = OpTypeBool
@@ -178,7 +178,7 @@
 }
 
 TEST_F(SpvParserTest, EmitStatement_LoadScalar) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
      %void = OpTypeVoid
      %voidfn = OpTypeFunction %void
      %ty = OpTypeInt 32 0
@@ -218,7 +218,7 @@
 }
 
 TEST_F(SpvParserTest, EmitStatement_UseLoadedScalarTwice) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
      %void = OpTypeVoid
      %voidfn = OpTypeFunction %void
      %ty = OpTypeInt 32 0
@@ -258,7 +258,7 @@
 }
 
 TEST_F(SpvParserTest, EmitStatement_StoreToModuleScopeVar) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
      %void = OpTypeVoid
      %voidfn = OpTypeFunction %void
      %ty = OpTypeInt 32 0
diff --git a/src/reader/spirv/function_var_test.cc b/src/reader/spirv/function_var_test.cc
index c53c036..1f929a7 100644
--- a/src/reader/spirv/function_var_test.cc
+++ b/src/reader/spirv/function_var_test.cc
@@ -70,7 +70,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctionVariables_AnonymousVars) {
-  auto p = parser(test::Assemble(CommonTypes() + R"(
+  auto* p = parser(test::Assemble(CommonTypes() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %1 = OpVariable %ptr_uint Function
@@ -108,7 +108,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctionVariables_NamedVars) {
-  auto p = parser(test::Assemble(Names({"a", "b", "c"}) + CommonTypes() + R"(
+  auto* p = parser(test::Assemble(Names({"a", "b", "c"}) + CommonTypes() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %a = OpVariable %ptr_uint Function
@@ -146,7 +146,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctionVariables_MixedTypes) {
-  auto p = parser(test::Assemble(Names({"a", "b", "c"}) + CommonTypes() + R"(
+  auto* p = parser(test::Assemble(Names({"a", "b", "c"}) + CommonTypes() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
      %a = OpVariable %ptr_uint Function
@@ -184,7 +184,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctionVariables_ScalarInitializers) {
-  auto p = parser(
+  auto* p = parser(
       test::Assemble(Names({"a", "b", "c", "d", "e"}) + CommonTypes() + R"(
      %100 = OpFunction %void None %voidfn
      %entry = OpLabel
@@ -254,7 +254,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctionVariables_ScalarNullInitializers) {
-  auto p =
+  auto* p =
       parser(test::Assemble(Names({"a", "b", "c", "d"}) + CommonTypes() + R"(
      %null_bool = OpConstantNull %bool
      %null_int = OpConstantNull %int
@@ -318,7 +318,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctionVariables_VectorInitializer) {
-  auto p = parser(test::Assemble(CommonTypes() + R"(
+  auto* p = parser(test::Assemble(CommonTypes() + R"(
      %ptr = OpTypePointer Function %v2float
      %two = OpConstant %float 2.0
      %const = OpConstantComposite %v2float %float_1p5 %two
@@ -351,7 +351,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctionVariables_MatrixInitializer) {
-  auto p = parser(test::Assemble(CommonTypes() + R"(
+  auto* p = parser(test::Assemble(CommonTypes() + R"(
      %ptr = OpTypePointer Function %m3v2float
      %two = OpConstant %float 2.0
      %three = OpConstant %float 3.0
@@ -402,7 +402,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctionVariables_ArrayInitializer) {
-  auto p = parser(test::Assemble(CommonTypes() + R"(
+  auto* p = parser(test::Assemble(CommonTypes() + R"(
      %ptr = OpTypePointer Function %arr2uint
      %two = OpConstant %uint 2
      %const = OpConstantComposite %arr2uint %uint_1 %two
@@ -435,7 +435,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctionVariables_StructInitializer) {
-  auto p = parser(test::Assemble(CommonTypes() + R"(
+  auto* p = parser(test::Assemble(CommonTypes() + R"(
      %ptr = OpTypePointer Function %strct
      %two = OpConstant %uint 2
      %arrconst = OpConstantComposite %arr2uint %uint_1 %two
diff --git a/src/reader/spirv/parser_impl_convert_member_decoration_test.cc b/src/reader/spirv/parser_impl_convert_member_decoration_test.cc
index d8351a8..19a93a4 100644
--- a/src/reader/spirv/parser_impl_convert_member_decoration_test.cc
+++ b/src/reader/spirv/parser_impl_convert_member_decoration_test.cc
@@ -32,7 +32,7 @@
 using ::testing::Eq;
 
 TEST_F(SpvParserTest, ConvertMemberDecoration_Empty) {
-  auto p = parser(std::vector<uint32_t>{});
+  auto* p = parser(std::vector<uint32_t>{});
 
   auto result = p->ConvertMemberDecoration({});
   EXPECT_EQ(result.get(), nullptr);
@@ -40,7 +40,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertMemberDecoration_OffsetWithoutOperand) {
-  auto p = parser(std::vector<uint32_t>{});
+  auto* p = parser(std::vector<uint32_t>{});
 
   auto result = p->ConvertMemberDecoration({SpvDecorationOffset});
   EXPECT_EQ(result.get(), nullptr);
@@ -50,7 +50,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertMemberDecoration_OffsetWithTooManyOperands) {
-  auto p = parser(std::vector<uint32_t>{});
+  auto* p = parser(std::vector<uint32_t>{});
 
   auto result = p->ConvertMemberDecoration({SpvDecorationOffset, 3, 4});
   EXPECT_EQ(result.get(), nullptr);
@@ -60,19 +60,19 @@
 }
 
 TEST_F(SpvParserTest, ConvertMemberDecoration_Offset) {
-  auto p = parser(std::vector<uint32_t>{});
+  auto* p = parser(std::vector<uint32_t>{});
 
   auto result = p->ConvertMemberDecoration({SpvDecorationOffset, 8});
   ASSERT_NE(result.get(), nullptr);
   EXPECT_TRUE(result->IsOffset());
   auto* offset_deco = result->AsOffset();
   ASSERT_NE(offset_deco, nullptr);
-  EXPECT_EQ(offset_deco->offset(), 8);
+  EXPECT_EQ(offset_deco->offset(), 8u);
   EXPECT_TRUE(p->error().empty());
 }
 
 TEST_F(SpvParserTest, ConvertMemberDecoration_UnhandledDecoration) {
-  auto p = parser(std::vector<uint32_t>{});
+  auto* p = parser(std::vector<uint32_t>{});
 
   auto result = p->ConvertMemberDecoration({12345678});
   EXPECT_EQ(result.get(), nullptr);
diff --git a/src/reader/spirv/parser_impl_convert_type_test.cc b/src/reader/spirv/parser_impl_convert_type_test.cc
index aa0fe09..75746ad 100644
--- a/src/reader/spirv/parser_impl_convert_type_test.cc
+++ b/src/reader/spirv/parser_impl_convert_type_test.cc
@@ -37,7 +37,7 @@
 using ::testing::Eq;
 
 TEST_F(SpvParserTest, ConvertType_PreservesExistingFailure) {
-  auto p = parser(std::vector<uint32_t>{});
+  auto* p = parser(std::vector<uint32_t>{});
   p->Fail() << "boing";
   auto* type = p->ConvertType(10);
   EXPECT_EQ(type, nullptr);
@@ -45,7 +45,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_RequiresInternalRepresntation) {
-  auto p = parser(std::vector<uint32_t>{});
+  auto* p = parser(std::vector<uint32_t>{});
   auto* type = p->ConvertType(10);
   EXPECT_EQ(type, nullptr);
   EXPECT_THAT(
@@ -54,7 +54,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_NotAnId) {
-  auto p = parser(test::Assemble("%1 = OpExtInstImport \"GLSL.std.450\""));
+  auto* p = parser(test::Assemble("%1 = OpExtInstImport \"GLSL.std.450\""));
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(10);
@@ -64,7 +64,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_IdExistsButIsNotAType) {
-  auto p = parser(test::Assemble("%1 = OpExtInstImport \"GLSL.std.450\""));
+  auto* p = parser(test::Assemble("%1 = OpExtInstImport \"GLSL.std.450\""));
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(1);
@@ -74,7 +74,7 @@
 
 TEST_F(SpvParserTest, ConvertType_UnhandledType) {
   // Pipes are an OpenCL type. Tint doesn't support them.
-  auto p = parser(test::Assemble("%70 = OpTypePipe WriteOnly"));
+  auto* p = parser(test::Assemble("%70 = OpTypePipe WriteOnly"));
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(70);
@@ -83,7 +83,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_Void) {
-  auto p = parser(test::Assemble("%1 = OpTypeVoid"));
+  auto* p = parser(test::Assemble("%1 = OpTypeVoid"));
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(1);
@@ -92,7 +92,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_Bool) {
-  auto p = parser(test::Assemble("%100 = OpTypeBool"));
+  auto* p = parser(test::Assemble("%100 = OpTypeBool"));
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(100);
@@ -101,7 +101,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_I32) {
-  auto p = parser(test::Assemble("%2 = OpTypeInt 32 1"));
+  auto* p = parser(test::Assemble("%2 = OpTypeInt 32 1"));
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(2);
@@ -110,7 +110,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_U32) {
-  auto p = parser(test::Assemble("%3 = OpTypeInt 32 0"));
+  auto* p = parser(test::Assemble("%3 = OpTypeInt 32 0"));
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(3);
@@ -119,7 +119,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_F32) {
-  auto p = parser(test::Assemble("%4 = OpTypeFloat 32"));
+  auto* p = parser(test::Assemble("%4 = OpTypeFloat 32"));
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(4);
@@ -128,7 +128,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_BadIntWidth) {
-  auto p = parser(test::Assemble("%5 = OpTypeInt 17 1"));
+  auto* p = parser(test::Assemble("%5 = OpTypeInt 17 1"));
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(5);
@@ -137,7 +137,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_BadFloatWidth) {
-  auto p = parser(test::Assemble("%6 = OpTypeFloat 19"));
+  auto* p = parser(test::Assemble("%6 = OpTypeFloat 19"));
   EXPECT_TRUE(p->BuildInternalModule());
 
   auto* type = p->ConvertType(6);
@@ -146,7 +146,7 @@
 }
 
 TEST_F(SpvParserTest, DISABLED_ConvertType_InvalidVectorElement) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %5 = OpTypePipe ReadOnly
     %20 = OpTypeVector %5 2
   )"));
@@ -158,7 +158,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_VecOverF32) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %float = OpTypeFloat 32
     %20 = OpTypeVector %float 2
     %30 = OpTypeVector %float 3
@@ -185,7 +185,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_VecOverI32) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %int = OpTypeInt 32 1
     %20 = OpTypeVector %int 2
     %30 = OpTypeVector %int 3
@@ -212,7 +212,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_VecOverU32) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %uint = OpTypeInt 32 0
     %20 = OpTypeVector %uint 2
     %30 = OpTypeVector %uint 3
@@ -239,7 +239,7 @@
 }
 
 TEST_F(SpvParserTest, DISABLED_ConvertType_InvalidMatrixElement) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %5 = OpTypePipe ReadOnly
     %10 = OpTypeVector %5 2
     %20 = OpTypeMatrix %10 2
@@ -253,7 +253,7 @@
 
 TEST_F(SpvParserTest, ConvertType_MatrixOverF32) {
   // Matrices are only defined over floats.
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %float = OpTypeFloat 32
     %v2 = OpTypeVector %float 2
     %v3 = OpTypeVector %float 3
@@ -275,62 +275,62 @@
   auto* m22 = p->ConvertType(22);
   EXPECT_TRUE(m22->IsMatrix());
   EXPECT_TRUE(m22->AsMatrix()->type()->IsF32());
-  EXPECT_EQ(m22->AsMatrix()->rows(), 2);
-  EXPECT_EQ(m22->AsMatrix()->columns(), 2);
+  EXPECT_EQ(m22->AsMatrix()->rows(), 2u);
+  EXPECT_EQ(m22->AsMatrix()->columns(), 2u);
 
   auto* m23 = p->ConvertType(23);
   EXPECT_TRUE(m23->IsMatrix());
   EXPECT_TRUE(m23->AsMatrix()->type()->IsF32());
-  EXPECT_EQ(m23->AsMatrix()->rows(), 2);
-  EXPECT_EQ(m23->AsMatrix()->columns(), 3);
+  EXPECT_EQ(m23->AsMatrix()->rows(), 2u);
+  EXPECT_EQ(m23->AsMatrix()->columns(), 3u);
 
   auto* m24 = p->ConvertType(24);
   EXPECT_TRUE(m24->IsMatrix());
   EXPECT_TRUE(m24->AsMatrix()->type()->IsF32());
-  EXPECT_EQ(m24->AsMatrix()->rows(), 2);
-  EXPECT_EQ(m24->AsMatrix()->columns(), 4);
+  EXPECT_EQ(m24->AsMatrix()->rows(), 2u);
+  EXPECT_EQ(m24->AsMatrix()->columns(), 4u);
 
   auto* m32 = p->ConvertType(32);
   EXPECT_TRUE(m32->IsMatrix());
   EXPECT_TRUE(m32->AsMatrix()->type()->IsF32());
-  EXPECT_EQ(m32->AsMatrix()->rows(), 3);
-  EXPECT_EQ(m32->AsMatrix()->columns(), 2);
+  EXPECT_EQ(m32->AsMatrix()->rows(), 3u);
+  EXPECT_EQ(m32->AsMatrix()->columns(), 2u);
 
   auto* m33 = p->ConvertType(33);
   EXPECT_TRUE(m33->IsMatrix());
   EXPECT_TRUE(m33->AsMatrix()->type()->IsF32());
-  EXPECT_EQ(m33->AsMatrix()->rows(), 3);
-  EXPECT_EQ(m33->AsMatrix()->columns(), 3);
+  EXPECT_EQ(m33->AsMatrix()->rows(), 3u);
+  EXPECT_EQ(m33->AsMatrix()->columns(), 3u);
 
   auto* m34 = p->ConvertType(34);
   EXPECT_TRUE(m34->IsMatrix());
   EXPECT_TRUE(m34->AsMatrix()->type()->IsF32());
-  EXPECT_EQ(m34->AsMatrix()->rows(), 3);
-  EXPECT_EQ(m34->AsMatrix()->columns(), 4);
+  EXPECT_EQ(m34->AsMatrix()->rows(), 3u);
+  EXPECT_EQ(m34->AsMatrix()->columns(), 4u);
 
   auto* m42 = p->ConvertType(42);
   EXPECT_TRUE(m42->IsMatrix());
   EXPECT_TRUE(m42->AsMatrix()->type()->IsF32());
-  EXPECT_EQ(m42->AsMatrix()->rows(), 4);
-  EXPECT_EQ(m42->AsMatrix()->columns(), 2);
+  EXPECT_EQ(m42->AsMatrix()->rows(), 4u);
+  EXPECT_EQ(m42->AsMatrix()->columns(), 2u);
 
   auto* m43 = p->ConvertType(43);
   EXPECT_TRUE(m43->IsMatrix());
   EXPECT_TRUE(m43->AsMatrix()->type()->IsF32());
-  EXPECT_EQ(m43->AsMatrix()->rows(), 4);
-  EXPECT_EQ(m43->AsMatrix()->columns(), 3);
+  EXPECT_EQ(m43->AsMatrix()->rows(), 4u);
+  EXPECT_EQ(m43->AsMatrix()->columns(), 3u);
 
   auto* m44 = p->ConvertType(44);
   EXPECT_TRUE(m44->IsMatrix());
   EXPECT_TRUE(m44->AsMatrix()->type()->IsF32());
-  EXPECT_EQ(m44->AsMatrix()->rows(), 4);
-  EXPECT_EQ(m44->AsMatrix()->columns(), 4);
+  EXPECT_EQ(m44->AsMatrix()->rows(), 4u);
+  EXPECT_EQ(m44->AsMatrix()->columns(), 4u);
 
   EXPECT_TRUE(p->error().empty());
 }
 
 TEST_F(SpvParserTest, ConvertType_RuntimeArray) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %uint = OpTypeInt 32 0
     %10 = OpTypeRuntimeArray %uint
   )"));
@@ -350,7 +350,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_Array) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %uint = OpTypeInt 32 0
     %uint_42 = OpConstant %uint 42
     %10 = OpTypeArray %uint %uint_42
@@ -371,7 +371,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_ArrayBadLengthIsSpecConstantValue) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     OpDecorate %uint_42 SpecId 12
     %uint = OpTypeInt 32 0
     %uint_42 = OpSpecConstant %uint 42
@@ -386,7 +386,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_ArrayBadLengthIsSpecConstantExpr) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %uint = OpTypeInt 32 0
     %uint_42 = OpConstant %uint 42
     %sum = OpSpecConstantOp %uint IAdd %uint_42 %uint_42
@@ -405,7 +405,7 @@
 // optimizer representation doesn't handle it and asserts out instead.
 
 TEST_F(SpvParserTest, ConvertType_ArrayBadTooBig) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %uint64 = OpTypeInt 64 0
     %uint64_big = OpConstant %uint64 5000000000
     %10 = OpTypeArray %uint64 %uint64_big
@@ -420,7 +420,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_StructTwoMembers) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %uint = OpTypeInt 32 0
     %float = OpTypeFloat 32
     %10 = OpTypeStruct %uint %float
@@ -441,7 +441,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_StructWithBlockDecoration) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     OpDecorate %10 Block
     %uint = OpTypeInt 32 0
     %10 = OpTypeStruct %uint
@@ -461,7 +461,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_StructWithMemberDecorations) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     OpMemberDecorate %10 0 Offset 0
     OpMemberDecorate %10 1 Offset 8
     OpMemberDecorate %10 2 Offset 16
@@ -493,7 +493,7 @@
 
 TEST_F(SpvParserTest, ConvertType_InvalidPointeetype) {
   // Disallow pointer-to-function
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
   %void = OpTypeVoid
   %42 = OpTypeFunction %void
   %3 = OpTypePointer Input %42
@@ -508,7 +508,7 @@
 
 TEST_F(SpvParserTest, DISABLED_ConvertType_InvalidStorageClass) {
   // Disallow invalid storage class
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
   %1 = OpTypeFloat 32
   %3 = OpTypePointer !999 %1   ; Special syntax to inject 999 as the storage class
   )"));
@@ -517,7 +517,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_PointerInput) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
   %float = OpTypeFloat 32
   %3 = OpTypePointer Input %float
   )"));
@@ -533,7 +533,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_PointerOutput) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
   %float = OpTypeFloat 32
   %3 = OpTypePointer Output %float
   )"));
@@ -549,7 +549,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_PointerUniform) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
   %float = OpTypeFloat 32
   %3 = OpTypePointer Uniform %float
   )"));
@@ -565,7 +565,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_PointerWorkgroup) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
   %float = OpTypeFloat 32
   %3 = OpTypePointer Workgroup %float
   )"));
@@ -581,7 +581,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_PointerUniformConstant) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
   %float = OpTypeFloat 32
   %3 = OpTypePointer UniformConstant %float
   )"));
@@ -597,7 +597,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_PointerStorageBuffer) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
   %float = OpTypeFloat 32
   %3 = OpTypePointer StorageBuffer %float
   )"));
@@ -613,7 +613,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_PointerImage) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
   %float = OpTypeFloat 32
   %3 = OpTypePointer Image %float
   )"));
@@ -629,7 +629,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_PointerPushConstant) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
   %float = OpTypeFloat 32
   %3 = OpTypePointer PushConstant %float
   )"));
@@ -645,7 +645,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_PointerPrivate) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
   %float = OpTypeFloat 32
   %3 = OpTypePointer Private %float
   )"));
@@ -661,7 +661,7 @@
 }
 
 TEST_F(SpvParserTest, ConvertType_PointerFunction) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
   %float = OpTypeFloat 32
   %3 = OpTypePointer Function %float
   )"));
@@ -678,7 +678,7 @@
 
 TEST_F(SpvParserTest, ConvertType_PointerToPointer) {
   // FYI:  The reader suports pointer-to-pointer even while WebGPU does not.
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
   %float = OpTypeFloat 32
   %42 = OpTypePointer Output %float
   %3 = OpTypePointer Input %42
diff --git a/src/reader/spirv/parser_impl_entry_point_test.cc b/src/reader/spirv/parser_impl_entry_point_test.cc
index c216b3b..998f0cf 100644
--- a/src/reader/spirv/parser_impl_entry_point_test.cc
+++ b/src/reader/spirv/parser_impl_entry_point_test.cc
@@ -35,7 +35,7 @@
 }
 
 TEST_F(SpvParserTest, EntryPoint_NoEntryPoint) {
-  auto p = parser(test::Assemble(""));
+  auto* p = parser(test::Assemble(""));
   EXPECT_TRUE(p->BuildAndParseInternalModule());
   EXPECT_TRUE(p->error().empty());
   const auto module_ast = p->module().to_str();
@@ -43,7 +43,7 @@
 }
 
 TEST_F(SpvParserTest, EntryPoint_Vertex) {
-  auto p = parser(test::Assemble(MakeEntryPoint("Vertex", "foobar")));
+  auto* p = parser(test::Assemble(MakeEntryPoint("Vertex", "foobar")));
   EXPECT_TRUE(p->BuildAndParseInternalModule());
   EXPECT_TRUE(p->error().empty());
   const auto module_str = p->module().to_str();
@@ -51,7 +51,7 @@
 }
 
 TEST_F(SpvParserTest, EntryPoint_Fragment) {
-  auto p = parser(test::Assemble(MakeEntryPoint("Fragment", "blitz")));
+  auto* p = parser(test::Assemble(MakeEntryPoint("Fragment", "blitz")));
   EXPECT_TRUE(p->BuildAndParseInternalModule());
   EXPECT_TRUE(p->error().empty());
   const auto module_str = p->module().to_str();
@@ -59,7 +59,7 @@
 }
 
 TEST_F(SpvParserTest, EntryPoint_Compute) {
-  auto p = parser(test::Assemble(MakeEntryPoint("GLCompute", "sort")));
+  auto* p = parser(test::Assemble(MakeEntryPoint("GLCompute", "sort")));
   EXPECT_TRUE(p->BuildAndParseInternalModule());
   EXPECT_TRUE(p->error().empty());
   const auto module_str = p->module().to_str();
@@ -67,9 +67,9 @@
 }
 
 TEST_F(SpvParserTest, EntryPoint_MultiNameConflict) {
-  auto p = parser(test::Assemble(MakeEntryPoint("GLCompute", "work", "40") +
-                                 MakeEntryPoint("Vertex", "work", "50") +
-                                 MakeEntryPoint("Fragment", "work", "60")));
+  auto* p = parser(test::Assemble(MakeEntryPoint("GLCompute", "work", "40") +
+                                  MakeEntryPoint("Vertex", "work", "50") +
+                                  MakeEntryPoint("Fragment", "work", "60")));
   EXPECT_TRUE(p->BuildAndParseInternalModule());
   EXPECT_TRUE(p->error().empty());
   const auto module_str = p->module().to_str();
@@ -79,7 +79,7 @@
 }
 
 TEST_F(SpvParserTest, EntryPoint_NameIsSanitized) {
-  auto p = parser(test::Assemble(MakeEntryPoint("GLCompute", ".1234")));
+  auto* p = parser(test::Assemble(MakeEntryPoint("GLCompute", ".1234")));
   EXPECT_TRUE(p->BuildAndParseInternalModule());
   EXPECT_TRUE(p->error().empty());
   const auto module_str = p->module().to_str();
diff --git a/src/reader/spirv/parser_impl_function_decl_test.cc b/src/reader/spirv/parser_impl_function_decl_test.cc
index 6e29906..ab6f5ab 100644
--- a/src/reader/spirv/parser_impl_function_decl_test.cc
+++ b/src/reader/spirv/parser_impl_function_decl_test.cc
@@ -50,7 +50,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctions_NoFunctions) {
-  auto p = parser(test::Assemble(CommonTypes()));
+  auto* p = parser(test::Assemble(CommonTypes()));
   EXPECT_TRUE(p->BuildAndParseInternalModule());
   EXPECT_TRUE(p->error().empty());
   const auto module_ast = p->module().to_str();
@@ -58,7 +58,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctions_FunctionWithoutBody) {
-  auto p = parser(test::Assemble(Names({"main"}) + CommonTypes() + R"(
+  auto* p = parser(test::Assemble(Names({"main"}) + CommonTypes() + R"(
      %main = OpFunction %void None %voidfn
      OpFunctionEnd
   )"));
@@ -69,7 +69,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctions_VoidFunctionWithoutParams) {
-  auto p = parser(test::Assemble(Names({"main"}) + CommonTypes() + R"(
+  auto* p = parser(test::Assemble(Names({"main"}) + CommonTypes() + R"(
      %main = OpFunction %void None %voidfn
      %entry = OpLabel
      OpReturn
@@ -85,7 +85,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctions_CalleePrecedesCaller) {
-  auto p = parser(
+  auto* p = parser(
       test::Assemble(Names({"root", "branch", "leaf"}) + CommonTypes() + R"(
      %root = OpFunction %void None %voidfn
      %root_entry = OpLabel
@@ -123,7 +123,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctions_NonVoidResultType) {
-  auto p = parser(test::Assemble(Names({"ret_float"}) + CommonTypes() + R"(
+  auto* p = parser(test::Assemble(Names({"ret_float"}) + CommonTypes() + R"(
      %fn_ret_float = OpTypeFunction %float
 
      %ret_float = OpFunction %float None %fn_ret_float
@@ -142,8 +142,8 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctions_MixedParamTypes) {
-  auto p = parser(test::Assemble(Names({"mixed_params", "a", "b", "c"}) +
-                                 CommonTypes() + R"(
+  auto* p = parser(test::Assemble(Names({"mixed_params", "a", "b", "c"}) +
+                                  CommonTypes() + R"(
      %fn_mixed_params = OpTypeFunction %float %uint %float %int
 
      %mixed_params = OpFunction %void None %fn_mixed_params
@@ -181,7 +181,7 @@
 }
 
 TEST_F(SpvParserTest, EmitFunctions_GenerateParamNames) {
-  auto p = parser(test::Assemble(Names({"mixed_params"}) + CommonTypes() + R"(
+  auto* p = parser(test::Assemble(Names({"mixed_params"}) + CommonTypes() + R"(
      %fn_mixed_params = OpTypeFunction %float %uint %float %int
 
      %mixed_params = OpFunction %void None %fn_mixed_params
diff --git a/src/reader/spirv/parser_impl_get_decorations_test.cc b/src/reader/spirv/parser_impl_get_decorations_test.cc
index 113a7a7..542332c 100644
--- a/src/reader/spirv/parser_impl_get_decorations_test.cc
+++ b/src/reader/spirv/parser_impl_get_decorations_test.cc
@@ -27,7 +27,7 @@
 using ::testing::UnorderedElementsAre;
 
 TEST_F(SpvParserTest, GetDecorationsFor_NotAnId) {
-  auto p = parser(test::Assemble(""));
+  auto* p = parser(test::Assemble(""));
   EXPECT_TRUE(p->BuildAndParseInternalModule());
   auto decorations = p->GetDecorationsFor(42);
   EXPECT_TRUE(decorations.empty());
@@ -35,7 +35,7 @@
 }
 
 TEST_F(SpvParserTest, GetDecorationsFor_NoDecorations) {
-  auto p = parser(test::Assemble("%1 = OpTypeVoid"));
+  auto* p = parser(test::Assemble("%1 = OpTypeVoid"));
   EXPECT_TRUE(p->BuildAndParseInternalModule());
   auto decorations = p->GetDecorationsFor(1);
   EXPECT_TRUE(decorations.empty());
@@ -43,7 +43,7 @@
 }
 
 TEST_F(SpvParserTest, GetDecorationsFor_OneDecoration) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     OpDecorate %10 Block
     %float = OpTypeFloat 32
     %10 = OpTypeStruct %float
@@ -56,7 +56,7 @@
 }
 
 TEST_F(SpvParserTest, GetDecorationsFor_MultiDecoration) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     OpDecorate %5 RelaxedPrecision
     OpDecorate %5 Location 7      ; Invalid case made up for test
     %float = OpTypeFloat 32
@@ -71,7 +71,7 @@
 }
 
 TEST_F(SpvParserTest, GetDecorationsForMember_NotAnId) {
-  auto p = parser(test::Assemble(""));
+  auto* p = parser(test::Assemble(""));
   EXPECT_TRUE(p->BuildAndParseInternalModule());
   auto decorations = p->GetDecorationsForMember(42, 9);
   EXPECT_TRUE(decorations.empty());
@@ -79,7 +79,7 @@
 }
 
 TEST_F(SpvParserTest, GetDecorationsForMember_NotAStruct) {
-  auto p = parser(test::Assemble("%1 = OpTypeVoid"));
+  auto* p = parser(test::Assemble("%1 = OpTypeVoid"));
   EXPECT_TRUE(p->BuildAndParseInternalModule());
   auto decorations = p->GetDecorationsFor(1);
   EXPECT_TRUE(decorations.empty());
@@ -87,7 +87,7 @@
 }
 
 TEST_F(SpvParserTest, GetDecorationsForMember_MemberWithoutDecoration) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %uint = OpTypeInt 32 0
     %10 = OpTypeStruct %uint
   )"));
@@ -99,7 +99,7 @@
 
 // TODO(dneto): Enable when ArrayStride is handled
 TEST_F(SpvParserTest, DISABLED_GetDecorationsForMember_OneDecoration) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     OpMemberDecorate %10 1 ArrayStride 12
     %uint = OpTypeInt 32 0
     %uint_2 = OpConstant %uint 2
@@ -117,7 +117,7 @@
 // crbug.com/tint/30 for ArrayStride
 // crbug.com/tint/31 for matrix layout
 TEST_F(SpvParserTest, DISABLED_GetDecorationsForMember_MultiDecoration) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     OpMemberDecorate %50 1 RelaxedPrecision
     OpMemberDecorate %50 2 ArrayStride 16
     OpMemberDecorate %50 2 MatrixStride 8
diff --git a/src/reader/spirv/parser_impl_import_test.cc b/src/reader/spirv/parser_impl_import_test.cc
index 4febd6e..afa78a3 100644
--- a/src/reader/spirv/parser_impl_import_test.cc
+++ b/src/reader/spirv/parser_impl_import_test.cc
@@ -32,7 +32,7 @@
 using ::testing::UnorderedElementsAre;
 
 TEST_F(SpvParserTest, Import_NoImport) {
-  auto p = parser(test::Assemble("%1 = OpTypeVoid"));
+  auto* p = parser(test::Assemble("%1 = OpTypeVoid"));
   EXPECT_TRUE(p->BuildAndParseInternalModule());
   EXPECT_TRUE(p->error().empty());
   const auto module_ast = p->module().to_str();
@@ -40,7 +40,7 @@
 }
 
 TEST_F(SpvParserTest, Import_ImportGlslStd450) {
-  auto p = parser(test::Assemble(R"(%1 = OpExtInstImport "GLSL.std.450")"));
+  auto* p = parser(test::Assemble(R"(%1 = OpExtInstImport "GLSL.std.450")"));
   EXPECT_TRUE(p->BuildAndParseInternalModule());
   EXPECT_TRUE(p->error().empty());
   EXPECT_THAT(p->glsl_std_450_imports(), ElementsAre(1));
@@ -49,7 +49,7 @@
 }
 
 TEST_F(SpvParserTest, Import_ImportGlslStd450Twice) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %1  = OpExtInstImport "GLSL.std.450"
     %42 = OpExtInstImport "GLSL.std.450"
   )"));
@@ -57,7 +57,7 @@
   EXPECT_TRUE(p->error().empty());
   EXPECT_THAT(p->glsl_std_450_imports(), UnorderedElementsAre(1, 42));
   const auto module = p->module();
-  EXPECT_EQ(module.imports().size(), 1);
+  EXPECT_EQ(module.imports().size(), 1u);
   const auto module_ast = module.to_str();
   // TODO(dneto): Use a matcher to show there is only one import.
   EXPECT_THAT(module_ast, HasSubstr(R"(Import{"GLSL.std.450" as std::glsl})"));
diff --git a/src/reader/spirv/parser_impl_module_var_test.cc b/src/reader/spirv/parser_impl_module_var_test.cc
index 547ae00..eb60d25 100644
--- a/src/reader/spirv/parser_impl_module_var_test.cc
+++ b/src/reader/spirv/parser_impl_module_var_test.cc
@@ -59,7 +59,7 @@
 }
 
 TEST_F(SpvParserTest, ModuleScopeVar_NoVar) {
-  auto p = parser(test::Assemble(""));
+  auto* p = parser(test::Assemble(""));
   EXPECT_TRUE(p->BuildAndParseInternalModule());
   EXPECT_TRUE(p->error().empty());
   const auto module_ast = p->module().to_str();
@@ -67,7 +67,7 @@
 }
 
 TEST_F(SpvParserTest, ModuleScopeVar_BadStorageClass) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %float = OpTypeFloat 32
     %ptr = OpTypePointer CrossWorkgroup %float
     %52 = OpVariable %ptr CrossWorkgroup
@@ -81,7 +81,7 @@
 }
 
 TEST_F(SpvParserTest, ModuleScopeVar_BadPointerType) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %float = OpTypeFloat 32
     %fn_ty = OpTypeFunction %float
     %3 = OpTypePointer Private %fn_ty
@@ -97,7 +97,7 @@
 }
 
 TEST_F(SpvParserTest, ModuleScopeVar_AnonWorkgroupVar) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %float = OpTypeFloat 32
     %ptr = OpTypePointer Workgroup %float
     %52 = OpVariable %ptr Workgroup
@@ -115,7 +115,7 @@
 }
 
 TEST_F(SpvParserTest, ModuleScopeVar_NamedWorkgroupVar) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     OpName %52 "the_counter"
     %float = OpTypeFloat 32
     %ptr = OpTypePointer Workgroup %float
@@ -134,7 +134,7 @@
 }
 
 TEST_F(SpvParserTest, ModuleScopeVar_PrivateVar) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     OpName %52 "my_own_private_idaho"
     %float = OpTypeFloat 32
     %ptr = OpTypePointer Private %float
@@ -153,7 +153,7 @@
 }
 
 TEST_F(SpvParserTest, ModuleScopeVar_BuiltinVerteIndex) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     OpDecorate %52 BuiltIn VertexIndex
     %uint = OpTypeInt 32 0
     %ptr = OpTypePointer Input %uint
@@ -175,7 +175,7 @@
 }
 
 TEST_F(SpvParserTest, ModuleScopeVar_ScalarInitializers) {
-  auto p = parser(test::Assemble(CommonTypes() + R"(
+  auto* p = parser(test::Assemble(CommonTypes() + R"(
      %1 = OpVariable %ptr_bool Private %true
      %2 = OpVariable %ptr_bool Private %false
      %3 = OpVariable %ptr_int Private %int_m1
@@ -228,7 +228,7 @@
 }
 
 TEST_F(SpvParserTest, ModuleScopeVar_ScalarNullInitializers) {
-  auto p = parser(test::Assemble(CommonTypes() + R"(
+  auto* p = parser(test::Assemble(CommonTypes() + R"(
      %null_bool = OpConstantNull %bool
      %null_int = OpConstantNull %int
      %null_uint = OpConstantNull %uint
@@ -277,7 +277,7 @@
 }
 
 TEST_F(SpvParserTest, ModuleScopeVar_VectorInitializer) {
-  auto p = parser(test::Assemble(CommonTypes() + R"(
+  auto* p = parser(test::Assemble(CommonTypes() + R"(
      %ptr = OpTypePointer Private %v2float
      %two = OpConstant %float 2.0
      %const = OpConstantComposite %v2float %float_1p5 %two
@@ -301,7 +301,7 @@
 }
 
 TEST_F(SpvParserTest, ModuleScopeVar_MatrixInitializer) {
-  auto p = parser(test::Assemble(CommonTypes() + R"(
+  auto* p = parser(test::Assemble(CommonTypes() + R"(
      %ptr = OpTypePointer Private %m3v2float
      %two = OpConstant %float 2.0
      %three = OpConstant %float 3.0
@@ -343,7 +343,7 @@
 }
 
 TEST_F(SpvParserTest, ModuleScopeVar_ArrayInitializer) {
-  auto p = parser(test::Assemble(CommonTypes() + R"(
+  auto* p = parser(test::Assemble(CommonTypes() + R"(
      %ptr = OpTypePointer Private %arr2uint
      %two = OpConstant %uint 2
      %const = OpConstantComposite %arr2uint %uint_1 %two
@@ -367,7 +367,7 @@
 }
 
 TEST_F(SpvParserTest, ModuleScopeVar_StructInitializer) {
-  auto p = parser(test::Assemble(CommonTypes() + R"(
+  auto* p = parser(test::Assemble(CommonTypes() + R"(
      %ptr = OpTypePointer Private %strct
      %two = OpConstant %uint 2
      %arrconst = OpConstantComposite %arr2uint %uint_1 %two
diff --git a/src/reader/spirv/parser_impl_named_types_test.cc b/src/reader/spirv/parser_impl_named_types_test.cc
index cebfa10..0c6ba73 100644
--- a/src/reader/spirv/parser_impl_named_types_test.cc
+++ b/src/reader/spirv/parser_impl_named_types_test.cc
@@ -35,7 +35,7 @@
 using ::testing::HasSubstr;
 
 TEST_F(SpvParserTest, NamedTypes_AnonStruct) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %uint = OpTypeInt 32 0
     %s = OpTypeStruct %uint %uint
   )"));
@@ -44,7 +44,7 @@
 }
 
 TEST_F(SpvParserTest, NamedTypes_NamedStruct) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     OpName %s "mystruct"
     %uint = OpTypeInt 32 0
     %s = OpTypeStruct %uint %uint
@@ -55,7 +55,7 @@
 
 // TODO(dneto): Enable this when array types can have ArrayStride
 TEST_F(SpvParserTest, DISABLED_NamedTypes_AnonArrayWithDecoration) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     OpDecorate %arr ArrayStride 16
     %uint = OpTypeInt 32 0
     %uint_3 = OpConstant %uint 3
@@ -69,7 +69,7 @@
 // an OpName?
 
 TEST_F(SpvParserTest, NamedTypes_AnonRTArray) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     %uint = OpTypeInt 32 0
     %arr = OpTypeRuntimeArray %uint
   )"));
@@ -78,7 +78,7 @@
 }
 
 TEST_F(SpvParserTest, NamedTypes_NamedRTArray) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
     OpName %arr "myrtarr"
     %uint = OpTypeInt 32 0
     %arr = OpTypeRuntimeArray %uint
diff --git a/src/reader/spirv/parser_impl_test.cc b/src/reader/spirv/parser_impl_test.cc
index 94e944e..fe8114a 100644
--- a/src/reader/spirv/parser_impl_test.cc
+++ b/src/reader/spirv/parser_impl_test.cc
@@ -30,14 +30,14 @@
 
 TEST_F(SpvParserTest, Impl_Uint32VecEmpty) {
   std::vector<uint32_t> data;
-  auto p = parser(data);
+  auto* p = parser(data);
   EXPECT_FALSE(p->Parse());
   // TODO(dneto): What message?
 }
 
 TEST_F(SpvParserTest, Impl_InvalidModuleFails) {
   auto invalid_spv = test::Assemble("%ty = OpTypeInt 3 0");
-  auto p = parser(invalid_spv);
+  auto* p = parser(invalid_spv);
   EXPECT_FALSE(p->Parse());
   EXPECT_THAT(
       p->error(),
diff --git a/src/reader/spirv/parser_impl_test_helper.h b/src/reader/spirv/parser_impl_test_helper.h
index 4e98d26..18132ef 100644
--- a/src/reader/spirv/parser_impl_test_helper.h
+++ b/src/reader/spirv/parser_impl_test_helper.h
@@ -37,10 +37,10 @@
   ~SpvParserTestBase() = default;
 
   /// Sets up the test helper
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
   /// Tears down the test helper
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   /// Retrieves the parser from the helper
   /// @param input the SPIR-V binary to parse
diff --git a/src/reader/spirv/parser_impl_user_name_test.cc b/src/reader/spirv/parser_impl_user_name_test.cc
index ebe2761..acbe71e 100644
--- a/src/reader/spirv/parser_impl_user_name_test.cc
+++ b/src/reader/spirv/parser_impl_user_name_test.cc
@@ -28,7 +28,7 @@
 using ::testing::Eq;
 
 TEST_F(SpvParserTest, UserName_RespectOpName) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
      OpName %1 "the_void_type"
      %1 = OpTypeVoid
   )"));
@@ -37,7 +37,7 @@
 }
 
 TEST_F(SpvParserTest, UserName_DistinguishDuplicateSuggestion) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
      OpName %1 "vanilla"
      OpName %2 "vanilla"
      %1 = OpTypeVoid
@@ -49,7 +49,7 @@
 }
 
 TEST_F(SpvParserTest, UserName_RespectOpMemberName) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
      OpMemberName %3 0 "strawberry"
      OpMemberName %3 1 "vanilla"
      OpMemberName %3 2 "chocolate"
@@ -63,7 +63,7 @@
 }
 
 TEST_F(SpvParserTest, UserName_SynthesizeMemberNames) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
      %2 = OpTypeInt 32 0
      %3 = OpTypeStruct %2 %2 %2
   )"));
@@ -74,7 +74,7 @@
 }
 
 TEST_F(SpvParserTest, UserName_MemberNamesMixUserAndSynthesized) {
-  auto p = parser(test::Assemble(R"(
+  auto* p = parser(test::Assemble(R"(
      OpMemberName %3 1 "vanilla"
      %2 = OpTypeInt 32 0
      %3 = OpTypeStruct %2 %2 %2
diff --git a/src/reader/wgsl/lexer_test.cc b/src/reader/wgsl/lexer_test.cc
index 29b5ee2..3d7027f 100644
--- a/src/reader/wgsl/lexer_test.cc
+++ b/src/reader/wgsl/lexer_test.cc
@@ -36,8 +36,8 @@
 
   auto t = l.next();
   EXPECT_TRUE(t.IsIdentifier());
-  EXPECT_EQ(t.line(), 2);
-  EXPECT_EQ(t.column(), 6);
+  EXPECT_EQ(t.line(), 2u);
+  EXPECT_EQ(t.column(), 6u);
   EXPECT_EQ(t.to_str(), "ident");
 
   t = l.next();
@@ -52,14 +52,14 @@
 
   auto t = l.next();
   EXPECT_TRUE(t.IsIdentifier());
-  EXPECT_EQ(t.line(), 2);
-  EXPECT_EQ(t.column(), 1);
+  EXPECT_EQ(t.line(), 2u);
+  EXPECT_EQ(t.column(), 1u);
   EXPECT_EQ(t.to_str(), "ident1");
 
   t = l.next();
   EXPECT_TRUE(t.IsIdentifier());
-  EXPECT_EQ(t.line(), 4);
-  EXPECT_EQ(t.column(), 2);
+  EXPECT_EQ(t.line(), 4u);
+  EXPECT_EQ(t.column(), 2u);
   EXPECT_EQ(t.to_str(), "ident2");
 
   t = l.next();
@@ -72,20 +72,20 @@
   auto t = l.next();
   EXPECT_TRUE(t.IsIdentifier());
   EXPECT_EQ(t.to_str(), "id");
-  EXPECT_EQ(1, t.line());
-  EXPECT_EQ(1, t.column());
+  EXPECT_EQ(1u, t.line());
+  EXPECT_EQ(1u, t.column());
 
   t = l.next();
   EXPECT_TRUE(t.IsStringLiteral());
   EXPECT_EQ(t.to_str(), "this is string content");
-  EXPECT_EQ(1, t.line());
-  EXPECT_EQ(4, t.column());
+  EXPECT_EQ(1u, t.line());
+  EXPECT_EQ(4u, t.column());
 
   t = l.next();
   EXPECT_TRUE(t.IsIdentifier());
   EXPECT_EQ(t.to_str(), "id2");
-  EXPECT_EQ(1, t.line());
-  EXPECT_EQ(29, t.column());
+  EXPECT_EQ(1u, t.line());
+  EXPECT_EQ(29u, t.column());
 }
 
 TEST_F(LexerTest, StringTest_Unterminated) {
@@ -94,8 +94,8 @@
   auto t = l.next();
   EXPECT_TRUE(t.IsIdentifier());
   EXPECT_EQ(t.to_str(), "id");
-  EXPECT_EQ(1, t.line());
-  EXPECT_EQ(1, t.column());
+  EXPECT_EQ(1u, t.line());
+  EXPECT_EQ(1u, t.column());
 
   t = l.next();
   EXPECT_TRUE(t.IsStringLiteral());
@@ -121,8 +121,8 @@
   auto t = l.next();
   EXPECT_TRUE(t.IsFloatLiteral());
   EXPECT_EQ(t.to_f32(), params.result);
-  EXPECT_EQ(1, t.line());
-  EXPECT_EQ(1, t.column());
+  EXPECT_EQ(1u, t.line());
+  EXPECT_EQ(1u, t.column());
 
   t = l.next();
   EXPECT_TRUE(t.IsEof());
@@ -170,8 +170,8 @@
 
   auto t = l.next();
   EXPECT_TRUE(t.IsIdentifier());
-  EXPECT_EQ(t.line(), 1);
-  EXPECT_EQ(t.column(), 1);
+  EXPECT_EQ(t.line(), 1u);
+  EXPECT_EQ(t.column(), 1u);
   EXPECT_EQ(t.to_str(), GetParam());
 }
 INSTANTIATE_TEST_SUITE_P(
@@ -202,8 +202,8 @@
 
   auto t = l.next();
   EXPECT_TRUE(t.IsIntLiteral());
-  EXPECT_EQ(t.line(), 1);
-  EXPECT_EQ(t.column(), 1);
+  EXPECT_EQ(t.line(), 1u);
+  EXPECT_EQ(t.column(), 1u);
   EXPECT_EQ(t.to_i32(), params.result);
 }
 INSTANTIATE_TEST_SUITE_P(
@@ -246,8 +246,8 @@
 
   auto t = l.next();
   EXPECT_TRUE(t.IsUintLiteral());
-  EXPECT_EQ(t.line(), 1);
-  EXPECT_EQ(t.column(), 1);
+  EXPECT_EQ(t.line(), 1u);
+  EXPECT_EQ(t.column(), 1u);
   EXPECT_EQ(t.to_u32(), params.result);
 }
 INSTANTIATE_TEST_SUITE_P(
@@ -284,8 +284,8 @@
   auto t = l.next();
   EXPECT_TRUE(t.IsUintLiteral());
   EXPECT_EQ(t.to_u32(), params.result);
-  EXPECT_EQ(1, t.line());
-  EXPECT_EQ(1, t.column());
+  EXPECT_EQ(1u, t.line());
+  EXPECT_EQ(1u, t.column());
 }
 INSTANTIATE_TEST_SUITE_P(LexerTest,
                          IntegerTest_Unsigned,
@@ -310,8 +310,8 @@
   auto t = l.next();
   EXPECT_TRUE(t.IsIntLiteral());
   EXPECT_EQ(t.to_i32(), params.result);
-  EXPECT_EQ(1, t.line());
-  EXPECT_EQ(1, t.column());
+  EXPECT_EQ(1u, t.line());
+  EXPECT_EQ(1u, t.column());
 }
 INSTANTIATE_TEST_SUITE_P(
     LexerTest,
@@ -350,8 +350,8 @@
 
   auto t = l.next();
   EXPECT_TRUE(t.Is(params.type));
-  EXPECT_EQ(1, t.line());
-  EXPECT_EQ(1, t.column());
+  EXPECT_EQ(1u, t.line());
+  EXPECT_EQ(1u, t.column());
 
   t = l.next();
   EXPECT_EQ(1 + std::string(params.input).size(), t.column());
@@ -399,8 +399,8 @@
 
   auto t = l.next();
   EXPECT_TRUE(t.Is(params.type));
-  EXPECT_EQ(1, t.line());
-  EXPECT_EQ(1, t.column());
+  EXPECT_EQ(1u, t.line());
+  EXPECT_EQ(1u, t.column());
 
   t = l.next();
   EXPECT_EQ(1 + std::string(params.input).size(), t.column());
@@ -500,7 +500,7 @@
 
 using KeywordTest_Reserved = testing::TestWithParam<const char*>;
 TEST_P(KeywordTest_Reserved, Parses) {
-  auto keyword = GetParam();
+  auto* keyword = GetParam();
   Lexer l(keyword);
 
   auto t = l.next();
diff --git a/src/reader/wgsl/parser_impl_additive_expression_test.cc b/src/reader/wgsl/parser_impl_additive_expression_test.cc
index 38d92ea..25c772a 100644
--- a/src/reader/wgsl/parser_impl_additive_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_additive_expression_test.cc
@@ -26,58 +26,58 @@
 namespace {
 
 TEST_F(ParserImplTest, AdditiveExpression_Parses_Plus) {
-  auto p = parser("a + true");
+  auto* p = parser("a + true");
   auto e = p->additive_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kAdd, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, AdditiveExpression_Parses_Minus) {
-  auto p = parser("a - true");
+  auto* p = parser("a - true");
   auto e = p->additive_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kSubtract, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, AdditiveExpression_InvalidLHS) {
-  auto p = parser("if (a) {} + true");
+  auto* p = parser("if (a) {} + true");
   auto e = p->additive_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_EQ(e, nullptr);
 }
 
 TEST_F(ParserImplTest, AdditiveExpression_InvalidRHS) {
-  auto p = parser("true + if (a) {}");
+  auto* p = parser("true + if (a) {}");
   auto e = p->additive_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -85,7 +85,7 @@
 }
 
 TEST_F(ParserImplTest, AdditiveExpression_NoOr_ReturnsLHS) {
-  auto p = parser("a true");
+  auto* p = parser("a true");
   auto e = p->additive_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_and_expression_test.cc b/src/reader/wgsl/parser_impl_and_expression_test.cc
index 49ef84a..d708267 100644
--- a/src/reader/wgsl/parser_impl_and_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_and_expression_test.cc
@@ -26,36 +26,36 @@
 namespace {
 
 TEST_F(ParserImplTest, AndExpression_Parses) {
-  auto p = parser("a & true");
+  auto* p = parser("a & true");
   auto e = p->and_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kAnd, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, AndExpression_InvalidLHS) {
-  auto p = parser("if (a) {} & true");
+  auto* p = parser("if (a) {} & true");
   auto e = p->and_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_EQ(e, nullptr);
 }
 
 TEST_F(ParserImplTest, AndExpression_InvalidRHS) {
-  auto p = parser("true & if (a) {}");
+  auto* p = parser("true & if (a) {}");
   auto e = p->and_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -63,7 +63,7 @@
 }
 
 TEST_F(ParserImplTest, AndExpression_NoOr_ReturnsLHS) {
-  auto p = parser("a true");
+  auto* p = parser("a true");
   auto e = p->and_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_argument_expression_list_test.cc b/src/reader/wgsl/parser_impl_argument_expression_list_test.cc
index 650ff96..4061b11 100644
--- a/src/reader/wgsl/parser_impl_argument_expression_list_test.cc
+++ b/src/reader/wgsl/parser_impl_argument_expression_list_test.cc
@@ -29,34 +29,34 @@
 namespace {
 
 TEST_F(ParserImplTest, ArgumentExpressionList_Parses) {
-  auto p = parser("a");
+  auto* p = parser("a");
   auto e = p->argument_expression_list();
   ASSERT_FALSE(p->has_error()) << p->error();
 
-  ASSERT_EQ(e.size(), 1);
+  ASSERT_EQ(e.size(), 1u);
   ASSERT_TRUE(e[0]->IsIdentifier());
 }
 
 TEST_F(ParserImplTest, ArgumentExpressionList_ParsesMultiple) {
-  auto p = parser("a, -33, 1+2");
+  auto* p = parser("a, -33, 1+2");
   auto e = p->argument_expression_list();
   ASSERT_FALSE(p->has_error()) << p->error();
 
-  ASSERT_EQ(e.size(), 3);
+  ASSERT_EQ(e.size(), 3u);
   ASSERT_TRUE(e[0]->IsIdentifier());
   ASSERT_TRUE(e[1]->IsConstructor());
   ASSERT_TRUE(e[2]->IsBinary());
 }
 
 TEST_F(ParserImplTest, ArgumentExpressionList_HandlesMissingExpression) {
-  auto p = parser("a, ");
+  auto* p = parser("a, ");
   auto e = p->argument_expression_list();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:4: unable to parse argument expression after comma");
 }
 
 TEST_F(ParserImplTest, ArgumentExpressionList_HandlesInvalidExpression) {
-  auto p = parser("if(a) {}");
+  auto* p = parser("if(a) {}");
   auto e = p->argument_expression_list();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:1: unable to parse argument expression");
diff --git a/src/reader/wgsl/parser_impl_assignment_stmt_test.cc b/src/reader/wgsl/parser_impl_assignment_stmt_test.cc
index b4cc88d..581b62b 100644
--- a/src/reader/wgsl/parser_impl_assignment_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_assignment_stmt_test.cc
@@ -29,7 +29,7 @@
 namespace {
 
 TEST_F(ParserImplTest, AssignmentStmt_Parses_ToVariable) {
-  auto p = parser("a = 123");
+  auto* p = parser("a = 123");
   auto e = p->assignment_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -39,21 +39,21 @@
   ASSERT_NE(e->rhs(), nullptr);
 
   ASSERT_TRUE(e->lhs()->IsIdentifier());
-  auto ident = e->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = e->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(e->rhs()->IsConstructor());
   ASSERT_TRUE(e->rhs()->AsConstructor()->IsScalarConstructor());
 
-  auto init = e->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = e->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_NE(init->literal(), nullptr);
   ASSERT_TRUE(init->literal()->IsInt());
   EXPECT_EQ(init->literal()->AsInt()->value(), 123);
 }
 
 TEST_F(ParserImplTest, AssignmentStmt_Parses_ToMember) {
-  auto p = parser("a.b.c[2].d = 123");
+  auto* p = parser("a.b.c[2].d = 123");
   auto e = p->assignment_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -64,21 +64,21 @@
 
   ASSERT_TRUE(e->rhs()->IsConstructor());
   ASSERT_TRUE(e->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = e->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = e->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_NE(init->literal(), nullptr);
   ASSERT_TRUE(init->literal()->IsInt());
   EXPECT_EQ(init->literal()->AsInt()->value(), 123);
 
   ASSERT_TRUE(e->lhs()->IsMemberAccessor());
-  auto mem = e->lhs()->AsMemberAccessor();
+  auto* mem = e->lhs()->AsMemberAccessor();
 
   ASSERT_TRUE(mem->member()->IsIdentifier());
-  auto ident = mem->member()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = mem->member()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "d");
 
   ASSERT_TRUE(mem->structure()->IsArrayAccessor());
-  auto ary = mem->structure()->AsArrayAccessor();
+  auto* ary = mem->structure()->AsArrayAccessor();
 
   ASSERT_TRUE(ary->idx_expr()->IsConstructor());
   ASSERT_TRUE(ary->idx_expr()->AsConstructor()->IsScalarConstructor());
@@ -91,7 +91,7 @@
   mem = ary->array()->AsMemberAccessor();
   ASSERT_TRUE(mem->member()->IsIdentifier());
   ident = mem->member()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "c");
 
   ASSERT_TRUE(mem->structure()->IsMemberAccessor());
@@ -99,17 +99,17 @@
 
   ASSERT_TRUE(mem->structure()->IsIdentifier());
   ident = mem->structure()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(mem->member()->IsIdentifier());
   ident = mem->member()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "b");
 }
 
 TEST_F(ParserImplTest, AssignmentStmt_MissingEqual) {
-  auto p = parser("a.b.c[2].d 123");
+  auto* p = parser("a.b.c[2].d 123");
   auto e = p->assignment_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -117,14 +117,14 @@
 }
 
 TEST_F(ParserImplTest, AssignmentStmt_InvalidLHS) {
-  auto p = parser("if (true) {} = 123");
+  auto* p = parser("if (true) {} = 123");
   auto e = p->assignment_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_EQ(e, nullptr);
 }
 
 TEST_F(ParserImplTest, AssignmentStmt_InvalidRHS) {
-  auto p = parser("a.b.c[2].d = if (true) {}");
+  auto* p = parser("a.b.c[2].d = if (true) {}");
   auto e = p->assignment_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_body_stmt_test.cc b/src/reader/wgsl/parser_impl_body_stmt_test.cc
index a92a001..6f16508 100644
--- a/src/reader/wgsl/parser_impl_body_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_body_stmt_test.cc
@@ -22,35 +22,35 @@
 namespace {
 
 TEST_F(ParserImplTest, BodyStmt) {
-  auto p = parser(R"({
+  auto* p = parser(R"({
   kill;
   nop;
   return 1 + b / 2;
 })");
   auto e = p->body_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
-  ASSERT_EQ(e.size(), 3);
+  ASSERT_EQ(e.size(), 3u);
   EXPECT_TRUE(e[0]->IsKill());
   EXPECT_TRUE(e[1]->IsNop());
   EXPECT_TRUE(e[2]->IsReturn());
 }
 
 TEST_F(ParserImplTest, BodyStmt_Empty) {
-  auto p = parser("{}");
+  auto* p = parser("{}");
   auto e = p->body_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
-  EXPECT_EQ(e.size(), 0);
+  EXPECT_EQ(e.size(), 0u);
 }
 
 TEST_F(ParserImplTest, BodyStmt_InvalidStmt) {
-  auto p = parser("{fn main() -> void {}}");
+  auto* p = parser("{fn main() -> void {}}");
   auto e = p->body_stmt();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:2: missing }");
 }
 
 TEST_F(ParserImplTest, BodyStmt_MissingRightParen) {
-  auto p = parser("{return;");
+  auto* p = parser("{return;");
   auto e = p->body_stmt();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:9: missing }");
diff --git a/src/reader/wgsl/parser_impl_break_stmt_test.cc b/src/reader/wgsl/parser_impl_break_stmt_test.cc
index 688c5b8..45ff183 100644
--- a/src/reader/wgsl/parser_impl_break_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_break_stmt_test.cc
@@ -25,7 +25,7 @@
 namespace {
 
 TEST_F(ParserImplTest, BreakStmt) {
-  auto p = parser("break");
+  auto* p = parser("break");
   auto e = p->break_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -35,7 +35,7 @@
 }
 
 TEST_F(ParserImplTest, BreakStmt_WithIf) {
-  auto p = parser("break if (a == b)");
+  auto* p = parser("break if (a == b)");
   auto e = p->break_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -46,7 +46,7 @@
 }
 
 TEST_F(ParserImplTest, BreakStmt_WithUnless) {
-  auto p = parser("break unless (a == b)");
+  auto* p = parser("break unless (a == b)");
   auto e = p->break_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -57,7 +57,7 @@
 }
 
 TEST_F(ParserImplTest, BreakStmt_InvalidRHS) {
-  auto p = parser("break if (a = b)");
+  auto* p = parser("break if (a = b)");
   auto e = p->break_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -65,7 +65,7 @@
 }
 
 TEST_F(ParserImplTest, BreakStmt_MissingRHS) {
-  auto p = parser("break if");
+  auto* p = parser("break if");
   auto e = p->break_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_builtin_decoration_test.cc b/src/reader/wgsl/parser_impl_builtin_decoration_test.cc
index 47cb2f8..7a4cb92 100644
--- a/src/reader/wgsl/parser_impl_builtin_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_builtin_decoration_test.cc
@@ -36,9 +36,9 @@
   BuiltinTest() = default;
   ~BuiltinTest() = default;
 
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   ParserImpl* parser(const std::string& str) {
     impl_ = std::make_unique<ParserImpl>(&ctx_, str);
@@ -52,7 +52,7 @@
 
 TEST_P(BuiltinTest, Parses) {
   auto params = GetParam();
-  auto p = parser(params.input);
+  auto* p = parser(params.input);
 
   auto builtin = p->builtin_decoration();
   ASSERT_FALSE(p->has_error());
@@ -79,7 +79,7 @@
                     ast::Builtin::kGlobalInvocationId}));
 
 TEST_F(ParserImplTest, BuiltinDecoration_NoMatch) {
-  auto p = parser("not-a-builtin");
+  auto* p = parser("not-a-builtin");
   auto builtin = p->builtin_decoration();
   ASSERT_EQ(builtin, ast::Builtin::kNone);
 
diff --git a/src/reader/wgsl/parser_impl_case_body_test.cc b/src/reader/wgsl/parser_impl_case_body_test.cc
index d02a599..8196c5b 100644
--- a/src/reader/wgsl/parser_impl_case_body_test.cc
+++ b/src/reader/wgsl/parser_impl_case_body_test.cc
@@ -22,45 +22,45 @@
 namespace {
 
 TEST_F(ParserImplTest, CaseBody_Empty) {
-  auto p = parser("");
+  auto* p = parser("");
   auto e = p->case_body();
   ASSERT_FALSE(p->has_error()) << p->error();
-  EXPECT_EQ(e.size(), 0);
+  EXPECT_EQ(e.size(), 0u);
 }
 
 TEST_F(ParserImplTest, CaseBody_Statements) {
-  auto p = parser(R"(
+  auto* p = parser(R"(
   var a: i32;
   a = 2;)");
 
   auto e = p->case_body();
   ASSERT_FALSE(p->has_error()) << p->error();
-  ASSERT_EQ(e.size(), 2);
+  ASSERT_EQ(e.size(), 2u);
   EXPECT_TRUE(e[0]->IsVariableDecl());
   EXPECT_TRUE(e[1]->IsAssign());
 }
 
 TEST_F(ParserImplTest, CaseBody_InvalidStatement) {
-  auto p = parser("a =");
+  auto* p = parser("a =");
   auto e = p->case_body();
   ASSERT_TRUE(p->has_error());
-  EXPECT_EQ(e.size(), 0);
+  EXPECT_EQ(e.size(), 0u);
   EXPECT_EQ(p->error(), "1:4: unable to parse right side of assignment");
 }
 
 TEST_F(ParserImplTest, CaseBody_Fallthrough) {
-  auto p = parser("fallthrough;");
+  auto* p = parser("fallthrough;");
   auto e = p->case_body();
   ASSERT_FALSE(p->has_error()) << p->error();
-  ASSERT_EQ(e.size(), 1);
+  ASSERT_EQ(e.size(), 1u);
   EXPECT_TRUE(e[0]->IsFallthrough());
 }
 
 TEST_F(ParserImplTest, CaseBody_Fallthrough_MissingSemicolon) {
-  auto p = parser("fallthrough");
+  auto* p = parser("fallthrough");
   auto e = p->case_body();
   ASSERT_TRUE(p->has_error());
-  EXPECT_EQ(e.size(), 0);
+  EXPECT_EQ(e.size(), 0u);
   EXPECT_EQ(p->error(), "1:12: missing ;");
 }
 
diff --git a/src/reader/wgsl/parser_impl_const_expr_test.cc b/src/reader/wgsl/parser_impl_const_expr_test.cc
index ca18fcf..4f4ecbc 100644
--- a/src/reader/wgsl/parser_impl_const_expr_test.cc
+++ b/src/reader/wgsl/parser_impl_const_expr_test.cc
@@ -27,23 +27,23 @@
 namespace {
 
 TEST_F(ParserImplTest, ConstExpr_TypeDecl) {
-  auto p = parser("vec2<f32>(1., 2.)");
+  auto* p = parser("vec2<f32>(1., 2.)");
   auto e = p->const_expr();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsConstructor());
   ASSERT_TRUE(e->AsConstructor()->IsTypeConstructor());
 
-  auto t = e->AsConstructor()->AsTypeConstructor();
+  auto* t = e->AsConstructor()->AsTypeConstructor();
   ASSERT_TRUE(t->type()->IsVector());
-  EXPECT_EQ(t->type()->AsVector()->size(), 2);
+  EXPECT_EQ(t->type()->AsVector()->size(), 2u);
 
-  ASSERT_EQ(t->values().size(), 2);
+  ASSERT_EQ(t->values().size(), 2u);
   auto& v = t->values();
 
   ASSERT_TRUE(v[0]->IsConstructor());
   ASSERT_TRUE(v[0]->AsConstructor()->IsScalarConstructor());
-  auto c = v[0]->AsConstructor()->AsScalarConstructor();
+  auto* c = v[0]->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(c->literal()->IsFloat());
   EXPECT_FLOAT_EQ(c->literal()->AsFloat()->value(), 1.);
 
@@ -55,7 +55,7 @@
 }
 
 TEST_F(ParserImplTest, ConstExpr_TypeDecl_MissingRightParen) {
-  auto p = parser("vec2<f32>(1., 2.");
+  auto* p = parser("vec2<f32>(1., 2.");
   auto e = p->const_expr();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -63,7 +63,7 @@
 }
 
 TEST_F(ParserImplTest, ConstExpr_TypeDecl_MissingLeftParen) {
-  auto p = parser("vec2<f32> 1., 2.)");
+  auto* p = parser("vec2<f32> 1., 2.)");
   auto e = p->const_expr();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -71,7 +71,7 @@
 }
 
 TEST_F(ParserImplTest, ConstExpr_TypeDecl_HangingComma) {
-  auto p = parser("vec2<f32>(1.,)");
+  auto* p = parser("vec2<f32>(1.,)");
   auto e = p->const_expr();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -79,7 +79,7 @@
 }
 
 TEST_F(ParserImplTest, ConstExpr_TypeDecl_MissingComma) {
-  auto p = parser("vec2<f32>(1. 2.");
+  auto* p = parser("vec2<f32>(1. 2.");
   auto e = p->const_expr();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -87,7 +87,7 @@
 }
 
 TEST_F(ParserImplTest, ConstExpr_MissingExpr) {
-  auto p = parser("vec2<f32>()");
+  auto* p = parser("vec2<f32>()");
   auto e = p->const_expr();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -95,7 +95,7 @@
 }
 
 TEST_F(ParserImplTest, ConstExpr_InvalidExpr) {
-  auto p = parser("vec2<f32>(1., if(a) {})");
+  auto* p = parser("vec2<f32>(1., if(a) {})");
   auto e = p->const_expr();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -103,19 +103,19 @@
 }
 
 TEST_F(ParserImplTest, ConstExpr_ConstLiteral) {
-  auto p = parser("true");
+  auto* p = parser("true");
   auto e = p->const_expr();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsConstructor());
   ASSERT_TRUE(e->AsConstructor()->IsScalarConstructor());
-  auto c = e->AsConstructor()->AsScalarConstructor();
+  auto* c = e->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(c->literal()->IsBool());
   EXPECT_TRUE(c->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, ConstExpr_ConstLiteral_Invalid) {
-  auto p = parser("invalid");
+  auto* p = parser("invalid");
   auto e = p->const_expr();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_const_literal_test.cc b/src/reader/wgsl/parser_impl_const_literal_test.cc
index ed474d9..fec1ad9 100644
--- a/src/reader/wgsl/parser_impl_const_literal_test.cc
+++ b/src/reader/wgsl/parser_impl_const_literal_test.cc
@@ -26,7 +26,7 @@
 namespace {
 
 TEST_F(ParserImplTest, ConstLiteral_Int) {
-  auto p = parser("-234");
+  auto* p = parser("-234");
   auto c = p->const_literal();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(c, nullptr);
@@ -35,7 +35,7 @@
 }
 
 TEST_F(ParserImplTest, ConstLiteral_Uint) {
-  auto p = parser("234u");
+  auto* p = parser("234u");
   auto c = p->const_literal();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(c, nullptr);
@@ -44,7 +44,7 @@
 }
 
 TEST_F(ParserImplTest, ConstLiteral_Float) {
-  auto p = parser("234.e12");
+  auto* p = parser("234.e12");
   auto c = p->const_literal();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(c, nullptr);
@@ -53,13 +53,13 @@
 }
 
 TEST_F(ParserImplTest, ConstLiteral_InvalidFloat) {
-  auto p = parser("1.2e+256");
+  auto* p = parser("1.2e+256");
   auto c = p->const_literal();
   ASSERT_EQ(c, nullptr);
 }
 
 TEST_F(ParserImplTest, ConstLiteral_True) {
-  auto p = parser("true");
+  auto* p = parser("true");
   auto c = p->const_literal();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(c, nullptr);
@@ -68,7 +68,7 @@
 }
 
 TEST_F(ParserImplTest, ConstLiteral_False) {
-  auto p = parser("false");
+  auto* p = parser("false");
   auto c = p->const_literal();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(c, nullptr);
@@ -77,7 +77,7 @@
 }
 
 TEST_F(ParserImplTest, ConstLiteral_NoMatch) {
-  auto p = parser("another-token");
+  auto* p = parser("another-token");
   auto c = p->const_literal();
   ASSERT_FALSE(p->has_error());
   ASSERT_EQ(c, nullptr);
diff --git a/src/reader/wgsl/parser_impl_continue_stmt_test.cc b/src/reader/wgsl/parser_impl_continue_stmt_test.cc
index f1e05c2..9a7b6fa 100644
--- a/src/reader/wgsl/parser_impl_continue_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_continue_stmt_test.cc
@@ -25,7 +25,7 @@
 namespace {
 
 TEST_F(ParserImplTest, ContinueStmt) {
-  auto p = parser("continue");
+  auto* p = parser("continue");
   auto e = p->continue_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -35,7 +35,7 @@
 }
 
 TEST_F(ParserImplTest, ContinueStmt_WithIf) {
-  auto p = parser("continue if (a == b)");
+  auto* p = parser("continue if (a == b)");
   auto e = p->continue_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -46,7 +46,7 @@
 }
 
 TEST_F(ParserImplTest, ContinueStmt_WithUnless) {
-  auto p = parser("continue unless (a == b)");
+  auto* p = parser("continue unless (a == b)");
   auto e = p->continue_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -57,7 +57,7 @@
 }
 
 TEST_F(ParserImplTest, ContinueStmt_InvalidRHS) {
-  auto p = parser("continue if (a = b)");
+  auto* p = parser("continue if (a = b)");
   auto e = p->continue_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -65,7 +65,7 @@
 }
 
 TEST_F(ParserImplTest, ContinueStmt_MissingRHS) {
-  auto p = parser("continue if");
+  auto* p = parser("continue if");
   auto e = p->continue_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_continuing_stmt_test.cc b/src/reader/wgsl/parser_impl_continuing_stmt_test.cc
index b83fcf8..c996c84 100644
--- a/src/reader/wgsl/parser_impl_continuing_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_continuing_stmt_test.cc
@@ -22,18 +22,18 @@
 namespace {
 
 TEST_F(ParserImplTest, ContinuingStmt) {
-  auto p = parser("continuing { nop; }");
+  auto* p = parser("continuing { nop; }");
   auto e = p->continuing_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
-  ASSERT_EQ(e.size(), 1);
+  ASSERT_EQ(e.size(), 1u);
   ASSERT_TRUE(e[0]->IsNop());
 }
 
 TEST_F(ParserImplTest, ContinuingStmt_InvalidBody) {
-  auto p = parser("continuing { nop }");
+  auto* p = parser("continuing { nop }");
   auto e = p->continuing_stmt();
   ASSERT_TRUE(p->has_error());
-  ASSERT_EQ(e.size(), 0);
+  ASSERT_EQ(e.size(), 0u);
   EXPECT_EQ(p->error(), "1:18: missing ;");
 }
 
diff --git a/src/reader/wgsl/parser_impl_derivative_modifier_test.cc b/src/reader/wgsl/parser_impl_derivative_modifier_test.cc
index 72e88f4..a559258 100644
--- a/src/reader/wgsl/parser_impl_derivative_modifier_test.cc
+++ b/src/reader/wgsl/parser_impl_derivative_modifier_test.cc
@@ -38,9 +38,9 @@
   DerivativeModifierTest() = default;
   ~DerivativeModifierTest() = default;
 
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   ParserImpl* parser(const std::string& str) {
     impl_ = std::make_unique<ParserImpl>(&ctx_, str);
@@ -54,7 +54,7 @@
 
 TEST_P(DerivativeModifierTest, Parses) {
   auto params = GetParam();
-  auto p = parser(params.input);
+  auto* p = parser(params.input);
 
   auto mod = p->derivative_modifier();
   ASSERT_FALSE(p->has_error());
@@ -71,7 +71,7 @@
         DerivativeModifierData{"coarse", ast::DerivativeModifier::kCoarse}));
 
 TEST_F(ParserImplTest, DerivativeModifier_NoMatch) {
-  auto p = parser("not-a-modifier");
+  auto* p = parser("not-a-modifier");
   auto stage = p->derivative_modifier();
   ASSERT_EQ(stage, ast::DerivativeModifier::kNone);
 
diff --git a/src/reader/wgsl/parser_impl_else_stmt_test.cc b/src/reader/wgsl/parser_impl_else_stmt_test.cc
index 6de2169..377f997 100644
--- a/src/reader/wgsl/parser_impl_else_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_else_stmt_test.cc
@@ -23,17 +23,17 @@
 namespace {
 
 TEST_F(ParserImplTest, ElseStmt) {
-  auto p = parser("else { a = b; c = d; }");
+  auto* p = parser("else { a = b; c = d; }");
   auto e = p->else_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsElse());
   ASSERT_EQ(e->condition(), nullptr);
-  EXPECT_EQ(e->body().size(), 2);
+  EXPECT_EQ(e->body().size(), 2u);
 }
 
 TEST_F(ParserImplTest, ElseStmt_InvalidBody) {
-  auto p = parser("else { fn main() -> void {}}");
+  auto* p = parser("else { fn main() -> void {}}");
   auto e = p->else_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -41,7 +41,7 @@
 }
 
 TEST_F(ParserImplTest, ElseStmt_MissingBody) {
-  auto p = parser("else");
+  auto* p = parser("else");
   auto e = p->else_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_elseif_stmt_test.cc b/src/reader/wgsl/parser_impl_elseif_stmt_test.cc
index 147b3d4..578006c 100644
--- a/src/reader/wgsl/parser_impl_elseif_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_elseif_stmt_test.cc
@@ -23,43 +23,43 @@
 namespace {
 
 TEST_F(ParserImplTest, ElseIfStmt) {
-  auto p = parser("elseif (a == 4) { a = b; c = d; }");
+  auto* p = parser("elseif (a == 4) { a = b; c = d; }");
   auto e = p->elseif_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
-  ASSERT_EQ(e.size(), 1);
+  ASSERT_EQ(e.size(), 1u);
 
   ASSERT_TRUE(e[0]->IsElse());
   ASSERT_NE(e[0]->condition(), nullptr);
   ASSERT_TRUE(e[0]->condition()->IsBinary());
-  EXPECT_EQ(e[0]->body().size(), 2);
+  EXPECT_EQ(e[0]->body().size(), 2u);
 }
 
 TEST_F(ParserImplTest, ElseIfStmt_Multiple) {
-  auto p = parser("elseif (a == 4) { a = b; c = d; } elseif(c) { d = 2; }");
+  auto* p = parser("elseif (a == 4) { a = b; c = d; } elseif(c) { d = 2; }");
   auto e = p->elseif_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
-  ASSERT_EQ(e.size(), 2);
+  ASSERT_EQ(e.size(), 2u);
 
   ASSERT_TRUE(e[0]->IsElse());
   ASSERT_NE(e[0]->condition(), nullptr);
   ASSERT_TRUE(e[0]->condition()->IsBinary());
-  EXPECT_EQ(e[0]->body().size(), 2);
+  EXPECT_EQ(e[0]->body().size(), 2u);
 
   ASSERT_TRUE(e[1]->IsElse());
   ASSERT_NE(e[1]->condition(), nullptr);
   ASSERT_TRUE(e[1]->condition()->IsIdentifier());
-  EXPECT_EQ(e[1]->body().size(), 1);
+  EXPECT_EQ(e[1]->body().size(), 1u);
 }
 
 TEST_F(ParserImplTest, ElseIfStmt_InvalidBody) {
-  auto p = parser("elseif (true) { fn main() -> void {}}");
+  auto* p = parser("elseif (true) { fn main() -> void {}}");
   auto e = p->elseif_stmt();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:17: missing }");
 }
 
 TEST_F(ParserImplTest, ElseIfStmt_MissingBody) {
-  auto p = parser("elseif (true)");
+  auto* p = parser("elseif (true)");
   auto e = p->elseif_stmt();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:14: missing {");
diff --git a/src/reader/wgsl/parser_impl_entry_point_decl_test.cc b/src/reader/wgsl/parser_impl_entry_point_decl_test.cc
index 774cc7f..ede75b3 100644
--- a/src/reader/wgsl/parser_impl_entry_point_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_entry_point_decl_test.cc
@@ -23,7 +23,7 @@
 namespace {
 
 TEST_F(ParserImplTest, EntryPoint_Parses) {
-  auto p = parser("entry_point fragment = main");
+  auto* p = parser("entry_point fragment = main");
   auto e = p->entry_point_decl();
   ASSERT_NE(e, nullptr);
   ASSERT_FALSE(p->has_error());
@@ -33,7 +33,7 @@
 }
 
 TEST_F(ParserImplTest, EntryPoint_ParsesWithStringName) {
-  auto p = parser(R"(entry_point vertex as "main" = vtx_main)");
+  auto* p = parser(R"(entry_point vertex as "main" = vtx_main)");
   auto e = p->entry_point_decl();
   ASSERT_NE(e, nullptr);
   ASSERT_FALSE(p->has_error());
@@ -43,7 +43,7 @@
 }
 
 TEST_F(ParserImplTest, EntryPoint_ParsesWithIdentName) {
-  auto p = parser(R"(entry_point vertex as main = vtx_main)");
+  auto* p = parser(R"(entry_point vertex as main = vtx_main)");
   auto e = p->entry_point_decl();
   ASSERT_NE(e, nullptr);
   ASSERT_FALSE(p->has_error());
@@ -53,7 +53,7 @@
 }
 
 TEST_F(ParserImplTest, EntryPoint_MissingFnName) {
-  auto p = parser(R"(entry_point vertex as main =)");
+  auto* p = parser(R"(entry_point vertex as main =)");
   auto e = p->entry_point_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -61,7 +61,7 @@
 }
 
 TEST_F(ParserImplTest, EntryPoint_InvalidFnName) {
-  auto p = parser(R"(entry_point vertex as main = 123)");
+  auto* p = parser(R"(entry_point vertex as main = 123)");
   auto e = p->entry_point_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -69,7 +69,7 @@
 }
 
 TEST_F(ParserImplTest, EntryPoint_MissingEqual) {
-  auto p = parser(R"(entry_point vertex as main vtx_main)");
+  auto* p = parser(R"(entry_point vertex as main vtx_main)");
   auto e = p->entry_point_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -77,7 +77,7 @@
 }
 
 TEST_F(ParserImplTest, EntryPoint_MissingName) {
-  auto p = parser(R"(entry_point vertex as = vtx_main)");
+  auto* p = parser(R"(entry_point vertex as = vtx_main)");
   auto e = p->entry_point_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -85,7 +85,7 @@
 }
 
 TEST_F(ParserImplTest, EntryPoint_InvalidName) {
-  auto p = parser(R"(entry_point vertex as 123 = vtx_main)");
+  auto* p = parser(R"(entry_point vertex as 123 = vtx_main)");
   auto e = p->entry_point_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -93,7 +93,7 @@
 }
 
 TEST_F(ParserImplTest, EntryPoint_MissingStageWithIdent) {
-  auto p = parser(R"(entry_point as 123 = vtx_main)");
+  auto* p = parser(R"(entry_point as 123 = vtx_main)");
   auto e = p->entry_point_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -101,7 +101,7 @@
 }
 
 TEST_F(ParserImplTest, EntryPoint_MissingStage) {
-  auto p = parser(R"(entry_point = vtx_main)");
+  auto* p = parser(R"(entry_point = vtx_main)");
   auto e = p->entry_point_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -109,7 +109,7 @@
 }
 
 TEST_F(ParserImplTest, EntryPoint_InvalidStage) {
-  auto p = parser(R"(entry_point invalid = vtx_main)");
+  auto* p = parser(R"(entry_point invalid = vtx_main)");
   auto e = p->entry_point_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_equality_expression_test.cc b/src/reader/wgsl/parser_impl_equality_expression_test.cc
index 39a83b6..c427e6c 100644
--- a/src/reader/wgsl/parser_impl_equality_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_equality_expression_test.cc
@@ -26,58 +26,58 @@
 namespace {
 
 TEST_F(ParserImplTest, EqualityExpression_Parses_Equal) {
-  auto p = parser("a == true");
+  auto* p = parser("a == true");
   auto e = p->equality_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kEqual, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, EqualityExpression_Parses_NotEqual) {
-  auto p = parser("a != true");
+  auto* p = parser("a != true");
   auto e = p->equality_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kNotEqual, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, EqualityExpression_InvalidLHS) {
-  auto p = parser("if (a) {} == true");
+  auto* p = parser("if (a) {} == true");
   auto e = p->equality_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_EQ(e, nullptr);
 }
 
 TEST_F(ParserImplTest, EqualityExpression_InvalidRHS) {
-  auto p = parser("true == if (a) {}");
+  auto* p = parser("true == if (a) {}");
   auto e = p->equality_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -85,7 +85,7 @@
 }
 
 TEST_F(ParserImplTest, EqualityExpression_NoOr_ReturnsLHS) {
-  auto p = parser("a true");
+  auto* p = parser("a true");
   auto e = p->equality_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc b/src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc
index bb4d21b..1e2d120 100644
--- a/src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_exclusive_or_expression_test.cc
@@ -26,36 +26,36 @@
 namespace {
 
 TEST_F(ParserImplTest, ExclusiveOrExpression_Parses) {
-  auto p = parser("a ^ true");
+  auto* p = parser("a ^ true");
   auto e = p->exclusive_or_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kXor, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, ExclusiveOrExpression_InvalidLHS) {
-  auto p = parser("if (a) {} ^ true");
+  auto* p = parser("if (a) {} ^ true");
   auto e = p->exclusive_or_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_EQ(e, nullptr);
 }
 
 TEST_F(ParserImplTest, ExclusiveOrExpression_InvalidRHS) {
-  auto p = parser("true ^ if (a) {}");
+  auto* p = parser("true ^ if (a) {}");
   auto e = p->exclusive_or_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -63,7 +63,7 @@
 }
 
 TEST_F(ParserImplTest, ExclusiveOrExpression_NoOr_ReturnsLHS) {
-  auto p = parser("a true");
+  auto* p = parser("a true");
   auto e = p->exclusive_or_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_function_decl_test.cc b/src/reader/wgsl/parser_impl_function_decl_test.cc
index be9b2e0..271634e 100644
--- a/src/reader/wgsl/parser_impl_function_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_function_decl_test.cc
@@ -24,7 +24,7 @@
 namespace {
 
 TEST_F(ParserImplTest, FunctionDecl) {
-  auto p = parser("fn main(a : i32, b : f32) -> void { return; }");
+  auto* p = parser("fn main(a : i32, b : f32) -> void { return; }");
   auto f = p->function_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(f, nullptr);
@@ -33,19 +33,19 @@
   ASSERT_NE(f->return_type(), nullptr);
   EXPECT_TRUE(f->return_type()->IsVoid());
 
-  ASSERT_EQ(f->params().size(), 2);
+  ASSERT_EQ(f->params().size(), 2u);
   EXPECT_EQ(f->params()[0]->name(), "a");
   EXPECT_EQ(f->params()[1]->name(), "b");
 
   ASSERT_NE(f->return_type(), nullptr);
   EXPECT_TRUE(f->return_type()->IsVoid());
 
-  ASSERT_EQ(f->body().size(), 1);
+  ASSERT_EQ(f->body().size(), 1u);
   EXPECT_TRUE(f->body()[0]->IsReturn());
 }
 
 TEST_F(ParserImplTest, FunctionDecl_InvalidHeader) {
-  auto p = parser("fn main() -> { }");
+  auto* p = parser("fn main() -> { }");
   auto f = p->function_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(f, nullptr);
@@ -53,7 +53,7 @@
 }
 
 TEST_F(ParserImplTest, FunctionDecl_InvalidBody) {
-  auto p = parser("fn main() -> void { return }");
+  auto* p = parser("fn main() -> void { return }");
   auto f = p->function_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(f, nullptr);
diff --git a/src/reader/wgsl/parser_impl_function_header_test.cc b/src/reader/wgsl/parser_impl_function_header_test.cc
index 94b9886..2b482f8 100644
--- a/src/reader/wgsl/parser_impl_function_header_test.cc
+++ b/src/reader/wgsl/parser_impl_function_header_test.cc
@@ -24,20 +24,20 @@
 namespace {
 
 TEST_F(ParserImplTest, FunctionHeader) {
-  auto p = parser("fn main(a : i32, b: f32) -> void");
+  auto* p = parser("fn main(a : i32, b: f32) -> void");
   auto f = p->function_header();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(f, nullptr);
 
   EXPECT_EQ(f->name(), "main");
-  ASSERT_EQ(f->params().size(), 2);
+  ASSERT_EQ(f->params().size(), 2u);
   EXPECT_EQ(f->params()[0]->name(), "a");
   EXPECT_EQ(f->params()[1]->name(), "b");
   EXPECT_TRUE(f->return_type()->IsVoid());
 }
 
 TEST_F(ParserImplTest, FunctionHeader_MissingIdent) {
-  auto p = parser("fn () ->");
+  auto* p = parser("fn () ->");
   auto f = p->function_header();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(f, nullptr);
@@ -45,7 +45,7 @@
 }
 
 TEST_F(ParserImplTest, FunctionHeader_InvalidIdent) {
-  auto p = parser("fn 133main() -> i32");
+  auto* p = parser("fn 133main() -> i32");
   auto f = p->function_header();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(f, nullptr);
@@ -53,7 +53,7 @@
 }
 
 TEST_F(ParserImplTest, FunctionHeader_MissingParenLeft) {
-  auto p = parser("fn main) -> i32");
+  auto* p = parser("fn main) -> i32");
   auto f = p->function_header();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(f, nullptr);
@@ -61,7 +61,7 @@
 }
 
 TEST_F(ParserImplTest, FunctionHeader_InvalidParamList) {
-  auto p = parser("fn main(a :i32,) -> i32");
+  auto* p = parser("fn main(a :i32,) -> i32");
   auto f = p->function_header();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(f, nullptr);
@@ -69,7 +69,7 @@
 }
 
 TEST_F(ParserImplTest, FunctionHeader_MissingParenRight) {
-  auto p = parser("fn main( -> i32");
+  auto* p = parser("fn main( -> i32");
   auto f = p->function_header();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(f, nullptr);
@@ -77,7 +77,7 @@
 }
 
 TEST_F(ParserImplTest, FunctionHeader_MissingArrow) {
-  auto p = parser("fn main() i32");
+  auto* p = parser("fn main() i32");
   auto f = p->function_header();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(f, nullptr);
@@ -85,7 +85,7 @@
 }
 
 TEST_F(ParserImplTest, FunctionHeader_InvalidReturnType) {
-  auto p = parser("fn main() -> invalid");
+  auto* p = parser("fn main() -> invalid");
   auto f = p->function_header();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(f, nullptr);
@@ -93,7 +93,7 @@
 }
 
 TEST_F(ParserImplTest, FunctionHeader_MissingReturnType) {
-  auto p = parser("fn main() ->");
+  auto* p = parser("fn main() ->");
   auto f = p->function_header();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(f, nullptr);
diff --git a/src/reader/wgsl/parser_impl_function_type_decl_test.cc b/src/reader/wgsl/parser_impl_function_type_decl_test.cc
index 7a9e737..c5e4e16 100644
--- a/src/reader/wgsl/parser_impl_function_type_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_function_type_decl_test.cc
@@ -28,27 +28,27 @@
 namespace {
 
 TEST_F(ParserImplTest, FunctionTypeDecl_Void) {
-  auto v = tm()->Get(std::make_unique<ast::type::VoidType>());
+  auto* v = tm()->Get(std::make_unique<ast::type::VoidType>());
 
-  auto p = parser("void");
-  auto e = p->function_type_decl();
+  auto* p = parser("void");
+  auto* e = p->function_type_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_EQ(e, v);
 }
 
 TEST_F(ParserImplTest, FunctionTypeDecl_Type) {
-  auto f32 = tm()->Get(std::make_unique<ast::type::F32Type>());
-  auto vec2 = tm()->Get(std::make_unique<ast::type::VectorType>(f32, 2));
+  auto* f32 = tm()->Get(std::make_unique<ast::type::F32Type>());
+  auto* vec2 = tm()->Get(std::make_unique<ast::type::VectorType>(f32, 2));
 
-  auto p = parser("vec2<f32>");
-  auto e = p->function_type_decl();
+  auto* p = parser("vec2<f32>");
+  auto* e = p->function_type_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_EQ(e, vec2);
 }
 
 TEST_F(ParserImplTest, FunctionTypeDecl_InvalidType) {
-  auto p = parser("vec2<invalid>");
-  auto e = p->function_type_decl();
+  auto* p = parser("vec2<invalid>");
+  auto* e = p->function_type_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
   EXPECT_EQ(p->error(), "1:6: unknown type alias 'invalid'");
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 3f53a04..c9abe0a 100644
--- a/src/reader/wgsl/parser_impl_global_constant_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_global_constant_decl_test.cc
@@ -24,7 +24,7 @@
 namespace {
 
 TEST_F(ParserImplTest, GlobalConstantDecl) {
-  auto p = parser("const a : f32 = 1.");
+  auto* p = parser("const a : f32 = 1.");
   auto e = p->global_constant_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -39,7 +39,7 @@
 }
 
 TEST_F(ParserImplTest, GlobalConstantDecl_MissingEqual) {
-  auto p = parser("const a: f32 1.");
+  auto* p = parser("const a: f32 1.");
   auto e = p->global_constant_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -47,7 +47,7 @@
 }
 
 TEST_F(ParserImplTest, GlobalConstantDecl_InvalidVariable) {
-  auto p = parser("const a: invalid = 1.");
+  auto* p = parser("const a: invalid = 1.");
   auto e = p->global_constant_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -55,7 +55,7 @@
 }
 
 TEST_F(ParserImplTest, GlobalConstantDecl_InvalidExpression) {
-  auto p = parser("const a: f32 = if (a) {}");
+  auto* p = parser("const a: f32 = if (a) {}");
   auto e = p->global_constant_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -63,7 +63,7 @@
 }
 
 TEST_F(ParserImplTest, GlobalConstantDecl_MissingExpression) {
-  auto p = parser("const a: f32 =");
+  auto* p = parser("const a: f32 =");
   auto e = p->global_constant_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_global_decl_test.cc b/src/reader/wgsl/parser_impl_global_decl_test.cc
index 188a658..489f07d 100644
--- a/src/reader/wgsl/parser_impl_global_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_global_decl_test.cc
@@ -22,18 +22,18 @@
 namespace {
 
 TEST_F(ParserImplTest, GlobalDecl_Semicolon) {
-  auto p = parser(";");
+  auto* p = parser(";");
   p->global_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
 }
 
 TEST_F(ParserImplTest, GlobalDecl_Import) {
-  auto p = parser(R"(import "GLSL.std.430" as glsl;)");
+  auto* p = parser(R"(import "GLSL.std.430" as glsl;)");
   p->global_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
 
   auto m = p->module();
-  ASSERT_EQ(1, m.imports().size());
+  ASSERT_EQ(1u, m.imports().size());
 
   const auto& import = m.imports()[0];
   EXPECT_EQ("GLSL.std.430", import->path());
@@ -41,7 +41,7 @@
 }
 
 TEST_F(ParserImplTest, GlobalDecl_Import_Invalid) {
-  auto p = parser(R"(import as glsl;)");
+  auto* p = parser(R"(import as glsl;)");
   p->global_decl();
 
   ASSERT_TRUE(p->has_error());
@@ -49,7 +49,7 @@
 }
 
 TEST_F(ParserImplTest, GlobalDecl_Import_Invalid_MissingSemicolon) {
-  auto p = parser(R"(import "GLSL.std.430" as glsl)");
+  auto* p = parser(R"(import "GLSL.std.430" as glsl)");
   p->global_decl();
 
   ASSERT_TRUE(p->has_error());
@@ -57,117 +57,117 @@
 }
 
 TEST_F(ParserImplTest, GlobalDecl_GlobalVariable) {
-  auto p = parser("var<out> a : vec2<i32> = vec2<i32>(1, 2);");
+  auto* p = parser("var<out> a : vec2<i32> = vec2<i32>(1, 2);");
   p->global_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
 
   auto m = p->module();
-  ASSERT_EQ(m.global_variables().size(), 1);
+  ASSERT_EQ(m.global_variables().size(), 1u);
 
-  auto v = m.global_variables()[0].get();
+  auto* v = m.global_variables()[0].get();
   EXPECT_EQ(v->name(), "a");
 }
 
 TEST_F(ParserImplTest, GlobalDecl_GlobalVariable_Invalid) {
-  auto p = parser("var<out> a : vec2<invalid>;");
+  auto* p = parser("var<out> a : vec2<invalid>;");
   p->global_decl();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:19: unknown type alias 'invalid'");
 }
 
 TEST_F(ParserImplTest, GlobalDecl_GlobalVariable_MissingSemicolon) {
-  auto p = parser("var<out> a : vec2<i32>");
+  auto* p = parser("var<out> a : vec2<i32>");
   p->global_decl();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:23: missing ';' for variable declaration");
 }
 
 TEST_F(ParserImplTest, GlobalDecl_GlobalConstant) {
-  auto p = parser("const a : i32 = 2;");
+  auto* p = parser("const a : i32 = 2;");
   p->global_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
 
   auto m = p->module();
-  ASSERT_EQ(m.global_variables().size(), 1);
+  ASSERT_EQ(m.global_variables().size(), 1u);
 
-  auto v = m.global_variables()[0].get();
+  auto* v = m.global_variables()[0].get();
   EXPECT_EQ(v->name(), "a");
 }
 
 TEST_F(ParserImplTest, GlobalDecl_GlobalConstant_Invalid) {
-  auto p = parser("const a : vec2<i32>;");
+  auto* p = parser("const a : vec2<i32>;");
   p->global_decl();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:20: missing = for const declaration");
 }
 
 TEST_F(ParserImplTest, GlobalDecl_GlobalConstant_MissingSemicolon) {
-  auto p = parser("const a : vec2<i32> = vec2<i32>(1, 2)");
+  auto* p = parser("const a : vec2<i32> = vec2<i32>(1, 2)");
   p->global_decl();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:38: missing ';' for constant declaration");
 }
 
 TEST_F(ParserImplTest, GlobalDecl_EntryPoint) {
-  auto p = parser("entry_point vertex = main;");
+  auto* p = parser("entry_point vertex = main;");
   p->global_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
 
   auto m = p->module();
-  ASSERT_EQ(m.entry_points().size(), 1);
+  ASSERT_EQ(m.entry_points().size(), 1u);
   EXPECT_EQ(m.entry_points()[0]->name(), "main");
 }
 
 TEST_F(ParserImplTest, GlobalDecl_EntryPoint_Invalid) {
-  auto p = parser("entry_point main;");
+  auto* p = parser("entry_point main;");
   p->global_decl();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:13: missing pipeline stage for entry point");
 }
 
 TEST_F(ParserImplTest, GlobalDecl_EntryPoint_MissingSemicolon) {
-  auto p = parser("entry_point vertex = main");
+  auto* p = parser("entry_point vertex = main");
   p->global_decl();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:26: missing ';' for entry point");
 }
 
 TEST_F(ParserImplTest, GlobalDecl_TypeAlias) {
-  auto p = parser("type A = i32;");
+  auto* p = parser("type A = i32;");
   p->global_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
 
   auto m = p->module();
-  ASSERT_EQ(m.alias_types().size(), 1);
+  ASSERT_EQ(m.alias_types().size(), 1u);
   EXPECT_EQ(m.alias_types()[0]->name(), "A");
 }
 
 TEST_F(ParserImplTest, GlobalDecl_TypeAlias_Invalid) {
-  auto p = parser("type A = invalid;");
+  auto* p = parser("type A = invalid;");
   p->global_decl();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:10: unknown type alias 'invalid'");
 }
 
 TEST_F(ParserImplTest, GlobalDecl_TypeAlias_MissingSemicolon) {
-  auto p = parser("type A = i32");
+  auto* p = parser("type A = i32");
   p->global_decl();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:13: missing ';' for type alias");
 }
 
 TEST_F(ParserImplTest, GlobalDecl_Function) {
-  auto p = parser("fn main() -> void { return; }");
+  auto* p = parser("fn main() -> void { return; }");
   p->global_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
 
   auto m = p->module();
-  ASSERT_EQ(m.functions().size(), 1);
+  ASSERT_EQ(m.functions().size(), 1u);
   EXPECT_EQ(m.functions()[0]->name(), "main");
 }
 
 TEST_F(ParserImplTest, GlobalDecl_Function_Invalid) {
-  auto p = parser("fn main() -> { return; }");
+  auto* p = parser("fn main() -> { return; }");
   p->global_decl();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:14: unable to determine function return type");
diff --git a/src/reader/wgsl/parser_impl_global_variable_decl_test.cc b/src/reader/wgsl/parser_impl_global_variable_decl_test.cc
index d7ff3c6..fa1aad6 100644
--- a/src/reader/wgsl/parser_impl_global_variable_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_global_variable_decl_test.cc
@@ -24,7 +24,7 @@
 namespace {
 
 TEST_F(ParserImplTest, GlobalVariableDecl_WithoutConstructor) {
-  auto p = parser("var<out> a : f32");
+  auto* p = parser("var<out> a : f32");
   auto e = p->global_variable_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -38,7 +38,7 @@
 }
 
 TEST_F(ParserImplTest, GlobalVariableDecl_WithConstructor) {
-  auto p = parser("var<out> a : f32 = 1.");
+  auto* p = parser("var<out> a : f32 = 1.");
   auto e = p->global_variable_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -55,7 +55,7 @@
 }
 
 TEST_F(ParserImplTest, GlobalVariableDecl_WithDecoration) {
-  auto p = parser("[[binding 2, set 1]] var<out> a : f32");
+  auto* p = parser("[[binding 2, set 1]] var<out> a : f32");
   auto e = p->global_variable_decl();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -69,16 +69,16 @@
   ASSERT_EQ(e->constructor(), nullptr);
 
   ASSERT_TRUE(e->IsDecorated());
-  auto v = e->AsDecorated();
+  auto* v = e->AsDecorated();
 
   auto& decos = v->decorations();
-  ASSERT_EQ(decos.size(), 2);
+  ASSERT_EQ(decos.size(), 2u);
   ASSERT_TRUE(decos[0]->IsBinding());
   ASSERT_TRUE(decos[1]->IsSet());
 }
 
 TEST_F(ParserImplTest, GlobalVariableDecl_InvalidDecoration) {
-  auto p = parser("[[binding]] var<out> a : f32");
+  auto* p = parser("[[binding]] var<out> a : f32");
   auto e = p->global_variable_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -86,7 +86,7 @@
 }
 
 TEST_F(ParserImplTest, GlobalVariableDecl_InvalidConstExpr) {
-  auto p = parser("var<out> a : f32 = if (a) {}");
+  auto* p = parser("var<out> a : f32 = if (a) {}");
   auto e = p->global_variable_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -94,7 +94,7 @@
 }
 
 TEST_F(ParserImplTest, GlobalVariableDecl_InvalidVariableDecl) {
-  auto p = parser("var<invalid> a : f32;");
+  auto* p = parser("var<invalid> a : f32;");
   auto e = p->global_variable_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_if_stmt_test.cc b/src/reader/wgsl/parser_impl_if_stmt_test.cc
index 56bd415..71173ad 100644
--- a/src/reader/wgsl/parser_impl_if_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_if_stmt_test.cc
@@ -24,7 +24,7 @@
 namespace {
 
 TEST_F(ParserImplTest, IfStmt) {
-  auto p = parser("if (a == 4) { a = b; c = d; }");
+  auto* p = parser("if (a == 4) { a = b; c = d; }");
   auto e = p->if_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -32,12 +32,13 @@
   ASSERT_TRUE(e->IsIf());
   ASSERT_NE(e->condition(), nullptr);
   ASSERT_TRUE(e->condition()->IsBinary());
-  EXPECT_EQ(e->body().size(), 2);
-  EXPECT_EQ(e->else_statements().size(), 0);
+  EXPECT_EQ(e->body().size(), 2u);
+  EXPECT_EQ(e->else_statements().size(), 0u);
 }
 
 TEST_F(ParserImplTest, IfStmt_WithElse) {
-  auto p = parser("if (a == 4) { a = b; c = d; } elseif(c) { d = 2; } else {}");
+  auto* p =
+      parser("if (a == 4) { a = b; c = d; } elseif(c) { d = 2; } else {}");
   auto e = p->if_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -45,19 +46,19 @@
   ASSERT_TRUE(e->IsIf());
   ASSERT_NE(e->condition(), nullptr);
   ASSERT_TRUE(e->condition()->IsBinary());
-  EXPECT_EQ(e->body().size(), 2);
+  EXPECT_EQ(e->body().size(), 2u);
 
-  ASSERT_EQ(e->else_statements().size(), 2);
+  ASSERT_EQ(e->else_statements().size(), 2u);
   ASSERT_NE(e->else_statements()[0]->condition(), nullptr);
   ASSERT_TRUE(e->else_statements()[0]->condition()->IsIdentifier());
-  EXPECT_EQ(e->else_statements()[0]->body().size(), 1);
+  EXPECT_EQ(e->else_statements()[0]->body().size(), 1u);
 
   ASSERT_EQ(e->else_statements()[1]->condition(), nullptr);
-  EXPECT_EQ(e->else_statements()[1]->body().size(), 0);
+  EXPECT_EQ(e->else_statements()[1]->body().size(), 0u);
 }
 
 TEST_F(ParserImplTest, IfStmt_InvalidCondition) {
-  auto p = parser("if (a = 3) {}");
+  auto* p = parser("if (a = 3) {}");
   auto e = p->if_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -65,7 +66,7 @@
 }
 
 TEST_F(ParserImplTest, IfStmt_MissingCondition) {
-  auto p = parser("if {}");
+  auto* p = parser("if {}");
   auto e = p->if_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -73,7 +74,7 @@
 }
 
 TEST_F(ParserImplTest, IfStmt_InvalidBody) {
-  auto p = parser("if (a) { fn main() -> void {}}");
+  auto* p = parser("if (a) { fn main() -> void {}}");
   auto e = p->if_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -81,7 +82,7 @@
 }
 
 TEST_F(ParserImplTest, IfStmt_MissingBody) {
-  auto p = parser("if (a)");
+  auto* p = parser("if (a)");
   auto e = p->if_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -89,7 +90,7 @@
 }
 
 TEST_F(ParserImplTest, IfStmt_InvalidElseif) {
-  auto p = parser("if (a) {} elseif (a) { fn main() -> a{}}");
+  auto* p = parser("if (a) {} elseif (a) { fn main() -> a{}}");
   auto e = p->if_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -97,7 +98,7 @@
 }
 
 TEST_F(ParserImplTest, IfStmt_InvalidElse) {
-  auto p = parser("if (a) {} else { fn main() -> a{}}");
+  auto* p = parser("if (a) {} else { fn main() -> a{}}");
   auto e = p->if_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_import_decl_test.cc b/src/reader/wgsl/parser_impl_import_decl_test.cc
index 5fc4f04..abf4582 100644
--- a/src/reader/wgsl/parser_impl_import_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_import_decl_test.cc
@@ -22,7 +22,7 @@
 namespace {
 
 TEST_F(ParserImplTest, ImportDecl_Import) {
-  auto p = parser(R"(import "GLSL.std.450" as glsl)");
+  auto* p = parser(R"(import "GLSL.std.450" as glsl)");
 
   auto import = p->import_decl();
   ASSERT_NE(import, nullptr);
@@ -30,12 +30,12 @@
 
   EXPECT_EQ("GLSL.std.450", import->path());
   EXPECT_EQ("glsl", import->name());
-  EXPECT_EQ(1, import->line());
-  EXPECT_EQ(1, import->column());
+  EXPECT_EQ(1u, import->line());
+  EXPECT_EQ(1u, import->column());
 }
 
 TEST_F(ParserImplTest, ImportDecl_Import_WithNamespace) {
-  auto p = parser(R"(import "GLSL.std.450" as std::glsl)");
+  auto* p = parser(R"(import "GLSL.std.450" as std::glsl)");
   auto import = p->import_decl();
   ASSERT_NE(import, nullptr);
   ASSERT_FALSE(p->has_error()) << p->error();
@@ -43,7 +43,7 @@
 }
 
 TEST_F(ParserImplTest, ImportDecl_Invalid_MissingPath) {
-  auto p = parser(R"(import as glsl)");
+  auto* p = parser(R"(import as glsl)");
   auto import = p->import_decl();
   ASSERT_EQ(import, nullptr);
   ASSERT_TRUE(p->has_error());
@@ -51,7 +51,7 @@
 }
 
 TEST_F(ParserImplTest, ImportDecl_Invalid_EmptyPath) {
-  auto p = parser(R"(import "" as glsl)");
+  auto* p = parser(R"(import "" as glsl)");
   auto import = p->import_decl();
   ASSERT_EQ(import, nullptr);
   ASSERT_TRUE(p->has_error());
@@ -59,7 +59,7 @@
 }
 
 TEST_F(ParserImplTest, ImportDecl_Invalid_NameMissingTerminatingIdentifier) {
-  auto p = parser(R"(import "GLSL.std.450" as glsl::)");
+  auto* p = parser(R"(import "GLSL.std.450" as glsl::)");
   auto import = p->import_decl();
   ASSERT_EQ(import, nullptr);
   ASSERT_TRUE(p->has_error());
@@ -67,7 +67,7 @@
 }
 
 TEST_F(ParserImplTest, ImportDecl_Invalid_NameInvalid) {
-  auto p = parser(R"(import "GLSL.std.450" as 12glsl)");
+  auto* p = parser(R"(import "GLSL.std.450" as 12glsl)");
   auto import = p->import_decl();
   ASSERT_EQ(import, nullptr);
   ASSERT_TRUE(p->has_error());
@@ -75,7 +75,7 @@
 }
 
 TEST_F(ParserImplTest, ImportDecl_Invalid_MissingName) {
-  auto p = parser(R"(import "GLSL.std.450" as)");
+  auto* p = parser(R"(import "GLSL.std.450" as)");
   auto import = p->import_decl();
   ASSERT_EQ(import, nullptr);
   ASSERT_TRUE(p->has_error());
@@ -83,7 +83,7 @@
 }
 
 TEST_F(ParserImplTest, ImportDecl_Invalid_MissingAs) {
-  auto p = parser(R"(import "GLSL.std.450" glsl)");
+  auto* p = parser(R"(import "GLSL.std.450" glsl)");
   auto import = p->import_decl();
   ASSERT_EQ(import, nullptr);
   ASSERT_TRUE(p->has_error());
diff --git a/src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc b/src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc
index bbbe778..3311e74 100644
--- a/src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_inclusive_or_expression_test.cc
@@ -26,36 +26,36 @@
 namespace {
 
 TEST_F(ParserImplTest, InclusiveOrExpression_Parses) {
-  auto p = parser("a | true");
+  auto* p = parser("a | true");
   auto e = p->inclusive_or_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kOr, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, InclusiveOrExpression_InvalidLHS) {
-  auto p = parser("if (a) {} | true");
+  auto* p = parser("if (a) {} | true");
   auto e = p->inclusive_or_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_EQ(e, nullptr);
 }
 
 TEST_F(ParserImplTest, InclusiveOrExpression_InvalidRHS) {
-  auto p = parser("true | if (a) {}");
+  auto* p = parser("true | if (a) {}");
   auto e = p->inclusive_or_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -63,7 +63,7 @@
 }
 
 TEST_F(ParserImplTest, InclusiveOrExpression_NoOr_ReturnsLHS) {
-  auto p = parser("a true");
+  auto* p = parser("a true");
   auto e = p->inclusive_or_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_logical_and_expression_test.cc b/src/reader/wgsl/parser_impl_logical_and_expression_test.cc
index 9c7029e..6434e0a 100644
--- a/src/reader/wgsl/parser_impl_logical_and_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_logical_and_expression_test.cc
@@ -26,36 +26,36 @@
 namespace {
 
 TEST_F(ParserImplTest, LogicalAndExpression_Parses) {
-  auto p = parser("a && true");
+  auto* p = parser("a && true");
   auto e = p->logical_and_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kLogicalAnd, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, LogicalAndExpression_InvalidLHS) {
-  auto p = parser("if (a) {} && true");
+  auto* p = parser("if (a) {} && true");
   auto e = p->logical_and_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_EQ(e, nullptr);
 }
 
 TEST_F(ParserImplTest, LogicalAndExpression_InvalidRHS) {
-  auto p = parser("true && if (a) {}");
+  auto* p = parser("true && if (a) {}");
   auto e = p->logical_and_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -63,7 +63,7 @@
 }
 
 TEST_F(ParserImplTest, LogicalAndExpression_NoOr_ReturnsLHS) {
-  auto p = parser("a true");
+  auto* p = parser("a true");
   auto e = p->logical_and_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_logical_or_expression_test.cc b/src/reader/wgsl/parser_impl_logical_or_expression_test.cc
index bc19f61..63e1c64 100644
--- a/src/reader/wgsl/parser_impl_logical_or_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_logical_or_expression_test.cc
@@ -26,36 +26,36 @@
 namespace {
 
 TEST_F(ParserImplTest, LogicalOrExpression_Parses) {
-  auto p = parser("a || true");
+  auto* p = parser("a || true");
   auto e = p->logical_or_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kLogicalOr, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, LogicalOrExpression_InvalidLHS) {
-  auto p = parser("if (a) {} || true");
+  auto* p = parser("if (a) {} || true");
   auto e = p->logical_or_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_EQ(e, nullptr);
 }
 
 TEST_F(ParserImplTest, LogicalOrExpression_InvalidRHS) {
-  auto p = parser("true || if (a) {}");
+  auto* p = parser("true || if (a) {}");
   auto e = p->logical_or_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -63,7 +63,7 @@
 }
 
 TEST_F(ParserImplTest, LogicalOrExpression_NoOr_ReturnsLHS) {
-  auto p = parser("a true");
+  auto* p = parser("a true");
   auto e = p->logical_or_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_loop_stmt_test.cc b/src/reader/wgsl/parser_impl_loop_stmt_test.cc
index 434ace5..ea7a245 100644
--- a/src/reader/wgsl/parser_impl_loop_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_loop_stmt_test.cc
@@ -22,51 +22,51 @@
 namespace {
 
 TEST_F(ParserImplTest, LoopStmt_BodyNoContinuing) {
-  auto p = parser("loop { nop; }");
+  auto* p = parser("loop { nop; }");
   auto e = p->loop_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
-  ASSERT_EQ(e->body().size(), 1);
+  ASSERT_EQ(e->body().size(), 1u);
   EXPECT_TRUE(e->body()[0]->IsNop());
 
-  EXPECT_EQ(e->continuing().size(), 0);
+  EXPECT_EQ(e->continuing().size(), 0u);
 }
 
 TEST_F(ParserImplTest, LoopStmt_BodyWithContinuing) {
-  auto p = parser("loop { nop; continuing { kill; }}");
+  auto* p = parser("loop { nop; continuing { kill; }}");
   auto e = p->loop_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
-  ASSERT_EQ(e->body().size(), 1);
+  ASSERT_EQ(e->body().size(), 1u);
   EXPECT_TRUE(e->body()[0]->IsNop());
 
-  EXPECT_EQ(e->continuing().size(), 1);
+  EXPECT_EQ(e->continuing().size(), 1u);
   EXPECT_TRUE(e->continuing()[0]->IsKill());
 }
 
 TEST_F(ParserImplTest, LoopStmt_NoBodyNoContinuing) {
-  auto p = parser("loop { }");
+  auto* p = parser("loop { }");
   auto e = p->loop_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
-  ASSERT_EQ(e->body().size(), 0);
-  ASSERT_EQ(e->continuing().size(), 0);
+  ASSERT_EQ(e->body().size(), 0u);
+  ASSERT_EQ(e->continuing().size(), 0u);
 }
 
 TEST_F(ParserImplTest, LoopStmt_NoBodyWithContinuing) {
-  auto p = parser("loop { continuing { kill; }}");
+  auto* p = parser("loop { continuing { kill; }}");
   auto e = p->loop_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
-  ASSERT_EQ(e->body().size(), 0);
-  ASSERT_EQ(e->continuing().size(), 1);
+  ASSERT_EQ(e->body().size(), 0u);
+  ASSERT_EQ(e->continuing().size(), 1u);
   EXPECT_TRUE(e->continuing()[0]->IsKill());
 }
 
 TEST_F(ParserImplTest, LoopStmt_MissingBracketLeft) {
-  auto p = parser("loop kill; }");
+  auto* p = parser("loop kill; }");
   auto e = p->loop_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -74,7 +74,7 @@
 }
 
 TEST_F(ParserImplTest, LoopStmt_MissingBracketRight) {
-  auto p = parser("loop { kill; ");
+  auto* p = parser("loop { kill; ");
   auto e = p->loop_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -82,7 +82,7 @@
 }
 
 TEST_F(ParserImplTest, LoopStmt_InvalidStatements) {
-  auto p = parser("loop { kill }");
+  auto* p = parser("loop { kill }");
   auto e = p->loop_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -90,7 +90,7 @@
 }
 
 TEST_F(ParserImplTest, LoopStmt_InvalidContinuing) {
-  auto p = parser("loop { continuing { kill }}");
+  auto* p = parser("loop { continuing { kill }}");
   auto e = p->loop_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_multiplicative_expression_test.cc b/src/reader/wgsl/parser_impl_multiplicative_expression_test.cc
index cba8fc1..22a9dfc 100644
--- a/src/reader/wgsl/parser_impl_multiplicative_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_multiplicative_expression_test.cc
@@ -26,80 +26,80 @@
 namespace {
 
 TEST_F(ParserImplTest, MultiplicativeExpression_Parses_Multiply) {
-  auto p = parser("a * true");
+  auto* p = parser("a * true");
   auto e = p->multiplicative_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kMultiply, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, MultiplicativeExpression_Parses_Divide) {
-  auto p = parser("a / true");
+  auto* p = parser("a / true");
   auto e = p->multiplicative_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kDivide, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, MultiplicativeExpression_Parses_Modulo) {
-  auto p = parser("a % true");
+  auto* p = parser("a % true");
   auto e = p->multiplicative_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kModulo, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, MultiplicativeExpression_InvalidLHS) {
-  auto p = parser("if (a) {} * true");
+  auto* p = parser("if (a) {} * true");
   auto e = p->multiplicative_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_EQ(e, nullptr);
 }
 
 TEST_F(ParserImplTest, MultiplicativeExpression_InvalidRHS) {
-  auto p = parser("true * if (a) {}");
+  auto* p = parser("true * if (a) {}");
   auto e = p->multiplicative_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -107,7 +107,7 @@
 }
 
 TEST_F(ParserImplTest, MultiplicativeExpression_NoOr_ReturnsLHS) {
-  auto p = parser("a true");
+  auto* p = parser("a true");
   auto e = p->multiplicative_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_param_list_test.cc b/src/reader/wgsl/parser_impl_param_list_test.cc
index f337f65..ca8c38e 100644
--- a/src/reader/wgsl/parser_impl_param_list_test.cc
+++ b/src/reader/wgsl/parser_impl_param_list_test.cc
@@ -29,26 +29,26 @@
 namespace {
 
 TEST_F(ParserImplTest, ParamList_Single) {
-  auto i32 = tm()->Get(std::make_unique<ast::type::I32Type>());
+  auto* i32 = tm()->Get(std::make_unique<ast::type::I32Type>());
 
-  auto p = parser("a : i32");
+  auto* p = parser("a : i32");
   auto e = p->param_list();
   ASSERT_FALSE(p->has_error()) << p->error();
-  EXPECT_EQ(e.size(), 1);
+  EXPECT_EQ(e.size(), 1u);
 
   EXPECT_EQ(e[0]->name(), "a");
   EXPECT_EQ(e[0]->type(), i32);
 }
 
 TEST_F(ParserImplTest, ParamList_Multiple) {
-  auto i32 = tm()->Get(std::make_unique<ast::type::I32Type>());
-  auto f32 = tm()->Get(std::make_unique<ast::type::F32Type>());
-  auto vec2 = tm()->Get(std::make_unique<ast::type::VectorType>(f32, 2));
+  auto* i32 = tm()->Get(std::make_unique<ast::type::I32Type>());
+  auto* f32 = tm()->Get(std::make_unique<ast::type::F32Type>());
+  auto* vec2 = tm()->Get(std::make_unique<ast::type::VectorType>(f32, 2));
 
-  auto p = parser("a : i32, b: f32, c: vec2<f32>");
+  auto* p = parser("a : i32, b: f32, c: vec2<f32>");
   auto e = p->param_list();
   ASSERT_FALSE(p->has_error()) << p->error();
-  EXPECT_EQ(e.size(), 3);
+  EXPECT_EQ(e.size(), 3u);
 
   EXPECT_EQ(e[0]->name(), "a");
   EXPECT_EQ(e[0]->type(), i32);
@@ -61,14 +61,14 @@
 }
 
 TEST_F(ParserImplTest, ParamList_Empty) {
-  auto p = parser("");
+  auto* p = parser("");
   auto e = p->param_list();
   ASSERT_FALSE(p->has_error()) << p->error();
-  EXPECT_EQ(e.size(), 0);
+  EXPECT_EQ(e.size(), 0u);
 }
 
 TEST_F(ParserImplTest, ParamList_HangingComma) {
-  auto p = parser("a : i32,");
+  auto* p = parser("a : i32,");
   auto e = p->param_list();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:8: found , but no variable declaration");
diff --git a/src/reader/wgsl/parser_impl_paren_rhs_stmt_test.cc b/src/reader/wgsl/parser_impl_paren_rhs_stmt_test.cc
index fde1394..0610446 100644
--- a/src/reader/wgsl/parser_impl_paren_rhs_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_paren_rhs_stmt_test.cc
@@ -22,7 +22,7 @@
 namespace {
 
 TEST_F(ParserImplTest, ParenRhsStmt) {
-  auto p = parser("(a + b)");
+  auto* p = parser("(a + b)");
   auto e = p->paren_rhs_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -30,7 +30,7 @@
 }
 
 TEST_F(ParserImplTest, ParenRhsStmt_MissingLeftParen) {
-  auto p = parser("true)");
+  auto* p = parser("true)");
   auto e = p->paren_rhs_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -38,7 +38,7 @@
 }
 
 TEST_F(ParserImplTest, ParenRhsStmt_MissingRightParen) {
-  auto p = parser("(true");
+  auto* p = parser("(true");
   auto e = p->paren_rhs_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -46,7 +46,7 @@
 }
 
 TEST_F(ParserImplTest, ParenRhsStmt_InvalidExpression) {
-  auto p = parser("(if (a() {})");
+  auto* p = parser("(if (a() {})");
   auto e = p->paren_rhs_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -54,7 +54,7 @@
 }
 
 TEST_F(ParserImplTest, ParenRhsStmt_MissingExpression) {
-  auto p = parser("()");
+  auto* p = parser("()");
   auto e = p->paren_rhs_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_pipeline_stage_test.cc b/src/reader/wgsl/parser_impl_pipeline_stage_test.cc
index b566534..19bac5c 100644
--- a/src/reader/wgsl/parser_impl_pipeline_stage_test.cc
+++ b/src/reader/wgsl/parser_impl_pipeline_stage_test.cc
@@ -36,9 +36,9 @@
   PipelineStageTest() = default;
   ~PipelineStageTest() = default;
 
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   ParserImpl* parser(const std::string& str) {
     impl_ = std::make_unique<ParserImpl>(&ctx_, str);
@@ -52,7 +52,7 @@
 
 TEST_P(PipelineStageTest, Parses) {
   auto params = GetParam();
-  auto p = parser(params.input);
+  auto* p = parser(params.input);
 
   auto stage = p->pipeline_stage();
   ASSERT_FALSE(p->has_error());
@@ -70,7 +70,7 @@
         PipelineStageData{"compute", ast::PipelineStage::kCompute}));
 
 TEST_F(ParserImplTest, PipelineStage_NoMatch) {
-  auto p = parser("not-a-stage");
+  auto* p = parser("not-a-stage");
   auto stage = p->pipeline_stage();
   ASSERT_EQ(stage, ast::PipelineStage::kNone);
 
diff --git a/src/reader/wgsl/parser_impl_postfix_expression_test.cc b/src/reader/wgsl/parser_impl_postfix_expression_test.cc
index 66380cb..5b7be35 100644
--- a/src/reader/wgsl/parser_impl_postfix_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_postfix_expression_test.cc
@@ -31,45 +31,45 @@
 namespace {
 
 TEST_F(ParserImplTest, PostfixExpression_Array_ConstantIndex) {
-  auto p = parser("a[1]");
+  auto* p = parser("a[1]");
   auto e = p->postfix_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsArrayAccessor());
-  auto ary = e->AsArrayAccessor();
+  auto* ary = e->AsArrayAccessor();
 
   ASSERT_TRUE(ary->array()->IsIdentifier());
-  auto ident = ary->array()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = ary->array()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(ary->idx_expr()->IsConstructor());
   ASSERT_TRUE(ary->idx_expr()->AsConstructor()->IsScalarConstructor());
-  auto c = ary->idx_expr()->AsConstructor()->AsScalarConstructor();
+  auto* c = ary->idx_expr()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(c->literal()->IsInt());
   EXPECT_EQ(c->literal()->AsInt()->value(), 1);
 }
 
 TEST_F(ParserImplTest, PostfixExpression_Array_ExpressionIndex) {
-  auto p = parser("a[1 + b / 4]");
+  auto* p = parser("a[1 + b / 4]");
   auto e = p->postfix_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsArrayAccessor());
-  auto ary = e->AsArrayAccessor();
+  auto* ary = e->AsArrayAccessor();
 
   ASSERT_TRUE(ary->array()->IsIdentifier());
-  auto ident = ary->array()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = ary->array()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(ary->idx_expr()->IsBinary());
 }
 
 TEST_F(ParserImplTest, PostfixExpression_Array_MissingIndex) {
-  auto p = parser("a[]");
+  auto* p = parser("a[]");
   auto e = p->postfix_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -77,7 +77,7 @@
 }
 
 TEST_F(ParserImplTest, PostfixExpression_Array_MissingRightBrace) {
-  auto p = parser("a[1");
+  auto* p = parser("a[1");
   auto e = p->postfix_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -85,7 +85,7 @@
 }
 
 TEST_F(ParserImplTest, PostfixExpression_Array_InvalidIndex) {
-  auto p = parser("a[if(a() {})]");
+  auto* p = parser("a[if(a() {})]");
   auto e = p->postfix_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -93,45 +93,45 @@
 }
 
 TEST_F(ParserImplTest, PostfixExpression_Call_Empty) {
-  auto p = parser("a()");
+  auto* p = parser("a()");
   auto e = p->postfix_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsCall());
-  auto c = e->AsCall();
+  auto* c = e->AsCall();
 
   ASSERT_TRUE(c->func()->IsIdentifier());
-  auto func = c->func()->AsIdentifier();
-  ASSERT_EQ(func->name().size(), 1);
+  auto* func = c->func()->AsIdentifier();
+  ASSERT_EQ(func->name().size(), 1u);
   EXPECT_EQ(func->name()[0], "a");
 
-  EXPECT_EQ(c->params().size(), 0);
+  EXPECT_EQ(c->params().size(), 0u);
 }
 
 TEST_F(ParserImplTest, PostfixExpression_Call_WithArgs) {
-  auto p = parser("std::test(1, b, 2 + 3 / b)");
+  auto* p = parser("std::test(1, b, 2 + 3 / b)");
   auto e = p->postfix_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsCall());
-  auto c = e->AsCall();
+  auto* c = e->AsCall();
 
   ASSERT_TRUE(c->func()->IsIdentifier());
-  auto func = c->func()->AsIdentifier();
-  ASSERT_EQ(func->name().size(), 2);
+  auto* func = c->func()->AsIdentifier();
+  ASSERT_EQ(func->name().size(), 2u);
   EXPECT_EQ(func->name()[0], "std");
   EXPECT_EQ(func->name()[1], "test");
 
-  EXPECT_EQ(c->params().size(), 3);
+  EXPECT_EQ(c->params().size(), 3u);
   EXPECT_TRUE(c->params()[0]->IsConstructor());
   EXPECT_TRUE(c->params()[1]->IsIdentifier());
   EXPECT_TRUE(c->params()[2]->IsBinary());
 }
 
 TEST_F(ParserImplTest, PostfixExpression_Call_InvalidArg) {
-  auto p = parser("a(if(a) {})");
+  auto* p = parser("a(if(a) {})");
   auto e = p->postfix_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -139,7 +139,7 @@
 }
 
 TEST_F(ParserImplTest, PostfixExpression_Call_HangingComma) {
-  auto p = parser("a(b, )");
+  auto* p = parser("a(b, )");
   auto e = p->postfix_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -147,7 +147,7 @@
 }
 
 TEST_F(ParserImplTest, PostfixExpression_Call_MissingRightParen) {
-  auto p = parser("a(");
+  auto* p = parser("a(");
   auto e = p->postfix_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -155,24 +155,24 @@
 }
 
 TEST_F(ParserImplTest, PostfixExpression_MemberAccessor) {
-  auto p = parser("a.b");
+  auto* p = parser("a.b");
   auto e = p->postfix_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsMemberAccessor());
 
-  auto m = e->AsMemberAccessor();
+  auto* m = e->AsMemberAccessor();
   ASSERT_TRUE(m->structure()->IsIdentifier());
-  ASSERT_EQ(m->structure()->AsIdentifier()->name().size(), 1);
+  ASSERT_EQ(m->structure()->AsIdentifier()->name().size(), 1u);
   EXPECT_EQ(m->structure()->AsIdentifier()->name()[0], "a");
 
   ASSERT_TRUE(m->member()->IsIdentifier());
-  ASSERT_EQ(m->member()->AsIdentifier()->name().size(), 1);
+  ASSERT_EQ(m->member()->AsIdentifier()->name().size(), 1u);
   EXPECT_EQ(m->member()->AsIdentifier()->name()[0], "b");
 }
 
 TEST_F(ParserImplTest, PostfixExpression_MemberAccesssor_InvalidIdent) {
-  auto p = parser("a.if");
+  auto* p = parser("a.if");
   auto e = p->postfix_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -180,7 +180,7 @@
 }
 
 TEST_F(ParserImplTest, PostfixExpression_MemberAccessor_MissingIdent) {
-  auto p = parser("a.");
+  auto* p = parser("a.");
   auto e = p->postfix_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -188,7 +188,7 @@
 }
 
 TEST_F(ParserImplTest, PostfixExpression_NonMatch_returnLHS) {
-  auto p = parser("a b");
+  auto* p = parser("a b");
   auto e = p->postfix_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_primary_expression_test.cc b/src/reader/wgsl/parser_impl_primary_expression_test.cc
index ae0c9c3..29f11a3 100644
--- a/src/reader/wgsl/parser_impl_primary_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_primary_expression_test.cc
@@ -36,24 +36,24 @@
 namespace {
 
 TEST_F(ParserImplTest, PrimaryExpression_Ident) {
-  auto p = parser("a");
+  auto* p = parser("a");
   auto e = p->primary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsIdentifier());
-  auto ident = e->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = e->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_Ident_WithNamespace) {
-  auto p = parser("a::b::c::d");
+  auto* p = parser("a::b::c::d");
   auto e = p->primary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsIdentifier());
-  auto ident = e->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 4);
+  auto* ident = e->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 4u);
   EXPECT_EQ(ident->name()[0], "a");
   EXPECT_EQ(ident->name()[1], "b");
   EXPECT_EQ(ident->name()[2], "c");
@@ -61,7 +61,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_Ident_MissingIdent) {
-  auto p = parser("a::");
+  auto* p = parser("a::");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -69,19 +69,19 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_TypeDecl) {
-  auto p = parser("vec4<i32>(1, 2, 3, 4))");
+  auto* p = parser("vec4<i32>(1, 2, 3, 4))");
   auto e = p->primary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsConstructor());
   ASSERT_TRUE(e->AsConstructor()->IsTypeConstructor());
-  auto ty = e->AsConstructor()->AsTypeConstructor();
+  auto* ty = e->AsConstructor()->AsTypeConstructor();
 
-  ASSERT_EQ(ty->values().size(), 4);
+  ASSERT_EQ(ty->values().size(), 4u);
   const auto& val = ty->values();
   ASSERT_TRUE(val[0]->IsConstructor());
   ASSERT_TRUE(val[0]->AsConstructor()->IsScalarConstructor());
-  auto ident = val[0]->AsConstructor()->AsScalarConstructor();
+  auto* ident = val[0]->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(ident->literal()->IsInt());
   EXPECT_EQ(ident->literal()->AsInt()->value(), 1);
 
@@ -105,7 +105,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_TypeDecl_InvalidTypeDecl) {
-  auto p = parser("vec4<if>(2., 3., 4., 5.)");
+  auto* p = parser("vec4<if>(2., 3., 4., 5.)");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -113,7 +113,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_TypeDecl_MissingLeftParen) {
-  auto p = parser("vec4<f32> 2., 3., 4., 5.)");
+  auto* p = parser("vec4<f32> 2., 3., 4., 5.)");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -121,7 +121,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_TypeDecl_MissingRightParen) {
-  auto p = parser("vec4<f32>(2., 3., 4., 5.");
+  auto* p = parser("vec4<f32>(2., 3., 4., 5.");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -129,7 +129,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_TypeDecl_InvalidValue) {
-  auto p = parser("i32(if(a) {})");
+  auto* p = parser("i32(if(a) {})");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -137,19 +137,19 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_ConstLiteral_True) {
-  auto p = parser("true");
+  auto* p = parser("true");
   auto e = p->primary_expression();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsConstructor());
   ASSERT_TRUE(e->AsConstructor()->IsScalarConstructor());
-  auto init = e->AsConstructor()->AsScalarConstructor();
+  auto* init = e->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   EXPECT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_ParenExpr) {
-  auto p = parser("(a == b)");
+  auto* p = parser("(a == b)");
   auto e = p->primary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -157,7 +157,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_ParenExpr_MissingRightParen) {
-  auto p = parser("(a == b");
+  auto* p = parser("(a == b");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -165,7 +165,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_ParenExpr_MissingExpr) {
-  auto p = parser("()");
+  auto* p = parser("()");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -173,7 +173,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_ParenExpr_InvalidExpr) {
-  auto p = parser("(if (a) {})");
+  auto* p = parser("(if (a) {})");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -181,15 +181,15 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_Cast) {
-  auto f32_type = tm()->Get(std::make_unique<ast::type::F32Type>());
+  auto* f32_type = tm()->Get(std::make_unique<ast::type::F32Type>());
 
-  auto p = parser("cast<f32>(1)");
+  auto* p = parser("cast<f32>(1)");
   auto e = p->primary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsCast());
 
-  auto c = e->AsCast();
+  auto* c = e->AsCast();
   ASSERT_EQ(c->type(), f32_type);
 
   ASSERT_TRUE(c->expr()->IsConstructor());
@@ -197,7 +197,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_Cast_MissingGreaterThan) {
-  auto p = parser("cast<f32(1)");
+  auto* p = parser("cast<f32(1)");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -205,7 +205,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_Cast_MissingType) {
-  auto p = parser("cast<>(1)");
+  auto* p = parser("cast<>(1)");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -213,7 +213,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_Cast_InvalidType) {
-  auto p = parser("cast<invalid>(1)");
+  auto* p = parser("cast<invalid>(1)");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -221,7 +221,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_Cast_MissingLeftParen) {
-  auto p = parser("cast<f32>1)");
+  auto* p = parser("cast<f32>1)");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -229,7 +229,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_Cast_MissingRightParen) {
-  auto p = parser("cast<f32>(1");
+  auto* p = parser("cast<f32>(1");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -237,7 +237,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_Cast_MissingExpression) {
-  auto p = parser("cast<f32>()");
+  auto* p = parser("cast<f32>()");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -245,7 +245,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_Cast_InvalidExpression) {
-  auto p = parser("cast<f32>(if (a) {})");
+  auto* p = parser("cast<f32>(if (a) {})");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -253,15 +253,15 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_As) {
-  auto f32_type = tm()->Get(std::make_unique<ast::type::F32Type>());
+  auto* f32_type = tm()->Get(std::make_unique<ast::type::F32Type>());
 
-  auto p = parser("as<f32>(1)");
+  auto* p = parser("as<f32>(1)");
   auto e = p->primary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsAs());
 
-  auto c = e->AsAs();
+  auto* c = e->AsAs();
   ASSERT_EQ(c->type(), f32_type);
 
   ASSERT_TRUE(c->expr()->IsConstructor());
@@ -269,7 +269,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_As_MissingGreaterThan) {
-  auto p = parser("as<f32(1)");
+  auto* p = parser("as<f32(1)");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -277,7 +277,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_As_MissingType) {
-  auto p = parser("as<>(1)");
+  auto* p = parser("as<>(1)");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -285,7 +285,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_As_InvalidType) {
-  auto p = parser("as<invalid>(1)");
+  auto* p = parser("as<invalid>(1)");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -293,7 +293,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_As_MissingLeftParen) {
-  auto p = parser("as<f32>1)");
+  auto* p = parser("as<f32>1)");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -301,7 +301,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_As_MissingRightParen) {
-  auto p = parser("as<f32>(1");
+  auto* p = parser("as<f32>(1");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -309,7 +309,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_As_MissingExpression) {
-  auto p = parser("as<f32>()");
+  auto* p = parser("as<f32>()");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -317,7 +317,7 @@
 }
 
 TEST_F(ParserImplTest, PrimaryExpression_As_InvalidExpression) {
-  auto p = parser("as<f32>(if (a) {})");
+  auto* p = parser("as<f32>(if (a) {})");
   auto e = p->primary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_relational_expression_test.cc b/src/reader/wgsl/parser_impl_relational_expression_test.cc
index 1b4ab29..1151977 100644
--- a/src/reader/wgsl/parser_impl_relational_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_relational_expression_test.cc
@@ -26,102 +26,102 @@
 namespace {
 
 TEST_F(ParserImplTest, RelationalExpression_Parses_LessThan) {
-  auto p = parser("a < true");
+  auto* p = parser("a < true");
   auto e = p->relational_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kLessThan, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, RelationalExpression_Parses_GreaterThan) {
-  auto p = parser("a > true");
+  auto* p = parser("a > true");
   auto e = p->relational_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kGreaterThan, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, RelationalExpression_Parses_LessThanEqual) {
-  auto p = parser("a <= true");
+  auto* p = parser("a <= true");
   auto e = p->relational_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kLessThanEqual, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, RelationalExpression_Parses_GreaterThanEqual) {
-  auto p = parser("a >= true");
+  auto* p = parser("a >= true");
   auto e = p->relational_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kGreaterThanEqual, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, RelationalExpression_InvalidLHS) {
-  auto p = parser("if (a) {} < true");
+  auto* p = parser("if (a) {} < true");
   auto e = p->relational_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_EQ(e, nullptr);
 }
 
 TEST_F(ParserImplTest, RelationalExpression_InvalidRHS) {
-  auto p = parser("true < if (a) {}");
+  auto* p = parser("true < if (a) {}");
   auto e = p->relational_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -129,7 +129,7 @@
 }
 
 TEST_F(ParserImplTest, RelationalExpression_NoOr_ReturnsLHS) {
-  auto p = parser("a true");
+  auto* p = parser("a true");
   auto e = p->relational_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_shift_expression_test.cc b/src/reader/wgsl/parser_impl_shift_expression_test.cc
index 60c99ad..f6e8351 100644
--- a/src/reader/wgsl/parser_impl_shift_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_shift_expression_test.cc
@@ -26,80 +26,80 @@
 namespace {
 
 TEST_F(ParserImplTest, ShiftExpression_Parses_ShiftLeft) {
-  auto p = parser("a << true");
+  auto* p = parser("a << true");
   auto e = p->shift_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kShiftLeft, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, ShiftExpression_Parses_ShiftRight) {
-  auto p = parser("a >> true");
+  auto* p = parser("a >> true");
   auto e = p->shift_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kShiftRight, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, ShiftExpression_Parses_ShiftRightArith) {
-  auto p = parser("a >>> true");
+  auto* p = parser("a >>> true");
   auto e = p->shift_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsBinary());
-  auto rel = e->AsBinary();
+  auto* rel = e->AsBinary();
   EXPECT_EQ(ast::BinaryOp::kShiftRightArith, rel->op());
 
   ASSERT_TRUE(rel->lhs()->IsIdentifier());
-  auto ident = rel->lhs()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = rel->lhs()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(rel->rhs()->IsConstructor());
   ASSERT_TRUE(rel->rhs()->AsConstructor()->IsScalarConstructor());
-  auto init = rel->rhs()->AsConstructor()->AsScalarConstructor();
+  auto* init = rel->rhs()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsBool());
   ASSERT_TRUE(init->literal()->AsBool()->IsTrue());
 }
 
 TEST_F(ParserImplTest, ShiftExpression_InvalidLHS) {
-  auto p = parser("if (a) {} << true");
+  auto* p = parser("if (a) {} << true");
   auto e = p->shift_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_EQ(e, nullptr);
 }
 
 TEST_F(ParserImplTest, ShiftExpression_InvalidRHS) {
-  auto p = parser("true << if (a) {}");
+  auto* p = parser("true << if (a) {}");
   auto e = p->shift_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -107,7 +107,7 @@
 }
 
 TEST_F(ParserImplTest, ShiftExpression_NoOr_ReturnsLHS) {
-  auto p = parser("a true");
+  auto* p = parser("a true");
   auto e = p->shift_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_statement_test.cc b/src/reader/wgsl/parser_impl_statement_test.cc
index 29ad4f8..f123437 100644
--- a/src/reader/wgsl/parser_impl_statement_test.cc
+++ b/src/reader/wgsl/parser_impl_statement_test.cc
@@ -24,7 +24,7 @@
 namespace {
 
 TEST_F(ParserImplTest, Statement) {
-  auto p = parser("return;");
+  auto* p = parser("return;");
   auto e = p->statement();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -32,37 +32,37 @@
 }
 
 TEST_F(ParserImplTest, Statement_Semicolon) {
-  auto p = parser(";");
+  auto* p = parser(";");
   auto e = p->statement();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_EQ(e, nullptr);
 }
 
 TEST_F(ParserImplTest, Statement_Return_NoValue) {
-  auto p = parser("return;");
+  auto* p = parser("return;");
   auto e = p->statement();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsReturn());
-  auto ret = e->AsReturn();
+  auto* ret = e->AsReturn();
   ASSERT_EQ(ret->value(), nullptr);
 }
 
 TEST_F(ParserImplTest, Statement_Return_Value) {
-  auto p = parser("return a + b * (.1 - .2);");
+  auto* p = parser("return a + b * (.1 - .2);");
   auto e = p->statement();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsReturn());
-  auto ret = e->AsReturn();
+  auto* ret = e->AsReturn();
   ASSERT_NE(ret->value(), nullptr);
   EXPECT_TRUE(ret->value()->IsBinary());
 }
 
 TEST_F(ParserImplTest, Statement_Return_MissingSemi) {
-  auto p = parser("return");
+  auto* p = parser("return");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -70,7 +70,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Return_Invalid) {
-  auto p = parser("return if(a) {};");
+  auto* p = parser("return if(a) {};");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -78,7 +78,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_If) {
-  auto p = parser("if (a) {}");
+  auto* p = parser("if (a) {}");
   auto e = p->statement();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -86,7 +86,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_If_Invalid) {
-  auto p = parser("if (a) { fn main() -> {}}");
+  auto* p = parser("if (a) { fn main() -> {}}");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -94,7 +94,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Unless) {
-  auto p = parser("unless (a) {}");
+  auto* p = parser("unless (a) {}");
   auto e = p->statement();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -102,7 +102,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Unless_Invalid) {
-  auto p = parser("unless () {}");
+  auto* p = parser("unless () {}");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -110,7 +110,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Variable) {
-  auto p = parser("var a : i32 = 1;");
+  auto* p = parser("var a : i32 = 1;");
   auto e = p->statement();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -118,7 +118,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Variable_Invalid) {
-  auto p = parser("var a : i32 =;");
+  auto* p = parser("var a : i32 =;");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -126,7 +126,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Variable_MissingSemicolon) {
-  auto p = parser("var a : i32");
+  auto* p = parser("var a : i32");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -134,7 +134,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Switch) {
-  auto p = parser("switch (a) {}");
+  auto* p = parser("switch (a) {}");
   auto e = p->statement();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -142,7 +142,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Switch_Invalid) {
-  auto p = parser("switch (a) { case: {}}");
+  auto* p = parser("switch (a) { case: {}}");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -150,7 +150,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Loop) {
-  auto p = parser("loop {}");
+  auto* p = parser("loop {}");
   auto e = p->statement();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -158,7 +158,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Loop_Invalid) {
-  auto p = parser("loop kill; }");
+  auto* p = parser("loop kill; }");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -166,7 +166,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Assignment) {
-  auto p = parser("a = b;");
+  auto* p = parser("a = b;");
   auto e = p->statement();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -174,7 +174,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Assignment_Invalid) {
-  auto p = parser("a = if(b) {};");
+  auto* p = parser("a = if(b) {};");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -182,7 +182,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Assignment_MissingSemicolon) {
-  auto p = parser("a = b");
+  auto* p = parser("a = b");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -190,7 +190,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Break) {
-  auto p = parser("break;");
+  auto* p = parser("break;");
   auto e = p->statement();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -198,7 +198,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Break_Invalid) {
-  auto p = parser("break if (a = b);");
+  auto* p = parser("break if (a = b);");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -206,7 +206,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Break_MissingSemicolon) {
-  auto p = parser("break if (a == b)");
+  auto* p = parser("break if (a == b)");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -214,7 +214,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Continue) {
-  auto p = parser("continue;");
+  auto* p = parser("continue;");
   auto e = p->statement();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -222,7 +222,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Continue_Invalid) {
-  auto p = parser("continue if (a = b);");
+  auto* p = parser("continue if (a = b);");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -230,7 +230,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Continue_MissingSemicolon) {
-  auto p = parser("continue if (a == b)");
+  auto* p = parser("continue if (a == b)");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -238,7 +238,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Kill) {
-  auto p = parser("kill;");
+  auto* p = parser("kill;");
   auto e = p->statement();
   ASSERT_FALSE(p->has_error()) << p->error();
   EXPECT_NE(e, nullptr);
@@ -246,7 +246,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Kill_MissingSemicolon) {
-  auto p = parser("kill");
+  auto* p = parser("kill");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(e, nullptr);
@@ -254,7 +254,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Nop) {
-  auto p = parser("nop;");
+  auto* p = parser("nop;");
   auto e = p->statement();
   ASSERT_FALSE(p->has_error()) << p->error();
   EXPECT_NE(e, nullptr);
@@ -262,7 +262,7 @@
 }
 
 TEST_F(ParserImplTest, Statement_Nop_MissingSemicolon) {
-  auto p = parser("nop");
+  auto* p = parser("nop");
   auto e = p->statement();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_statements_test.cc b/src/reader/wgsl/parser_impl_statements_test.cc
index 8a07abc..3e6a959 100644
--- a/src/reader/wgsl/parser_impl_statements_test.cc
+++ b/src/reader/wgsl/parser_impl_statements_test.cc
@@ -23,20 +23,20 @@
 namespace {
 
 TEST_F(ParserImplTest, Statements) {
-  auto p = parser("nop; kill; return;");
+  auto* p = parser("nop; kill; return;");
   auto e = p->statements();
   ASSERT_FALSE(p->has_error()) << p->error();
-  ASSERT_EQ(e.size(), 3);
+  ASSERT_EQ(e.size(), 3u);
   EXPECT_TRUE(e[0]->IsNop());
   EXPECT_TRUE(e[1]->IsKill());
   EXPECT_TRUE(e[2]->IsReturn());
 }
 
 TEST_F(ParserImplTest, Statements_Empty) {
-  auto p = parser("");
+  auto* p = parser("");
   auto e = p->statements();
   ASSERT_FALSE(p->has_error()) << p->error();
-  ASSERT_EQ(e.size(), 0);
+  ASSERT_EQ(e.size(), 0u);
 }
 
 }  // namespace
diff --git a/src/reader/wgsl/parser_impl_storage_class_test.cc b/src/reader/wgsl/parser_impl_storage_class_test.cc
index 923dd76..8a827ef 100644
--- a/src/reader/wgsl/parser_impl_storage_class_test.cc
+++ b/src/reader/wgsl/parser_impl_storage_class_test.cc
@@ -36,9 +36,9 @@
   StorageClassTest() = default;
   ~StorageClassTest() = default;
 
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   ParserImpl* parser(const std::string& str) {
     impl_ = std::make_unique<ParserImpl>(&ctx_, str);
@@ -52,7 +52,7 @@
 
 TEST_P(StorageClassTest, Parses) {
   auto params = GetParam();
-  auto p = parser(params.input);
+  auto* p = parser(params.input);
 
   auto sc = p->storage_class();
   ASSERT_FALSE(p->has_error());
@@ -78,7 +78,7 @@
         StorageClassData{"function", ast::StorageClass::kFunction}));
 
 TEST_F(ParserImplTest, StorageClass_NoMatch) {
-  auto p = parser("not-a-storage-class");
+  auto* p = parser("not-a-storage-class");
   auto sc = p->storage_class();
   ASSERT_EQ(sc, ast::StorageClass::kNone);
 
diff --git a/src/reader/wgsl/parser_impl_struct_body_decl_test.cc b/src/reader/wgsl/parser_impl_struct_body_decl_test.cc
index 0bee981..ecf29a9 100644
--- a/src/reader/wgsl/parser_impl_struct_body_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_body_decl_test.cc
@@ -24,28 +24,28 @@
 namespace {
 
 TEST_F(ParserImplTest, StructBodyDecl_Parses) {
-  auto i32 = tm()->Get(std::make_unique<ast::type::I32Type>());
+  auto* i32 = tm()->Get(std::make_unique<ast::type::I32Type>());
 
-  auto p = parser("{a : i32;}");
+  auto* p = parser("{a : i32;}");
   auto m = p->struct_body_decl();
   ASSERT_FALSE(p->has_error());
-  ASSERT_EQ(m.size(), 1);
+  ASSERT_EQ(m.size(), 1u);
 
   const auto& mem = m[0];
   EXPECT_EQ(mem->name(), "a");
   EXPECT_EQ(mem->type(), i32);
-  EXPECT_EQ(mem->decorations().size(), 0);
+  EXPECT_EQ(mem->decorations().size(), 0u);
 }
 
 TEST_F(ParserImplTest, StructBodyDecl_ParsesEmpty) {
-  auto p = parser("{}");
+  auto* p = parser("{}");
   auto m = p->struct_body_decl();
   ASSERT_FALSE(p->has_error());
-  ASSERT_EQ(m.size(), 0);
+  ASSERT_EQ(m.size(), 0u);
 }
 
 TEST_F(ParserImplTest, StructBodyDecl_InvalidMember) {
-  auto p = parser(R"(
+  auto* p = parser(R"(
 {
   [[offset nan]] a : i32;
 })");
@@ -55,14 +55,14 @@
 }
 
 TEST_F(ParserImplTest, StructBodyDecl_MissingClosingBracket) {
-  auto p = parser("{a : i32;");
+  auto* p = parser("{a : i32;");
   auto m = p->struct_body_decl();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:10: missing } for struct declaration");
 }
 
 TEST_F(ParserImplTest, StructBodyDecl_InvalidToken) {
-  auto p = parser(R"(
+  auto* p = parser(R"(
 {
   a : i32;
   1.23
diff --git a/src/reader/wgsl/parser_impl_struct_decl_test.cc b/src/reader/wgsl/parser_impl_struct_decl_test.cc
index b409289..bb91899 100644
--- a/src/reader/wgsl/parser_impl_struct_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_decl_test.cc
@@ -23,7 +23,7 @@
 namespace {
 
 TEST_F(ParserImplTest, StructDecl_Parses) {
-  auto p = parser(R"(
+  auto* p = parser(R"(
 struct {
   a : i32;
   [[offset 4 ]] b : f32;
@@ -31,13 +31,13 @@
   auto s = p->struct_decl();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(s, nullptr);
-  ASSERT_EQ(s->impl()->members().size(), 2);
+  ASSERT_EQ(s->impl()->members().size(), 2u);
   EXPECT_EQ(s->impl()->members()[0]->name(), "a");
   EXPECT_EQ(s->impl()->members()[1]->name(), "b");
 }
 
 TEST_F(ParserImplTest, StructDecl_ParsesWithDecoration) {
-  auto p = parser(R"(
+  auto* p = parser(R"(
 [[block]] struct {
   a : f32;
   b : f32;
@@ -45,21 +45,21 @@
   auto s = p->struct_decl();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(s, nullptr);
-  ASSERT_EQ(s->impl()->members().size(), 2);
+  ASSERT_EQ(s->impl()->members().size(), 2u);
   EXPECT_EQ(s->impl()->members()[0]->name(), "a");
   EXPECT_EQ(s->impl()->members()[1]->name(), "b");
 }
 
 TEST_F(ParserImplTest, StructDecl_EmptyMembers) {
-  auto p = parser("struct {}");
+  auto* p = parser("struct {}");
   auto s = p->struct_decl();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(s, nullptr);
-  ASSERT_EQ(s->impl()->members().size(), 0);
+  ASSERT_EQ(s->impl()->members().size(), 0u);
 }
 
 TEST_F(ParserImplTest, StructDecl_MissingBracketLeft) {
-  auto p = parser("struct }");
+  auto* p = parser("struct }");
   auto s = p->struct_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(s, nullptr);
@@ -67,7 +67,7 @@
 }
 
 TEST_F(ParserImplTest, StructDecl_InvalidStructBody) {
-  auto p = parser("struct { a : B; }");
+  auto* p = parser("struct { a : B; }");
   auto s = p->struct_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(s, nullptr);
@@ -75,7 +75,7 @@
 }
 
 TEST_F(ParserImplTest, StructDecl_InvalidStructDecorationDecl) {
-  auto p = parser("[[block struct { a : i32; }");
+  auto* p = parser("[[block struct { a : i32; }");
   auto s = p->struct_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(s, nullptr);
@@ -83,7 +83,7 @@
 }
 
 TEST_F(ParserImplTest, StructDecl_MissingStruct) {
-  auto p = parser("[[block]] {}");
+  auto* p = parser("[[block]] {}");
   auto s = p->struct_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(s, nullptr);
diff --git a/src/reader/wgsl/parser_impl_struct_decoration_decl_test.cc b/src/reader/wgsl/parser_impl_struct_decoration_decl_test.cc
index a22bab0..c48dacf 100644
--- a/src/reader/wgsl/parser_impl_struct_decoration_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_decoration_decl_test.cc
@@ -22,21 +22,21 @@
 namespace {
 
 TEST_F(ParserImplTest, StructDecorationDecl_Parses) {
-  auto p = parser("[[block]]");
+  auto* p = parser("[[block]]");
   auto d = p->struct_decoration_decl();
   ASSERT_FALSE(p->has_error());
   EXPECT_EQ(d, ast::StructDecoration::kBlock);
 }
 
 TEST_F(ParserImplTest, StructDecorationDecl_MissingAttrRight) {
-  auto p = parser("[[block");
+  auto* p = parser("[[block");
   p->struct_decoration_decl();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:8: missing ]] for struct decoration");
 }
 
 TEST_F(ParserImplTest, StructDecorationDecl_InvalidDecoration) {
-  auto p = parser("[[invalid]]");
+  auto* p = parser("[[invalid]]");
   p->struct_decoration_decl();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:3: unknown struct decoration");
diff --git a/src/reader/wgsl/parser_impl_struct_decoration_test.cc b/src/reader/wgsl/parser_impl_struct_decoration_test.cc
index b87ecbe..518ac0b 100644
--- a/src/reader/wgsl/parser_impl_struct_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_decoration_test.cc
@@ -37,9 +37,9 @@
   StructDecorationTest() = default;
   ~StructDecorationTest() = default;
 
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   ParserImpl* parser(const std::string& str) {
     impl_ = std::make_unique<ParserImpl>(&ctx_, str);
@@ -53,7 +53,7 @@
 
 TEST_P(StructDecorationTest, Parses) {
   auto params = GetParam();
-  auto p = parser(params.input);
+  auto* p = parser(params.input);
 
   auto deco = p->struct_decoration();
   ASSERT_FALSE(p->has_error());
@@ -68,7 +68,7 @@
                              "block", ast::StructDecoration::kBlock}));
 
 TEST_F(ParserImplTest, StructDecoration_NoMatch) {
-  auto p = parser("not-a-stage");
+  auto* p = parser("not-a-stage");
   auto deco = p->struct_decoration();
   ASSERT_EQ(deco, ast::StructDecoration::kNone);
 
diff --git a/src/reader/wgsl/parser_impl_struct_member_decoration_decl_test.cc b/src/reader/wgsl/parser_impl_struct_member_decoration_decl_test.cc
index 2fec9d6..ea54e9c 100644
--- a/src/reader/wgsl/parser_impl_struct_member_decoration_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_member_decoration_decl_test.cc
@@ -23,43 +23,43 @@
 namespace {
 
 TEST_F(ParserImplTest, StructMemberDecorationDecl_EmptyStr) {
-  auto p = parser("");
+  auto* p = parser("");
   auto deco = p->struct_member_decoration_decl();
   ASSERT_FALSE(p->has_error());
-  EXPECT_EQ(deco.size(), 0);
+  EXPECT_EQ(deco.size(), 0u);
 }
 
 TEST_F(ParserImplTest, StructMemberDecorationDecl_EmptyBlock) {
-  auto p = parser("[[]]");
+  auto* p = parser("[[]]");
   auto deco = p->struct_member_decoration_decl();
   ASSERT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:3: empty struct member decoration found");
 }
 
 TEST_F(ParserImplTest, StructMemberDecorationDecl_Single) {
-  auto p = parser("[[offset 4]]");
+  auto* p = parser("[[offset 4]]");
   auto deco = p->struct_member_decoration_decl();
   ASSERT_FALSE(p->has_error());
-  ASSERT_EQ(deco.size(), 1);
+  ASSERT_EQ(deco.size(), 1u);
   EXPECT_TRUE(deco[0]->IsOffset());
 }
 
 TEST_F(ParserImplTest, StructMemberDecorationDecl_HandlesDuplicate) {
-  auto p = parser("[[offset 2, offset 4]]");
+  auto* p = parser("[[offset 2, offset 4]]");
   auto deco = p->struct_member_decoration_decl();
   ASSERT_TRUE(p->has_error()) << p->error();
   EXPECT_EQ(p->error(), "1:21: duplicate offset decoration found");
 }
 
 TEST_F(ParserImplTest, StructMemberDecorationDecl_InvalidDecoration) {
-  auto p = parser("[[offset nan]]");
+  auto* p = parser("[[offset nan]]");
   auto deco = p->struct_member_decoration_decl();
   ASSERT_TRUE(p->has_error()) << p->error();
   EXPECT_EQ(p->error(), "1:10: invalid value for offset decoration");
 }
 
 TEST_F(ParserImplTest, StructMemberDecorationDecl_MissingClose) {
-  auto p = parser("[[offset 4");
+  auto* p = parser("[[offset 4");
   auto deco = p->struct_member_decoration_decl();
   ASSERT_TRUE(p->has_error()) << p->error();
   EXPECT_EQ(p->error(), "1:11: missing ]] for struct member decoration");
diff --git a/src/reader/wgsl/parser_impl_struct_member_decoration_test.cc b/src/reader/wgsl/parser_impl_struct_member_decoration_test.cc
index 0bc2a92..7be4bce 100644
--- a/src/reader/wgsl/parser_impl_struct_member_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_member_decoration_test.cc
@@ -23,18 +23,18 @@
 namespace {
 
 TEST_F(ParserImplTest, StructMemberDecoration_Offset) {
-  auto p = parser("offset 4");
+  auto* p = parser("offset 4");
   auto deco = p->struct_member_decoration();
   ASSERT_NE(deco, nullptr);
   ASSERT_FALSE(p->has_error());
   ASSERT_TRUE(deco->IsOffset());
 
-  auto o = deco->AsOffset();
-  EXPECT_EQ(o->offset(), 4);
+  auto* o = deco->AsOffset();
+  EXPECT_EQ(o->offset(), 4u);
 }
 
 TEST_F(ParserImplTest, StructMemberDecoration_Offset_MissingValue) {
-  auto p = parser("offset");
+  auto* p = parser("offset");
   auto deco = p->struct_member_decoration();
   ASSERT_EQ(deco, nullptr);
   ASSERT_TRUE(p->has_error());
@@ -42,7 +42,7 @@
 }
 
 TEST_F(ParserImplTest, StructMemberDecoration_Offset_MissingInvalid) {
-  auto p = parser("offset nan");
+  auto* p = parser("offset nan");
   auto deco = p->struct_member_decoration();
   ASSERT_EQ(deco, nullptr);
   ASSERT_TRUE(p->has_error());
diff --git a/src/reader/wgsl/parser_impl_struct_member_test.cc b/src/reader/wgsl/parser_impl_struct_member_test.cc
index 3f630ef..49bc44c 100644
--- a/src/reader/wgsl/parser_impl_struct_member_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_member_test.cc
@@ -25,35 +25,35 @@
 namespace {
 
 TEST_F(ParserImplTest, StructMember_Parses) {
-  auto i32 = tm()->Get(std::make_unique<ast::type::I32Type>());
+  auto* i32 = tm()->Get(std::make_unique<ast::type::I32Type>());
 
-  auto p = parser("a : i32;");
+  auto* p = parser("a : i32;");
   auto m = p->struct_member();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(m, nullptr);
 
   EXPECT_EQ(m->name(), "a");
   EXPECT_EQ(m->type(), i32);
-  EXPECT_EQ(m->decorations().size(), 0);
+  EXPECT_EQ(m->decorations().size(), 0u);
 }
 
 TEST_F(ParserImplTest, StructMember_ParsesWithDecoration) {
-  auto i32 = tm()->Get(std::make_unique<ast::type::I32Type>());
+  auto* i32 = tm()->Get(std::make_unique<ast::type::I32Type>());
 
-  auto p = parser("[[offset 2]] a : i32;");
+  auto* p = parser("[[offset 2]] a : i32;");
   auto m = p->struct_member();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(m, nullptr);
 
   EXPECT_EQ(m->name(), "a");
   EXPECT_EQ(m->type(), i32);
-  EXPECT_EQ(m->decorations().size(), 1);
+  EXPECT_EQ(m->decorations().size(), 1u);
   EXPECT_TRUE(m->decorations()[0]->IsOffset());
-  EXPECT_EQ(m->decorations()[0]->AsOffset()->offset(), 2);
+  EXPECT_EQ(m->decorations()[0]->AsOffset()->offset(), 2u);
 }
 
 TEST_F(ParserImplTest, StructMember_InvalidDecoration) {
-  auto p = parser("[[offset nan]] a : i32;");
+  auto* p = parser("[[offset nan]] a : i32;");
   auto m = p->struct_member();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(m, nullptr);
@@ -61,7 +61,7 @@
 }
 
 TEST_F(ParserImplTest, StructMember_InvalidVariable) {
-  auto p = parser("[[offset 4]] a : B;");
+  auto* p = parser("[[offset 4]] a : B;");
   auto m = p->struct_member();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(m, nullptr);
@@ -69,7 +69,7 @@
 }
 
 TEST_F(ParserImplTest, StructMember_MissingSemicolon) {
-  auto p = parser("a : i32");
+  auto* p = parser("a : i32");
   auto m = p->struct_member();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(m, nullptr);
diff --git a/src/reader/wgsl/parser_impl_switch_body_test.cc b/src/reader/wgsl/parser_impl_switch_body_test.cc
index a6780ff..dc85463 100644
--- a/src/reader/wgsl/parser_impl_switch_body_test.cc
+++ b/src/reader/wgsl/parser_impl_switch_body_test.cc
@@ -23,18 +23,18 @@
 namespace {
 
 TEST_F(ParserImplTest, SwitchBody_Case) {
-  auto p = parser("case 1: { a = 4; }");
+  auto* p = parser("case 1: { a = 4; }");
   auto e = p->switch_body();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsCase());
   EXPECT_FALSE(e->IsDefault());
-  ASSERT_EQ(e->body().size(), 1);
+  ASSERT_EQ(e->body().size(), 1u);
   EXPECT_TRUE(e->body()[0]->IsAssign());
 }
 
 TEST_F(ParserImplTest, SwitchBody_Case_InvalidConstLiteral) {
-  auto p = parser("case a == 4: { a = 4; }");
+  auto* p = parser("case a == 4: { a = 4; }");
   auto e = p->switch_body();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -42,7 +42,7 @@
 }
 
 TEST_F(ParserImplTest, SwitchBody_Case_MissingConstLiteral) {
-  auto p = parser("case: { a = 4; }");
+  auto* p = parser("case: { a = 4; }");
   auto e = p->switch_body();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -50,7 +50,7 @@
 }
 
 TEST_F(ParserImplTest, SwitchBody_Case_MissingColon) {
-  auto p = parser("case 1 { a = 4; }");
+  auto* p = parser("case 1 { a = 4; }");
   auto e = p->switch_body();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -58,7 +58,7 @@
 }
 
 TEST_F(ParserImplTest, SwitchBody_Case_MissingBracketLeft) {
-  auto p = parser("case 1: a = 4; }");
+  auto* p = parser("case 1: a = 4; }");
   auto e = p->switch_body();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -66,7 +66,7 @@
 }
 
 TEST_F(ParserImplTest, SwitchBody_Case_MissingBracketRight) {
-  auto p = parser("case 1: { a = 4; ");
+  auto* p = parser("case 1: { a = 4; ");
   auto e = p->switch_body();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -74,7 +74,7 @@
 }
 
 TEST_F(ParserImplTest, SwitchBody_Case_InvalidCaseBody) {
-  auto p = parser("case 1: { fn main() -> void {} }");
+  auto* p = parser("case 1: { fn main() -> void {} }");
   auto e = p->switch_body();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -82,18 +82,18 @@
 }
 
 TEST_F(ParserImplTest, SwitchBody_Default) {
-  auto p = parser("default: { a = 4; }");
+  auto* p = parser("default: { a = 4; }");
   auto e = p->switch_body();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsCase());
   EXPECT_TRUE(e->IsDefault());
-  ASSERT_EQ(e->body().size(), 1);
+  ASSERT_EQ(e->body().size(), 1u);
   EXPECT_TRUE(e->body()[0]->IsAssign());
 }
 
 TEST_F(ParserImplTest, SwitchBody_Default_MissingColon) {
-  auto p = parser("default { a = 4; }");
+  auto* p = parser("default { a = 4; }");
   auto e = p->switch_body();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -101,7 +101,7 @@
 }
 
 TEST_F(ParserImplTest, SwitchBody_Default_MissingBracketLeft) {
-  auto p = parser("default: a = 4; }");
+  auto* p = parser("default: a = 4; }");
   auto e = p->switch_body();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -109,7 +109,7 @@
 }
 
 TEST_F(ParserImplTest, SwitchBody_Default_MissingBracketRight) {
-  auto p = parser("default: { a = 4; ");
+  auto* p = parser("default: { a = 4; ");
   auto e = p->switch_body();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -117,7 +117,7 @@
 }
 
 TEST_F(ParserImplTest, SwitchBody_Default_InvalidCaseBody) {
-  auto p = parser("default: { fn main() -> void {} }");
+  auto* p = parser("default: { fn main() -> void {} }");
   auto e = p->switch_body();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_switch_stmt_test.cc b/src/reader/wgsl/parser_impl_switch_stmt_test.cc
index f9d9710..d0c98de 100644
--- a/src/reader/wgsl/parser_impl_switch_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_switch_stmt_test.cc
@@ -24,7 +24,7 @@
 namespace {
 
 TEST_F(ParserImplTest, SwitchStmt_WithoutDefault) {
-  auto p = parser(R"(switch(a) {
+  auto* p = parser(R"(switch(a) {
   case 1: {}
   case 2: {}
 })");
@@ -32,22 +32,22 @@
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsSwitch());
-  ASSERT_EQ(e->body().size(), 2);
+  ASSERT_EQ(e->body().size(), 2u);
   EXPECT_FALSE(e->body()[0]->IsDefault());
   EXPECT_FALSE(e->body()[1]->IsDefault());
 }
 
 TEST_F(ParserImplTest, SwitchStmt_Empty) {
-  auto p = parser("switch(a) { }");
+  auto* p = parser("switch(a) { }");
   auto e = p->switch_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsSwitch());
-  ASSERT_EQ(e->body().size(), 0);
+  ASSERT_EQ(e->body().size(), 0u);
 }
 
 TEST_F(ParserImplTest, SwitchStmt_DefaultInMiddle) {
-  auto p = parser(R"(switch(a) {
+  auto* p = parser(R"(switch(a) {
   case 1: {}
   default: {}
   case 2: {}
@@ -57,14 +57,14 @@
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsSwitch());
 
-  ASSERT_EQ(e->body().size(), 3);
+  ASSERT_EQ(e->body().size(), 3u);
   ASSERT_FALSE(e->body()[0]->IsDefault());
   ASSERT_TRUE(e->body()[1]->IsDefault());
   ASSERT_FALSE(e->body()[2]->IsDefault());
 }
 
 TEST_F(ParserImplTest, SwitchStmt_InvalidExpression) {
-  auto p = parser("switch(a=b) {}");
+  auto* p = parser("switch(a=b) {}");
   auto e = p->switch_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -72,7 +72,7 @@
 }
 
 TEST_F(ParserImplTest, SwitchStmt_MissingExpression) {
-  auto p = parser("switch {}");
+  auto* p = parser("switch {}");
   auto e = p->switch_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -80,7 +80,7 @@
 }
 
 TEST_F(ParserImplTest, SwitchStmt_MissingBracketLeft) {
-  auto p = parser("switch(a) }");
+  auto* p = parser("switch(a) }");
   auto e = p->switch_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -88,7 +88,7 @@
 }
 
 TEST_F(ParserImplTest, SwitchStmt_MissingBracketRight) {
-  auto p = parser("switch(a) {");
+  auto* p = parser("switch(a) {");
   auto e = p->switch_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -96,7 +96,7 @@
 }
 
 TEST_F(ParserImplTest, SwitchStmt_InvalidBody) {
-  auto p = parser(R"(switch(a) {
+  auto* p = parser(R"(switch(a) {
   case: {}
 })");
   auto e = p->switch_stmt();
diff --git a/src/reader/wgsl/parser_impl_test.cc b/src/reader/wgsl/parser_impl_test.cc
index 890be8c..022e09d 100644
--- a/src/reader/wgsl/parser_impl_test.cc
+++ b/src/reader/wgsl/parser_impl_test.cc
@@ -24,12 +24,12 @@
 namespace {
 
 TEST_F(ParserImplTest, Empty) {
-  auto p = parser("");
+  auto* p = parser("");
   ASSERT_TRUE(p->Parse()) << p->error();
 }
 
 TEST_F(ParserImplTest, Parses) {
-  auto p = parser(R"(
+  auto* p = parser(R"(
 import "GLSL.std.430" as glsl;
 
 [[location 0]] var<out> gl_FragColor : vec4<f32>;
@@ -42,14 +42,14 @@
   ASSERT_TRUE(p->Parse()) << p->error();
 
   auto m = p->module();
-  ASSERT_EQ(1, m.imports().size());
-  ASSERT_EQ(1, m.entry_points().size());
-  ASSERT_EQ(1, m.functions().size());
-  ASSERT_EQ(1, m.global_variables().size());
+  ASSERT_EQ(1u, m.imports().size());
+  ASSERT_EQ(1u, m.entry_points().size());
+  ASSERT_EQ(1u, m.functions().size());
+  ASSERT_EQ(1u, m.global_variables().size());
 }
 
 TEST_F(ParserImplTest, HandlesError) {
-  auto p = parser(R"(
+  auto* p = parser(R"(
 import "GLSL.std.430" as glsl;
 
 fn main() ->  {  # missing return type
@@ -62,18 +62,18 @@
 }
 
 TEST_F(ParserImplTest, GetRegisteredType) {
-  auto p = parser("");
+  auto* p = parser("");
   ast::type::I32Type i32;
   p->register_alias("my_alias", &i32);
 
-  auto alias = p->get_alias("my_alias");
+  auto* alias = p->get_alias("my_alias");
   ASSERT_NE(alias, nullptr);
   ASSERT_EQ(alias, &i32);
 }
 
 TEST_F(ParserImplTest, GetUnregisteredType) {
-  auto p = parser("");
-  auto alias = p->get_alias("my_alias");
+  auto* p = parser("");
+  auto* alias = p->get_alias("my_alias");
   ASSERT_EQ(alias, nullptr);
 }
 
diff --git a/src/reader/wgsl/parser_impl_test_helper.cc b/src/reader/wgsl/parser_impl_test_helper.cc
new file mode 100644
index 0000000..d3746cf
--- /dev/null
+++ b/src/reader/wgsl/parser_impl_test_helper.cc
@@ -0,0 +1,34 @@
+// 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/reader/wgsl/parser_impl_test_helper.h"
+
+namespace tint {
+namespace reader {
+namespace wgsl {
+
+ParserImplTest::ParserImplTest() = default;
+
+ParserImplTest::~ParserImplTest() = default;
+
+void ParserImplTest::SetUp() {
+  ctx_.Reset();
+}
+
+void ParserImplTest::TearDown() {
+  impl_ = nullptr;
+}
+
+}  // namespace wgsl
+}  // namespace reader
+}  // namespace tint
diff --git a/src/reader/wgsl/parser_impl_test_helper.h b/src/reader/wgsl/parser_impl_test_helper.h
index fd177e9..bdb1a29 100644
--- a/src/reader/wgsl/parser_impl_test_helper.h
+++ b/src/reader/wgsl/parser_impl_test_helper.h
@@ -30,14 +30,14 @@
 class ParserImplTest : public testing::Test {
  public:
   /// Constructor
-  ParserImplTest() = default;
-  ~ParserImplTest() = default;
+  ParserImplTest();
+  ~ParserImplTest() override;
 
   /// Sets up the test helper
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override;
 
   /// Tears down the test helper
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override;
 
   /// Retrieves the parser from the helper
   /// @param str the string to parse
diff --git a/src/reader/wgsl/parser_impl_type_alias_test.cc b/src/reader/wgsl/parser_impl_type_alias_test.cc
index e0dbacd..fde357e 100644
--- a/src/reader/wgsl/parser_impl_type_alias_test.cc
+++ b/src/reader/wgsl/parser_impl_type_alias_test.cc
@@ -26,10 +26,10 @@
 namespace {
 
 TEST_F(ParserImplTest, TypeDecl_ParsesType) {
-  auto i32 = tm()->Get(std::make_unique<ast::type::I32Type>());
+  auto* i32 = tm()->Get(std::make_unique<ast::type::I32Type>());
 
-  auto p = parser("type a = i32");
-  auto t = p->type_alias();
+  auto* p = parser("type a = i32");
+  auto* t = p->type_alias();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(t, nullptr);
   ASSERT_TRUE(t->type()->IsI32());
@@ -37,52 +37,52 @@
 }
 
 TEST_F(ParserImplTest, TypeDecl_ParsesStruct) {
-  auto p = parser("type a = struct { b: i32; c: f32;}");
-  auto t = p->type_alias();
+  auto* p = parser("type a = struct { b: i32; c: f32;}");
+  auto* t = p->type_alias();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(t, nullptr);
   EXPECT_EQ(t->name(), "a");
   ASSERT_TRUE(t->type()->IsStruct());
 
-  auto s = t->type()->AsStruct();
-  EXPECT_EQ(s->impl()->members().size(), 2);
+  auto* s = t->type()->AsStruct();
+  EXPECT_EQ(s->impl()->members().size(), 2u);
 }
 
 TEST_F(ParserImplTest, TypeDecl_MissingIdent) {
-  auto p = parser("type = i32");
-  auto t = p->type_alias();
+  auto* p = parser("type = i32");
+  auto* t = p->type_alias();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(t, nullptr);
   EXPECT_EQ(p->error(), "1:6: missing identifier for type alias");
 }
 
 TEST_F(ParserImplTest, TypeDecl_InvalidIdent) {
-  auto p = parser("type 123 = i32");
-  auto t = p->type_alias();
+  auto* p = parser("type 123 = i32");
+  auto* t = p->type_alias();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(t, nullptr);
   EXPECT_EQ(p->error(), "1:6: missing identifier for type alias");
 }
 
 TEST_F(ParserImplTest, TypeDecl_MissingEqual) {
-  auto p = parser("type a i32");
-  auto t = p->type_alias();
+  auto* p = parser("type a i32");
+  auto* t = p->type_alias();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(t, nullptr);
   EXPECT_EQ(p->error(), "1:8: missing = for type alias");
 }
 
 TEST_F(ParserImplTest, TypeDecl_InvalidType) {
-  auto p = parser("type a = B");
-  auto t = p->type_alias();
+  auto* p = parser("type a = B");
+  auto* t = p->type_alias();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(t, nullptr);
   EXPECT_EQ(p->error(), "1:10: unknown type alias 'B'");
 }
 
 TEST_F(ParserImplTest, TypeDecl_InvalidStruct) {
-  auto p = parser("type a = [[block]] {}");
-  auto t = p->type_alias();
+  auto* p = parser("type a = [[block]] {}");
+  auto* t = p->type_alias();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(t, nullptr);
   EXPECT_EQ(p->error(), "1:20: missing struct declaration");
diff --git a/src/reader/wgsl/parser_impl_type_decl_test.cc b/src/reader/wgsl/parser_impl_type_decl_test.cc
index d8119ef..8399b2b 100644
--- a/src/reader/wgsl/parser_impl_type_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_type_decl_test.cc
@@ -33,80 +33,80 @@
 namespace {
 
 TEST_F(ParserImplTest, TypeDecl_Invalid) {
-  auto p = parser("1234");
-  auto t = p->type_decl();
+  auto* p = parser("1234");
+  auto* t = p->type_decl();
   EXPECT_EQ(t, nullptr);
   EXPECT_FALSE(p->has_error());
 }
 
 TEST_F(ParserImplTest, TypeDecl_Identifier) {
-  auto p = parser("A");
+  auto* p = parser("A");
 
-  auto int_type = tm()->Get(std::make_unique<ast::type::I32Type>());
+  auto* int_type = tm()->Get(std::make_unique<ast::type::I32Type>());
   // Pre-register to make sure that it's the same type.
-  auto alias_type =
+  auto* alias_type =
       tm()->Get(std::make_unique<ast::type::AliasType>("A", int_type));
 
   p->register_alias("A", alias_type);
 
-  auto t = p->type_decl();
+  auto* t = p->type_decl();
   ASSERT_NE(t, nullptr);
   EXPECT_EQ(t, alias_type);
   ASSERT_TRUE(t->IsAlias());
 
-  auto alias = t->AsAlias();
+  auto* alias = t->AsAlias();
   EXPECT_EQ(alias->name(), "A");
   EXPECT_EQ(alias->type(), int_type);
 }
 
 TEST_F(ParserImplTest, TypeDecl_Identifier_NotFound) {
-  auto p = parser("B");
+  auto* p = parser("B");
 
-  auto t = p->type_decl();
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   EXPECT_TRUE(p->has_error());
   EXPECT_EQ(p->error(), "1:1: unknown type alias 'B'");
 }
 
 TEST_F(ParserImplTest, TypeDecl_Bool) {
-  auto p = parser("bool");
+  auto* p = parser("bool");
 
-  auto bool_type = tm()->Get(std::make_unique<ast::type::BoolType>());
+  auto* bool_type = tm()->Get(std::make_unique<ast::type::BoolType>());
 
-  auto t = p->type_decl();
+  auto* t = p->type_decl();
   ASSERT_NE(t, nullptr);
   EXPECT_EQ(t, bool_type);
   ASSERT_TRUE(t->IsBool());
 }
 
 TEST_F(ParserImplTest, TypeDecl_F32) {
-  auto p = parser("f32");
+  auto* p = parser("f32");
 
-  auto float_type = tm()->Get(std::make_unique<ast::type::F32Type>());
+  auto* float_type = tm()->Get(std::make_unique<ast::type::F32Type>());
 
-  auto t = p->type_decl();
+  auto* t = p->type_decl();
   ASSERT_NE(t, nullptr);
   EXPECT_EQ(t, float_type);
   ASSERT_TRUE(t->IsF32());
 }
 
 TEST_F(ParserImplTest, TypeDecl_I32) {
-  auto p = parser("i32");
+  auto* p = parser("i32");
 
-  auto int_type = tm()->Get(std::make_unique<ast::type::I32Type>());
+  auto* int_type = tm()->Get(std::make_unique<ast::type::I32Type>());
 
-  auto t = p->type_decl();
+  auto* t = p->type_decl();
   ASSERT_NE(t, nullptr);
   EXPECT_EQ(t, int_type);
   ASSERT_TRUE(t->IsI32());
 }
 
 TEST_F(ParserImplTest, TypeDecl_U32) {
-  auto p = parser("u32");
+  auto* p = parser("u32");
 
-  auto uint_type = tm()->Get(std::make_unique<ast::type::U32Type>());
+  auto* uint_type = tm()->Get(std::make_unique<ast::type::U32Type>());
 
-  auto t = p->type_decl();
+  auto* t = p->type_decl();
   ASSERT_NE(t, nullptr);
   EXPECT_EQ(t, uint_type);
   ASSERT_TRUE(t->IsU32());
@@ -125,9 +125,9 @@
   VecTest() = default;
   ~VecTest() = default;
 
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   ParserImpl* parser(const std::string& str) {
     impl_ = std::make_unique<ParserImpl>(&ctx_, str);
@@ -141,8 +141,8 @@
 
 TEST_P(VecTest, Parse) {
   auto params = GetParam();
-  auto p = parser(params.input);
-  auto t = p->type_decl();
+  auto* p = parser(params.input);
+  auto* t = p->type_decl();
   ASSERT_NE(t, nullptr);
   ASSERT_FALSE(p->has_error());
   EXPECT_TRUE(t->IsVector());
@@ -159,9 +159,9 @@
   VecMissingGreaterThanTest() = default;
   ~VecMissingGreaterThanTest() = default;
 
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   ParserImpl* parser(const std::string& str) {
     impl_ = std::make_unique<ParserImpl>(&ctx_, str);
@@ -175,8 +175,8 @@
 
 TEST_P(VecMissingGreaterThanTest, Handles_Missing_GreaterThan) {
   auto params = GetParam();
-  auto p = parser(params.input);
-  auto t = p->type_decl();
+  auto* p = parser(params.input);
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:9: missing > for vector");
@@ -192,9 +192,9 @@
   VecMissingLessThanTest() = default;
   ~VecMissingLessThanTest() = default;
 
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   ParserImpl* parser(const std::string& str) {
     impl_ = std::make_unique<ParserImpl>(&ctx_, str);
@@ -208,8 +208,8 @@
 
 TEST_P(VecMissingLessThanTest, Handles_Missing_GreaterThan) {
   auto params = GetParam();
-  auto p = parser(params.input);
-  auto t = p->type_decl();
+  auto* p = parser(params.input);
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:5: missing < for vector");
@@ -225,9 +225,9 @@
   VecBadType() = default;
   ~VecBadType() = default;
 
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   ParserImpl* parser(const std::string& str) {
     impl_ = std::make_unique<ParserImpl>(&ctx_, str);
@@ -241,8 +241,8 @@
 
 TEST_P(VecBadType, Handles_Unknown_Type) {
   auto params = GetParam();
-  auto p = parser(params.input);
-  auto t = p->type_decl();
+  auto* p = parser(params.input);
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:6: unknown type alias 'unknown'");
@@ -258,9 +258,9 @@
   VecMissingType() = default;
   ~VecMissingType() = default;
 
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   ParserImpl* parser(const std::string& str) {
     impl_ = std::make_unique<ParserImpl>(&ctx_, str);
@@ -274,8 +274,8 @@
 
 TEST_P(VecMissingType, Handles_Missing_Type) {
   auto params = GetParam();
-  auto p = parser(params.input);
-  auto t = p->type_decl();
+  auto* p = parser(params.input);
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:6: unable to determine subtype for vector");
@@ -287,173 +287,173 @@
                                          VecData{"vec4<>", 4}));
 
 TEST_F(ParserImplTest, TypeDecl_Ptr) {
-  auto p = parser("ptr<function, f32>");
-  auto t = p->type_decl();
+  auto* p = parser("ptr<function, f32>");
+  auto* t = p->type_decl();
   ASSERT_NE(t, nullptr) << p->error();
   ASSERT_FALSE(p->has_error());
   ASSERT_TRUE(t->IsPointer());
 
-  auto ptr = t->AsPointer();
+  auto* ptr = t->AsPointer();
   ASSERT_TRUE(ptr->type()->IsF32());
   ASSERT_EQ(ptr->storage_class(), ast::StorageClass::kFunction);
 }
 
 TEST_F(ParserImplTest, TypeDecl_Ptr_ToVec) {
-  auto p = parser("ptr<function, vec2<f32>>");
-  auto t = p->type_decl();
+  auto* p = parser("ptr<function, vec2<f32>>");
+  auto* t = p->type_decl();
   ASSERT_NE(t, nullptr) << p->error();
   ASSERT_FALSE(p->has_error());
   ASSERT_TRUE(t->IsPointer());
 
-  auto ptr = t->AsPointer();
+  auto* ptr = t->AsPointer();
   ASSERT_TRUE(ptr->type()->IsVector());
   ASSERT_EQ(ptr->storage_class(), ast::StorageClass::kFunction);
 
-  auto vec = ptr->type()->AsVector();
-  ASSERT_EQ(vec->size(), 2);
+  auto* vec = ptr->type()->AsVector();
+  ASSERT_EQ(vec->size(), 2u);
   ASSERT_TRUE(vec->type()->IsF32());
 }
 
 TEST_F(ParserImplTest, TypeDecl_Ptr_MissingLessThan) {
-  auto p = parser("ptr private, f32>");
-  auto t = p->type_decl();
+  auto* p = parser("ptr private, f32>");
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:5: missing < for ptr declaration");
 }
 
 TEST_F(ParserImplTest, TypeDecl_Ptr_MissingGreaterThan) {
-  auto p = parser("ptr<function, f32");
-  auto t = p->type_decl();
+  auto* p = parser("ptr<function, f32");
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:18: missing > for ptr declaration");
 }
 
 TEST_F(ParserImplTest, TypeDecl_Ptr_MissingComma) {
-  auto p = parser("ptr<function f32>");
-  auto t = p->type_decl();
+  auto* p = parser("ptr<function f32>");
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:14: missing , for ptr declaration");
 }
 
 TEST_F(ParserImplTest, TypeDecl_Ptr_MissingStorageClass) {
-  auto p = parser("ptr<, f32>");
-  auto t = p->type_decl();
+  auto* p = parser("ptr<, f32>");
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:5: missing storage class for ptr declaration");
 }
 
 TEST_F(ParserImplTest, TypeDecl_Ptr_MissingParams) {
-  auto p = parser("ptr<>");
-  auto t = p->type_decl();
+  auto* p = parser("ptr<>");
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:5: missing storage class for ptr declaration");
 }
 
 TEST_F(ParserImplTest, TypeDecl_Ptr_MissingType) {
-  auto p = parser("ptr<function,>");
-  auto t = p->type_decl();
+  auto* p = parser("ptr<function,>");
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:14: missing type for ptr declaration");
 }
 
 TEST_F(ParserImplTest, TypeDecl_Ptr_BadStorageClass) {
-  auto p = parser("ptr<unknown, f32>");
-  auto t = p->type_decl();
+  auto* p = parser("ptr<unknown, f32>");
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:5: missing storage class for ptr declaration");
 }
 
 TEST_F(ParserImplTest, TypeDecl_Ptr_BadType) {
-  auto p = parser("ptr<function, unknown>");
-  auto t = p->type_decl();
+  auto* p = parser("ptr<function, unknown>");
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:15: unknown type alias 'unknown'");
 }
 
 TEST_F(ParserImplTest, TypeDecl_Array) {
-  auto p = parser("array<f32, 5>");
-  auto t = p->type_decl();
+  auto* p = parser("array<f32, 5>");
+  auto* t = p->type_decl();
   ASSERT_NE(t, nullptr);
   ASSERT_FALSE(p->has_error());
   ASSERT_TRUE(t->IsArray());
 
-  auto a = t->AsArray();
+  auto* a = t->AsArray();
   ASSERT_FALSE(a->IsRuntimeArray());
-  ASSERT_EQ(a->size(), 5);
+  ASSERT_EQ(a->size(), 5u);
   ASSERT_TRUE(a->type()->IsF32());
 }
 
 TEST_F(ParserImplTest, TypeDecl_Array_Runtime) {
-  auto p = parser("array<u32>");
-  auto t = p->type_decl();
+  auto* p = parser("array<u32>");
+  auto* t = p->type_decl();
   ASSERT_NE(t, nullptr);
   ASSERT_FALSE(p->has_error());
   ASSERT_TRUE(t->IsArray());
 
-  auto a = t->AsArray();
+  auto* a = t->AsArray();
   ASSERT_TRUE(a->IsRuntimeArray());
   ASSERT_TRUE(a->type()->IsU32());
 }
 
 TEST_F(ParserImplTest, TypeDecl_Array_BadType) {
-  auto p = parser("array<unknown, 3>");
-  auto t = p->type_decl();
+  auto* p = parser("array<unknown, 3>");
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:7: unknown type alias 'unknown'");
 }
 
 TEST_F(ParserImplTest, TypeDecl_Array_ZeroSize) {
-  auto p = parser("array<f32, 0>");
-  auto t = p->type_decl();
+  auto* p = parser("array<f32, 0>");
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:12: invalid size for array declaration");
 }
 
 TEST_F(ParserImplTest, TypeDecl_Array_NegativeSize) {
-  auto p = parser("array<f32, -1>");
-  auto t = p->type_decl();
+  auto* p = parser("array<f32, -1>");
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:12: invalid size for array declaration");
 }
 
 TEST_F(ParserImplTest, TypeDecl_Array_BadSize) {
-  auto p = parser("array<f32, invalid>");
-  auto t = p->type_decl();
+  auto* p = parser("array<f32, invalid>");
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:12: missing size of array declaration");
 }
 
 TEST_F(ParserImplTest, TypeDecl_Array_MissingLessThan) {
-  auto p = parser("array f32>");
-  auto t = p->type_decl();
+  auto* p = parser("array f32>");
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:7: missing < for array declaration");
 }
 
 TEST_F(ParserImplTest, TypeDecl_Array_MissingGreaterThan) {
-  auto p = parser("array<f32");
-  auto t = p->type_decl();
+  auto* p = parser("array<f32");
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:10: missing > for array declaration");
 }
 
 TEST_F(ParserImplTest, TypeDecl_Array_MissingComma) {
-  auto p = parser("array<f32 3>");
-  auto t = p->type_decl();
+  auto* p = parser("array<f32 3>");
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:11: missing > for array declaration");
@@ -473,9 +473,9 @@
   MatrixTest() = default;
   ~MatrixTest() = default;
 
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   ParserImpl* parser(const std::string& str) {
     impl_ = std::make_unique<ParserImpl>(&ctx_, str);
@@ -489,12 +489,12 @@
 
 TEST_P(MatrixTest, Parse) {
   auto params = GetParam();
-  auto p = parser(params.input);
-  auto t = p->type_decl();
+  auto* p = parser(params.input);
+  auto* t = p->type_decl();
   ASSERT_NE(t, nullptr);
   ASSERT_FALSE(p->has_error());
   EXPECT_TRUE(t->IsMatrix());
-  auto mat = t->AsMatrix();
+  auto* mat = t->AsMatrix();
   EXPECT_EQ(mat->rows(), params.rows);
   EXPECT_EQ(mat->columns(), params.columns);
 }
@@ -515,9 +515,9 @@
   MatrixMissingGreaterThanTest() = default;
   ~MatrixMissingGreaterThanTest() = default;
 
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   ParserImpl* parser(const std::string& str) {
     impl_ = std::make_unique<ParserImpl>(&ctx_, str);
@@ -530,8 +530,8 @@
 };
 TEST_P(MatrixMissingGreaterThanTest, Handles_Missing_GreaterThan) {
   auto params = GetParam();
-  auto p = parser(params.input);
-  auto t = p->type_decl();
+  auto* p = parser(params.input);
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:11: missing > for matrix");
@@ -553,9 +553,9 @@
   MatrixMissingLessThanTest() = default;
   ~MatrixMissingLessThanTest() = default;
 
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   ParserImpl* parser(const std::string& str) {
     impl_ = std::make_unique<ParserImpl>(&ctx_, str);
@@ -568,8 +568,8 @@
 };
 TEST_P(MatrixMissingLessThanTest, Handles_Missing_GreaterThan) {
   auto params = GetParam();
-  auto p = parser(params.input);
-  auto t = p->type_decl();
+  auto* p = parser(params.input);
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:8: missing < for matrix");
@@ -591,9 +591,9 @@
   MatrixBadType() = default;
   ~MatrixBadType() = default;
 
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   ParserImpl* parser(const std::string& str) {
     impl_ = std::make_unique<ParserImpl>(&ctx_, str);
@@ -606,8 +606,8 @@
 };
 TEST_P(MatrixBadType, Handles_Unknown_Type) {
   auto params = GetParam();
-  auto p = parser(params.input);
-  auto t = p->type_decl();
+  auto* p = parser(params.input);
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:8: unknown type alias 'unknown'");
@@ -629,9 +629,9 @@
   MatrixMissingType() = default;
   ~MatrixMissingType() = default;
 
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   ParserImpl* parser(const std::string& str) {
     impl_ = std::make_unique<ParserImpl>(&ctx_, str);
@@ -644,8 +644,8 @@
 };
 TEST_P(MatrixMissingType, Handles_Missing_Type) {
   auto params = GetParam();
-  auto p = parser(params.input);
-  auto t = p->type_decl();
+  auto* p = parser(params.input);
+  auto* t = p->type_decl();
   ASSERT_EQ(t, nullptr);
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:8: unable to determine subtype for matrix");
diff --git a/src/reader/wgsl/parser_impl_unary_expression_test.cc b/src/reader/wgsl/parser_impl_unary_expression_test.cc
index 090c9af..5d1b578 100644
--- a/src/reader/wgsl/parser_impl_unary_expression_test.cc
+++ b/src/reader/wgsl/parser_impl_unary_expression_test.cc
@@ -29,45 +29,45 @@
 namespace {
 
 TEST_F(ParserImplTest, UnaryExpression_Postix) {
-  auto p = parser("a[2]");
+  auto* p = parser("a[2]");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
 
   ASSERT_TRUE(e->IsArrayAccessor());
-  auto ary = e->AsArrayAccessor();
+  auto* ary = e->AsArrayAccessor();
   ASSERT_TRUE(ary->array()->IsIdentifier());
-  auto ident = ary->array()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = ary->array()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(ary->idx_expr()->IsConstructor());
   ASSERT_TRUE(ary->idx_expr()->AsConstructor()->IsScalarConstructor());
-  auto init = ary->idx_expr()->AsConstructor()->AsScalarConstructor();
+  auto* init = ary->idx_expr()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsInt());
   ASSERT_EQ(init->literal()->AsInt()->value(), 2);
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Minus) {
-  auto p = parser("- 1");
+  auto* p = parser("- 1");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnaryOp());
 
-  auto u = e->AsUnaryOp();
+  auto* u = e->AsUnaryOp();
   ASSERT_EQ(u->op(), ast::UnaryOp::kNegation);
 
   ASSERT_TRUE(u->expr()->IsConstructor());
   ASSERT_TRUE(u->expr()->AsConstructor()->IsScalarConstructor());
 
-  auto init = u->expr()->AsConstructor()->AsScalarConstructor();
+  auto* init = u->expr()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsInt());
   EXPECT_EQ(init->literal()->AsInt()->value(), 1);
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Minus_InvalidRHS) {
-  auto p = parser("-if(a) {}");
+  auto* p = parser("-if(a) {}");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -75,25 +75,25 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Bang) {
-  auto p = parser("!1");
+  auto* p = parser("!1");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnaryOp());
 
-  auto u = e->AsUnaryOp();
+  auto* u = e->AsUnaryOp();
   ASSERT_EQ(u->op(), ast::UnaryOp::kNot);
 
   ASSERT_TRUE(u->expr()->IsConstructor());
   ASSERT_TRUE(u->expr()->AsConstructor()->IsScalarConstructor());
 
-  auto init = u->expr()->AsConstructor()->AsScalarConstructor();
+  auto* init = u->expr()->AsConstructor()->AsScalarConstructor();
   ASSERT_TRUE(init->literal()->IsInt());
   EXPECT_EQ(init->literal()->AsInt()->value(), 1);
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Bang_InvalidRHS) {
-  auto p = parser("!if (a) {}");
+  auto* p = parser("!if (a) {}");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -101,23 +101,23 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Any) {
-  auto p = parser("any(a)");
+  auto* p = parser("any(a)");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnaryMethod());
 
-  auto u = e->AsUnaryMethod();
+  auto* u = e->AsUnaryMethod();
   ASSERT_EQ(u->op(), ast::UnaryMethod::kAny);
-  ASSERT_EQ(u->params().size(), 1);
+  ASSERT_EQ(u->params().size(), 1u);
   ASSERT_TRUE(u->params()[0]->IsIdentifier());
-  auto ident = u->params()[0]->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = u->params()[0]->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Any_MissingParenLeft) {
-  auto p = parser("any a)");
+  auto* p = parser("any a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -125,7 +125,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Any_MissingParenRight) {
-  auto p = parser("any(a");
+  auto* p = parser("any(a");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -133,7 +133,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Any_MissingIdentifier) {
-  auto p = parser("any()");
+  auto* p = parser("any()");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -141,7 +141,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Any_InvalidIdentifier) {
-  auto p = parser("any(123)");
+  auto* p = parser("any(123)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -149,23 +149,23 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_All) {
-  auto p = parser("all(a)");
+  auto* p = parser("all(a)");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnaryMethod());
 
-  auto u = e->AsUnaryMethod();
+  auto* u = e->AsUnaryMethod();
   ASSERT_EQ(u->op(), ast::UnaryMethod::kAll);
-  ASSERT_EQ(u->params().size(), 1);
+  ASSERT_EQ(u->params().size(), 1u);
   ASSERT_TRUE(u->params()[0]->IsIdentifier());
-  auto ident = u->params()[0]->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = u->params()[0]->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 }
 
 TEST_F(ParserImplTest, UnaryExpression_All_MissingParenLeft) {
-  auto p = parser("all a)");
+  auto* p = parser("all a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -173,7 +173,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_All_MissingParenRight) {
-  auto p = parser("all(a");
+  auto* p = parser("all(a");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -181,7 +181,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_All_MissingIdentifier) {
-  auto p = parser("all()");
+  auto* p = parser("all()");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -189,7 +189,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_All_InvalidIdentifier) {
-  auto p = parser("all(123)");
+  auto* p = parser("all(123)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -197,23 +197,23 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsNan) {
-  auto p = parser("is_nan(a)");
+  auto* p = parser("is_nan(a)");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnaryMethod());
 
-  auto u = e->AsUnaryMethod();
+  auto* u = e->AsUnaryMethod();
   ASSERT_EQ(u->op(), ast::UnaryMethod::kIsNan);
-  ASSERT_EQ(u->params().size(), 1);
+  ASSERT_EQ(u->params().size(), 1u);
   ASSERT_TRUE(u->params()[0]->IsIdentifier());
-  auto ident = u->params()[0]->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = u->params()[0]->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsNan_MissingParenLeft) {
-  auto p = parser("is_nan a)");
+  auto* p = parser("is_nan a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -221,7 +221,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsNan_MissingParenRight) {
-  auto p = parser("is_nan(a");
+  auto* p = parser("is_nan(a");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -229,7 +229,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsNan_MissingIdentifier) {
-  auto p = parser("is_nan()");
+  auto* p = parser("is_nan()");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -237,7 +237,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsNan_InvalidIdentifier) {
-  auto p = parser("is_nan(123)");
+  auto* p = parser("is_nan(123)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -245,23 +245,23 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsInf) {
-  auto p = parser("is_inf(a)");
+  auto* p = parser("is_inf(a)");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnaryMethod());
 
-  auto u = e->AsUnaryMethod();
+  auto* u = e->AsUnaryMethod();
   ASSERT_EQ(u->op(), ast::UnaryMethod::kIsInf);
-  ASSERT_EQ(u->params().size(), 1);
+  ASSERT_EQ(u->params().size(), 1u);
   ASSERT_TRUE(u->params()[0]->IsIdentifier());
-  auto ident = u->params()[0]->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = u->params()[0]->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsInf_MissingParenLeft) {
-  auto p = parser("is_inf a)");
+  auto* p = parser("is_inf a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -269,7 +269,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsInf_MissingParenRight) {
-  auto p = parser("is_inf(a");
+  auto* p = parser("is_inf(a");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -277,7 +277,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsInf_MissingIdentifier) {
-  auto p = parser("is_inf()");
+  auto* p = parser("is_inf()");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -285,7 +285,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsInf_InvalidIdentifier) {
-  auto p = parser("is_inf(123)");
+  auto* p = parser("is_inf(123)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -293,23 +293,23 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsFinite) {
-  auto p = parser("is_finite(a)");
+  auto* p = parser("is_finite(a)");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnaryMethod());
 
-  auto u = e->AsUnaryMethod();
+  auto* u = e->AsUnaryMethod();
   ASSERT_EQ(u->op(), ast::UnaryMethod::kIsFinite);
-  ASSERT_EQ(u->params().size(), 1);
+  ASSERT_EQ(u->params().size(), 1u);
   ASSERT_TRUE(u->params()[0]->IsIdentifier());
-  auto ident = u->params()[0]->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = u->params()[0]->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsFinite_MissingParenLeft) {
-  auto p = parser("is_finite a)");
+  auto* p = parser("is_finite a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -317,7 +317,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsFinite_MissingParenRight) {
-  auto p = parser("is_finite(a");
+  auto* p = parser("is_finite(a");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -325,7 +325,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsFinite_MissingIdentifier) {
-  auto p = parser("is_finite()");
+  auto* p = parser("is_finite()");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -333,7 +333,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsFinite_InvalidIdentifier) {
-  auto p = parser("is_finite(123)");
+  auto* p = parser("is_finite(123)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -341,23 +341,23 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsNormal) {
-  auto p = parser("is_normal(a)");
+  auto* p = parser("is_normal(a)");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnaryMethod());
 
-  auto u = e->AsUnaryMethod();
+  auto* u = e->AsUnaryMethod();
   ASSERT_EQ(u->op(), ast::UnaryMethod::kIsNormal);
-  ASSERT_EQ(u->params().size(), 1);
+  ASSERT_EQ(u->params().size(), 1u);
   ASSERT_TRUE(u->params()[0]->IsIdentifier());
-  auto ident = u->params()[0]->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = u->params()[0]->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsNormal_MissingParenLeft) {
-  auto p = parser("is_normal a)");
+  auto* p = parser("is_normal a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -365,7 +365,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsNormal_MissingParenRight) {
-  auto p = parser("is_normal(a");
+  auto* p = parser("is_normal(a");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -373,7 +373,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsNormal_MissingIdentifier) {
-  auto p = parser("is_normal()");
+  auto* p = parser("is_normal()");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -381,7 +381,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_IsNormal_InvalidIdentifier) {
-  auto p = parser("is_normal(123)");
+  auto* p = parser("is_normal(123)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -389,28 +389,28 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dot) {
-  auto p = parser("dot(a, b)");
+  auto* p = parser("dot(a, b)");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnaryMethod());
 
-  auto u = e->AsUnaryMethod();
+  auto* u = e->AsUnaryMethod();
   ASSERT_EQ(u->op(), ast::UnaryMethod::kDot);
-  ASSERT_EQ(u->params().size(), 2);
+  ASSERT_EQ(u->params().size(), 2u);
   ASSERT_TRUE(u->params()[0]->IsIdentifier());
-  auto ident = u->params()[0]->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = u->params()[0]->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(u->params()[1]->IsIdentifier());
   ident = u->params()[1]->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "b");
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dot_MissingParenLeft) {
-  auto p = parser("dot a, b)");
+  auto* p = parser("dot a, b)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -418,7 +418,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dot_MissingParenRight) {
-  auto p = parser("dot(a, b");
+  auto* p = parser("dot(a, b");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -426,7 +426,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dot_MissingFirstIdentifier) {
-  auto p = parser("dot(, a)");
+  auto* p = parser("dot(, a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -434,7 +434,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dot_MissingSecondIdentifier) {
-  auto p = parser("dot(a, )");
+  auto* p = parser("dot(a, )");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -442,7 +442,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dot_MissingComma) {
-  auto p = parser("dot(a b)");
+  auto* p = parser("dot(a b)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -450,7 +450,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dot_InvalidFirstIdentifier) {
-  auto p = parser("dot(123, b)");
+  auto* p = parser("dot(123, b)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -458,7 +458,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dot_InvalidSecondIdentifier) {
-  auto p = parser("dot(a, 123)");
+  auto* p = parser("dot(a, 123)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -466,28 +466,28 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_OuterProduct) {
-  auto p = parser("outer_product(a, b)");
+  auto* p = parser("outer_product(a, b)");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnaryMethod());
 
-  auto u = e->AsUnaryMethod();
+  auto* u = e->AsUnaryMethod();
   ASSERT_EQ(u->op(), ast::UnaryMethod::kOuterProduct);
-  ASSERT_EQ(u->params().size(), 2);
+  ASSERT_EQ(u->params().size(), 2u);
   ASSERT_TRUE(u->params()[0]->IsIdentifier());
-  auto ident = u->params()[0]->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = u->params()[0]->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 
   ASSERT_TRUE(u->params()[1]->IsIdentifier());
   ident = u->params()[1]->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "b");
 }
 
 TEST_F(ParserImplTest, UnaryExpression_OuterProduct_MissingParenLeft) {
-  auto p = parser("outer_product a, b)");
+  auto* p = parser("outer_product a, b)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -495,7 +495,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_OuterProduct_MissingParenRight) {
-  auto p = parser("outer_product(a, b");
+  auto* p = parser("outer_product(a, b");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -503,7 +503,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_OuterProduct_MissingFirstIdentifier) {
-  auto p = parser("outer_product(, b)");
+  auto* p = parser("outer_product(, b)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -511,7 +511,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_OuterProduct_MissingSecondIdentifier) {
-  auto p = parser("outer_product(a, )");
+  auto* p = parser("outer_product(a, )");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -519,7 +519,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_OuterProduct_MissingComma) {
-  auto p = parser("outer_product(a b)");
+  auto* p = parser("outer_product(a b)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -527,7 +527,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_OuterProduct_InvalidFirstIdentifier) {
-  auto p = parser("outer_product(123, b)");
+  auto* p = parser("outer_product(123, b)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -535,7 +535,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_OuterProduct_InvalidSecondIdentifier) {
-  auto p = parser("outer_product(a, 123)");
+  auto* p = parser("outer_product(a, 123)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -543,43 +543,43 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdx_NoModifier) {
-  auto p = parser("dpdx(a)");
+  auto* p = parser("dpdx(a)");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnaryDerivative());
 
-  auto deriv = e->AsUnaryDerivative();
+  auto* deriv = e->AsUnaryDerivative();
   EXPECT_EQ(deriv->op(), ast::UnaryDerivative::kDpdx);
   EXPECT_EQ(deriv->modifier(), ast::DerivativeModifier::kNone);
 
   ASSERT_NE(deriv->param(), nullptr);
   ASSERT_TRUE(deriv->param()->IsIdentifier());
-  auto ident = deriv->param()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = deriv->param()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdx_WithModifier) {
-  auto p = parser("dpdx<coarse>(a)");
+  auto* p = parser("dpdx<coarse>(a)");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnaryDerivative());
 
-  auto deriv = e->AsUnaryDerivative();
+  auto* deriv = e->AsUnaryDerivative();
   EXPECT_EQ(deriv->op(), ast::UnaryDerivative::kDpdx);
   EXPECT_EQ(deriv->modifier(), ast::DerivativeModifier::kCoarse);
 
   ASSERT_NE(deriv->param(), nullptr);
   ASSERT_TRUE(deriv->param()->IsIdentifier());
-  auto ident = deriv->param()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = deriv->param()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdx_MissingLessThan) {
-  auto p = parser("dpdx coarse>(a)");
+  auto* p = parser("dpdx coarse>(a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -587,7 +587,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdx_InvalidModifier) {
-  auto p = parser("dpdx<invalid>(a)");
+  auto* p = parser("dpdx<invalid>(a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -595,7 +595,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdx_EmptyModifer) {
-  auto p = parser("dpdx coarse>(a)");
+  auto* p = parser("dpdx coarse>(a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -603,7 +603,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdx_MissingGreaterThan) {
-  auto p = parser("dpdx<coarse (a)");
+  auto* p = parser("dpdx<coarse (a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -611,7 +611,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdx_MisisngLeftParen) {
-  auto p = parser("dpdx<coarse>a)");
+  auto* p = parser("dpdx<coarse>a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -619,7 +619,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdx_MissingRightParen) {
-  auto p = parser("dpdx<coarse>(a");
+  auto* p = parser("dpdx<coarse>(a");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -627,7 +627,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdx_MissingIdentifier) {
-  auto p = parser("dpdx<coarse>()");
+  auto* p = parser("dpdx<coarse>()");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -635,7 +635,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdx_InvalidIdentifeir) {
-  auto p = parser("dpdx<coarse>(12345)");
+  auto* p = parser("dpdx<coarse>(12345)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -643,43 +643,43 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdy_NoModifier) {
-  auto p = parser("dpdy(a)");
+  auto* p = parser("dpdy(a)");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnaryDerivative());
 
-  auto deriv = e->AsUnaryDerivative();
+  auto* deriv = e->AsUnaryDerivative();
   EXPECT_EQ(deriv->op(), ast::UnaryDerivative::kDpdy);
   EXPECT_EQ(deriv->modifier(), ast::DerivativeModifier::kNone);
 
   ASSERT_NE(deriv->param(), nullptr);
   ASSERT_TRUE(deriv->param()->IsIdentifier());
-  auto ident = deriv->param()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = deriv->param()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdy_WithModifier) {
-  auto p = parser("dpdy<fine>(a)");
+  auto* p = parser("dpdy<fine>(a)");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnaryDerivative());
 
-  auto deriv = e->AsUnaryDerivative();
+  auto* deriv = e->AsUnaryDerivative();
   EXPECT_EQ(deriv->op(), ast::UnaryDerivative::kDpdy);
   EXPECT_EQ(deriv->modifier(), ast::DerivativeModifier::kFine);
 
   ASSERT_NE(deriv->param(), nullptr);
   ASSERT_TRUE(deriv->param()->IsIdentifier());
-  auto ident = deriv->param()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = deriv->param()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdy_MissingLessThan) {
-  auto p = parser("dpdy coarse>(a)");
+  auto* p = parser("dpdy coarse>(a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -687,7 +687,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdy_InvalidModifier) {
-  auto p = parser("dpdy<invalid>(a)");
+  auto* p = parser("dpdy<invalid>(a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -695,7 +695,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdy_EmptyModifer) {
-  auto p = parser("dpdy coarse>(a)");
+  auto* p = parser("dpdy coarse>(a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -703,7 +703,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdy_MissingGreaterThan) {
-  auto p = parser("dpdy<coarse (a)");
+  auto* p = parser("dpdy<coarse (a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -711,7 +711,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdy_MisisngLeftParen) {
-  auto p = parser("dpdy<coarse>a)");
+  auto* p = parser("dpdy<coarse>a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -719,7 +719,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdy_MissingRightParen) {
-  auto p = parser("dpdy<coarse>(a");
+  auto* p = parser("dpdy<coarse>(a");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -727,7 +727,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdy_MissingIdentifier) {
-  auto p = parser("dpdy<coarse>()");
+  auto* p = parser("dpdy<coarse>()");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -735,7 +735,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Dpdy_InvalidIdentifeir) {
-  auto p = parser("dpdy<coarse>(12345)");
+  auto* p = parser("dpdy<coarse>(12345)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -743,43 +743,43 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Fwidth_NoModifier) {
-  auto p = parser("fwidth(a)");
+  auto* p = parser("fwidth(a)");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnaryDerivative());
 
-  auto deriv = e->AsUnaryDerivative();
+  auto* deriv = e->AsUnaryDerivative();
   EXPECT_EQ(deriv->op(), ast::UnaryDerivative::kFwidth);
   EXPECT_EQ(deriv->modifier(), ast::DerivativeModifier::kNone);
 
   ASSERT_NE(deriv->param(), nullptr);
   ASSERT_TRUE(deriv->param()->IsIdentifier());
-  auto ident = deriv->param()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = deriv->param()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Fwidth_WithModifier) {
-  auto p = parser("fwidth<coarse>(a)");
+  auto* p = parser("fwidth<coarse>(a)");
   auto e = p->unary_expression();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnaryDerivative());
 
-  auto deriv = e->AsUnaryDerivative();
+  auto* deriv = e->AsUnaryDerivative();
   EXPECT_EQ(deriv->op(), ast::UnaryDerivative::kFwidth);
   EXPECT_EQ(deriv->modifier(), ast::DerivativeModifier::kCoarse);
 
   ASSERT_NE(deriv->param(), nullptr);
   ASSERT_TRUE(deriv->param()->IsIdentifier());
-  auto ident = deriv->param()->AsIdentifier();
-  ASSERT_EQ(ident->name().size(), 1);
+  auto* ident = deriv->param()->AsIdentifier();
+  ASSERT_EQ(ident->name().size(), 1u);
   EXPECT_EQ(ident->name()[0], "a");
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Fwidth_MissingLessThan) {
-  auto p = parser("fwidth coarse>(a)");
+  auto* p = parser("fwidth coarse>(a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -787,7 +787,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Fwidth_InvalidModifier) {
-  auto p = parser("fwidth<invalid>(a)");
+  auto* p = parser("fwidth<invalid>(a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -795,7 +795,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Fwidth_EmptyModifer) {
-  auto p = parser("fwidth coarse>(a)");
+  auto* p = parser("fwidth coarse>(a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -803,7 +803,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Fwidth_MissingGreaterThan) {
-  auto p = parser("fwidth<coarse (a)");
+  auto* p = parser("fwidth<coarse (a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -811,7 +811,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Fwidth_MisisngLeftParen) {
-  auto p = parser("fwidth<coarse>a)");
+  auto* p = parser("fwidth<coarse>a)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -819,7 +819,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Fwidth_MissingRightParen) {
-  auto p = parser("fwidth<coarse>(a");
+  auto* p = parser("fwidth<coarse>(a");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -827,7 +827,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Fwidth_MissingIdentifier) {
-  auto p = parser("fwidth<coarse>()");
+  auto* p = parser("fwidth<coarse>()");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -835,7 +835,7 @@
 }
 
 TEST_F(ParserImplTest, UnaryExpression_Fwidht_InvalidIdentifeir) {
-  auto p = parser("fwidth<coarse>(12345)");
+  auto* p = parser("fwidth<coarse>(12345)");
   auto e = p->unary_expression();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_unless_stmt_test.cc b/src/reader/wgsl/parser_impl_unless_stmt_test.cc
index 25cb4ef..4557c7c 100644
--- a/src/reader/wgsl/parser_impl_unless_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_unless_stmt_test.cc
@@ -22,19 +22,19 @@
 namespace {
 
 TEST_F(ParserImplTest, UnlessStmt) {
-  auto p = parser("unless (a) { kill; }");
+  auto* p = parser("unless (a) { kill; }");
   auto e = p->unless_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
   ASSERT_TRUE(e->IsUnless());
   ASSERT_NE(e->condition(), nullptr);
   EXPECT_TRUE(e->condition()->IsIdentifier());
-  ASSERT_EQ(e->body().size(), 1);
+  ASSERT_EQ(e->body().size(), 1u);
   EXPECT_TRUE(e->body()[0]->IsKill());
 }
 
 TEST_F(ParserImplTest, UnlessStmt_InvalidCondition) {
-  auto p = parser("unless(if(a){}) {}");
+  auto* p = parser("unless(if(a){}) {}");
   auto e = p->unless_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -42,7 +42,7 @@
 }
 
 TEST_F(ParserImplTest, UnlessStmt_EmptyCondition) {
-  auto p = parser("unless() {}");
+  auto* p = parser("unless() {}");
   auto e = p->unless_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -50,7 +50,7 @@
 }
 
 TEST_F(ParserImplTest, UnlessStmt_InvalidBody) {
-  auto p = parser("unless(a + 2 - 5 == true) { kill }");
+  auto* p = parser("unless(a + 2 - 5 == true) { kill }");
   auto e = p->unless_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_variable_decl_test.cc b/src/reader/wgsl/parser_impl_variable_decl_test.cc
index a4ca585..05519c7 100644
--- a/src/reader/wgsl/parser_impl_variable_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_decl_test.cc
@@ -23,19 +23,19 @@
 namespace {
 
 TEST_F(ParserImplTest, VariableDecl_Parses) {
-  auto p = parser("var my_var : f32");
+  auto* p = parser("var my_var : f32");
   auto var = p->variable_decl();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(var, nullptr);
   ASSERT_EQ(var->name(), "my_var");
   ASSERT_NE(var->type(), nullptr);
-  ASSERT_EQ(var->source().line, 1);
-  ASSERT_EQ(var->source().column, 1);
+  ASSERT_EQ(var->source().line, 1u);
+  ASSERT_EQ(var->source().column, 1u);
   ASSERT_TRUE(var->type()->IsF32());
 }
 
 TEST_F(ParserImplTest, VariableDecl_MissingVar) {
-  auto p = parser("my_var : f32");
+  auto* p = parser("my_var : f32");
   auto v = p->variable_decl();
   ASSERT_EQ(v, nullptr);
   ASSERT_FALSE(p->has_error());
@@ -45,7 +45,7 @@
 }
 
 TEST_F(ParserImplTest, VariableDecl_InvalidIdentDecl) {
-  auto p = parser("var my_var f32");
+  auto* p = parser("var my_var f32");
   auto v = p->variable_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(v, nullptr);
@@ -53,7 +53,7 @@
 }
 
 TEST_F(ParserImplTest, VariableDecl_WithStorageClass) {
-  auto p = parser("var<private> my_var : f32");
+  auto* p = parser("var<private> my_var : f32");
   auto v = p->variable_decl();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(v, nullptr);
@@ -63,7 +63,7 @@
 }
 
 TEST_F(ParserImplTest, VariableDecl_InvalidStorageClass) {
-  auto p = parser("var<unknown> my_var : f32");
+  auto* p = parser("var<unknown> my_var : f32");
   auto v = p->variable_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(v, nullptr);
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 8552e7d..a93e21d 100644
--- a/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc
@@ -24,53 +24,53 @@
 namespace {
 
 TEST_F(ParserImplTest, VariableDecorationList_Parses) {
-  auto p = parser(R"([[location 4, builtin position]])");
+  auto* p = parser(R"([[location 4, builtin position]])");
   auto decos = p->variable_decoration_list();
   ASSERT_FALSE(p->has_error());
-  ASSERT_EQ(decos.size(), 2);
+  ASSERT_EQ(decos.size(), 2u);
   ASSERT_TRUE(decos[0]->IsLocation());
-  EXPECT_EQ(decos[0]->AsLocation()->value(), 4);
+  EXPECT_EQ(decos[0]->AsLocation()->value(), 4u);
   ASSERT_TRUE(decos[1]->IsBuiltin());
   EXPECT_EQ(decos[1]->AsBuiltin()->value(), ast::Builtin::kPosition);
 }
 
 TEST_F(ParserImplTest, VariableDecorationList_Empty) {
-  auto p = parser(R"([[]])");
+  auto* p = parser(R"([[]])");
   auto decos = p->variable_decoration_list();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:3: empty variable decoration list");
 }
 
 TEST_F(ParserImplTest, VariableDecorationList_Invalid) {
-  auto p = parser(R"([[invalid]])");
+  auto* p = parser(R"([[invalid]])");
   auto decos = p->variable_decoration_list();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:3: missing variable decoration for decoration list");
 }
 
 TEST_F(ParserImplTest, VariableDecorationList_ExtraComma) {
-  auto p = parser(R"([[builtin position, ]])");
+  auto* p = parser(R"([[builtin position, ]])");
   auto decos = p->variable_decoration_list();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:21: missing variable decoration after comma");
 }
 
 TEST_F(ParserImplTest, VariableDecorationList_MissingComma) {
-  auto p = parser(R"([[binding 4 location 5]])");
+  auto* p = parser(R"([[binding 4 location 5]])");
   auto decos = p->variable_decoration_list();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:13: missing comma in variable decoration list");
 }
 
 TEST_F(ParserImplTest, VariableDecorationList_BadDecoration) {
-  auto p = parser(R"([[location bad]])");
+  auto* p = parser(R"([[location bad]])");
   auto decos = p->variable_decoration_list();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:12: invalid value for location decoration");
 }
 
 TEST_F(ParserImplTest, VariableDecorationList_InvalidBuiltin) {
-  auto p = parser("[[builtin invalid]]");
+  auto* p = parser("[[builtin invalid]]");
   auto decos = p->variable_decoration_list();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:11: invalid value for builtin decoration");
diff --git a/src/reader/wgsl/parser_impl_variable_decoration_test.cc b/src/reader/wgsl/parser_impl_variable_decoration_test.cc
index 2a6a766..8c30a26 100644
--- a/src/reader/wgsl/parser_impl_variable_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_decoration_test.cc
@@ -26,18 +26,18 @@
 namespace {
 
 TEST_F(ParserImplTest, VariableDecoration_Location) {
-  auto p = parser("location 4");
+  auto* p = parser("location 4");
   auto deco = p->variable_decoration();
   ASSERT_NE(deco, nullptr);
   ASSERT_FALSE(p->has_error());
   ASSERT_TRUE(deco->IsLocation());
 
-  auto loc = deco->AsLocation();
-  EXPECT_EQ(loc->value(), 4);
+  auto* loc = deco->AsLocation();
+  EXPECT_EQ(loc->value(), 4u);
 }
 
 TEST_F(ParserImplTest, VariableDecoration_Location_MissingValue) {
-  auto p = parser("location");
+  auto* p = parser("location");
   auto deco = p->variable_decoration();
   ASSERT_EQ(deco, nullptr);
   ASSERT_TRUE(p->has_error());
@@ -45,7 +45,7 @@
 }
 
 TEST_F(ParserImplTest, VariableDecoration_Location_MissingInvalid) {
-  auto p = parser("location nan");
+  auto* p = parser("location nan");
   auto deco = p->variable_decoration();
   ASSERT_EQ(deco, nullptr);
   ASSERT_TRUE(p->has_error());
@@ -53,18 +53,18 @@
 }
 
 TEST_F(ParserImplTest, VariableDecoration_Builtin) {
-  auto p = parser("builtin frag_depth");
+  auto* p = parser("builtin frag_depth");
   auto deco = p->variable_decoration();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(deco, nullptr);
   ASSERT_TRUE(deco->IsBuiltin());
 
-  auto builtin = deco->AsBuiltin();
+  auto* builtin = deco->AsBuiltin();
   EXPECT_EQ(builtin->value(), ast::Builtin::kFragDepth);
 }
 
 TEST_F(ParserImplTest, VariableDecoration_Builtin_MissingValue) {
-  auto p = parser("builtin");
+  auto* p = parser("builtin");
   auto deco = p->variable_decoration();
   ASSERT_EQ(deco, nullptr);
   ASSERT_TRUE(p->has_error());
@@ -72,7 +72,7 @@
 }
 
 TEST_F(ParserImplTest, VariableDecoration_Builtin_MissingInvalid) {
-  auto p = parser("builtin 3");
+  auto* p = parser("builtin 3");
   auto deco = p->variable_decoration();
   ASSERT_EQ(deco, nullptr);
   ASSERT_TRUE(p->has_error());
@@ -80,18 +80,18 @@
 }
 
 TEST_F(ParserImplTest, VariableDecoration_Binding) {
-  auto p = parser("binding 4");
+  auto* p = parser("binding 4");
   auto deco = p->variable_decoration();
   ASSERT_NE(deco, nullptr);
   ASSERT_FALSE(p->has_error());
   ASSERT_TRUE(deco->IsBinding());
 
-  auto binding = deco->AsBinding();
-  EXPECT_EQ(binding->value(), 4);
+  auto* binding = deco->AsBinding();
+  EXPECT_EQ(binding->value(), 4u);
 }
 
 TEST_F(ParserImplTest, VariableDecoration_Binding_MissingValue) {
-  auto p = parser("binding");
+  auto* p = parser("binding");
   auto deco = p->variable_decoration();
   ASSERT_EQ(deco, nullptr);
   ASSERT_TRUE(p->has_error());
@@ -99,7 +99,7 @@
 }
 
 TEST_F(ParserImplTest, VariableDecoration_Binding_MissingInvalid) {
-  auto p = parser("binding nan");
+  auto* p = parser("binding nan");
   auto deco = p->variable_decoration();
   ASSERT_EQ(deco, nullptr);
   ASSERT_TRUE(p->has_error());
@@ -107,18 +107,18 @@
 }
 
 TEST_F(ParserImplTest, VariableDecoration_set) {
-  auto p = parser("set 4");
+  auto* p = parser("set 4");
   auto deco = p->variable_decoration();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(deco.get(), nullptr);
   ASSERT_TRUE(deco->IsSet());
 
-  auto set = deco->AsSet();
-  EXPECT_EQ(set->value(), 4);
+  auto* set = deco->AsSet();
+  EXPECT_EQ(set->value(), 4u);
 }
 
 TEST_F(ParserImplTest, VariableDecoration_Set_MissingValue) {
-  auto p = parser("set");
+  auto* p = parser("set");
   auto deco = p->variable_decoration();
   ASSERT_EQ(deco, nullptr);
   ASSERT_TRUE(p->has_error());
@@ -126,7 +126,7 @@
 }
 
 TEST_F(ParserImplTest, VariableDecoration_Set_MissingInvalid) {
-  auto p = parser("set nan");
+  auto* p = parser("set nan");
   auto deco = p->variable_decoration();
   ASSERT_EQ(deco, nullptr);
   ASSERT_TRUE(p->has_error());
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 a9f0166..3a8b29f 100644
--- a/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_ident_decl_test.cc
@@ -22,7 +22,7 @@
 namespace {
 
 TEST_F(ParserImplTest, VariableIdentDecl_Parses) {
-  auto p = parser("my_var : f32");
+  auto* p = parser("my_var : f32");
   std::string name;
   ast::type::Type* type;
   std::tie(name, type) = p->variable_ident_decl();
@@ -33,7 +33,7 @@
 }
 
 TEST_F(ParserImplTest, VariableIdentDecl_MissingIdent) {
-  auto p = parser(": f32");
+  auto* p = parser(": f32");
   std::string name;
   ast::type::Type* type;
   std::tie(name, type) = p->variable_ident_decl();
@@ -46,21 +46,21 @@
 }
 
 TEST_F(ParserImplTest, VariableIdentDecl_MissingColon) {
-  auto p = parser("my_var f32");
+  auto* p = parser("my_var f32");
   auto r = p->variable_ident_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:8: missing : for identifier declaration");
 }
 
 TEST_F(ParserImplTest, VariableIdentDecl_MissingType) {
-  auto p = parser("my_var :");
+  auto* p = parser("my_var :");
   auto r = p->variable_ident_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:9: invalid type for identifier declaration");
 }
 
 TEST_F(ParserImplTest, VariableIdentDecl_InvalidIdent) {
-  auto p = parser("123 : f32");
+  auto* p = parser("123 : f32");
   std::string name;
   ast::type::Type* type;
   std::tie(name, type) = p->variable_ident_decl();
@@ -73,7 +73,7 @@
 }
 
 TEST_F(ParserImplTest, VariableIdentDecl_InvalidType) {
-  auto p = parser("my_var : invalid");
+  auto* p = parser("my_var : invalid");
   auto r = p->variable_ident_decl();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(p->error(), "1:10: unknown type alias 'invalid'");
diff --git a/src/reader/wgsl/parser_impl_variable_stmt_test.cc b/src/reader/wgsl/parser_impl_variable_stmt_test.cc
index 78b7685..891d572 100644
--- a/src/reader/wgsl/parser_impl_variable_stmt_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_stmt_test.cc
@@ -24,7 +24,7 @@
 namespace {
 
 TEST_F(ParserImplTest, VariableStmt_VariableDecl) {
-  auto p = parser("var a : i32;");
+  auto* p = parser("var a : i32;");
   auto e = p->variable_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -36,7 +36,7 @@
 }
 
 TEST_F(ParserImplTest, VariableStmt_VariableDecl_WithInit) {
-  auto p = parser("var a : i32 = 1;");
+  auto* p = parser("var a : i32 = 1;");
   auto e = p->variable_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -49,7 +49,7 @@
 }
 
 TEST_F(ParserImplTest, VariableStmt_VariableDecl_Invalid) {
-  auto p = parser("var a : invalid;");
+  auto* p = parser("var a : invalid;");
   auto e = p->variable_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -57,7 +57,7 @@
 }
 
 TEST_F(ParserImplTest, VariableStmt_VariableDecl_ConstructorInvalid) {
-  auto p = parser("var a : i32 = if(a) {}");
+  auto* p = parser("var a : i32 = if(a) {}");
   auto e = p->variable_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -65,7 +65,7 @@
 }
 
 TEST_F(ParserImplTest, VariableStmt_Const) {
-  auto p = parser("const a : i32 = 1");
+  auto* p = parser("const a : i32 = 1");
   auto e = p->variable_stmt();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(e, nullptr);
@@ -73,7 +73,7 @@
 }
 
 TEST_F(ParserImplTest, VariableStmt_Const_InvalidVarIdent) {
-  auto p = parser("const a : invalid = 1");
+  auto* p = parser("const a : invalid = 1");
   auto e = p->variable_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -81,7 +81,7 @@
 }
 
 TEST_F(ParserImplTest, VariableStmt_Const_MissingEqual) {
-  auto p = parser("const a : i32 1");
+  auto* p = parser("const a : i32 1");
   auto e = p->variable_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -89,7 +89,7 @@
 }
 
 TEST_F(ParserImplTest, VariableStmt_Const_MissingConstructor) {
-  auto p = parser("const a : i32 =");
+  auto* p = parser("const a : i32 =");
   auto e = p->variable_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
@@ -97,7 +97,7 @@
 }
 
 TEST_F(ParserImplTest, VariableStmt_Const_InvalidConstructor) {
-  auto p = parser("const a : i32 = if (a) {}");
+  auto* p = parser("const a : i32 = if (a) {}");
   auto e = p->variable_stmt();
   ASSERT_TRUE(p->has_error());
   ASSERT_EQ(e, nullptr);
diff --git a/src/reader/wgsl/parser_impl_variable_storage_decoration_test.cc b/src/reader/wgsl/parser_impl_variable_storage_decoration_test.cc
index 27a82f1..a15d211 100644
--- a/src/reader/wgsl/parser_impl_variable_storage_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_storage_decoration_test.cc
@@ -36,9 +36,9 @@
   VariableStorageTest() = default;
   ~VariableStorageTest() = default;
 
-  void SetUp() { ctx_.Reset(); }
+  void SetUp() override { ctx_.Reset(); }
 
-  void TearDown() { impl_ = nullptr; }
+  void TearDown() override { impl_ = nullptr; }
 
   ParserImpl* parser(const std::string& str) {
     impl_ = std::make_unique<ParserImpl>(&ctx_, str);
@@ -52,7 +52,7 @@
 
 TEST_P(VariableStorageTest, Parses) {
   auto params = GetParam();
-  auto p = parser(std::string("<") + params.input + ">");
+  auto* p = parser(std::string("<") + params.input + ">");
 
   auto sc = p->variable_storage_decoration();
   ASSERT_FALSE(p->has_error());
@@ -79,7 +79,7 @@
         VariableStorageData{"function", ast::StorageClass::kFunction}));
 
 TEST_F(ParserImplTest, VariableStorageDecoration_NoMatch) {
-  auto p = parser("<not-a-storage-class>");
+  auto* p = parser("<not-a-storage-class>");
   auto sc = p->variable_storage_decoration();
   ASSERT_EQ(sc, ast::StorageClass::kNone);
   ASSERT_TRUE(p->has_error());
@@ -87,7 +87,7 @@
 }
 
 TEST_F(ParserImplTest, VariableStorageDecoration_Empty) {
-  auto p = parser("<>");
+  auto* p = parser("<>");
   auto sc = p->variable_storage_decoration();
   ASSERT_EQ(sc, ast::StorageClass::kNone);
   ASSERT_TRUE(p->has_error());
@@ -95,7 +95,7 @@
 }
 
 TEST_F(ParserImplTest, VariableStorageDecoration_MissingLessThan) {
-  auto p = parser("in>");
+  auto* p = parser("in>");
   auto sc = p->variable_storage_decoration();
   ASSERT_EQ(sc, ast::StorageClass::kNone);
   ASSERT_FALSE(p->has_error());
@@ -105,7 +105,7 @@
 }
 
 TEST_F(ParserImplTest, VariableStorageDecoration_MissingGreaterThan) {
-  auto p = parser("<in");
+  auto* p = parser("<in");
   auto sc = p->variable_storage_decoration();
   ASSERT_EQ(sc, ast::StorageClass::kNone);
   ASSERT_TRUE(p->has_error());
diff --git a/src/reader/wgsl/parser_test.cc b/src/reader/wgsl/parser_test.cc
index 081deba..178794a 100644
--- a/src/reader/wgsl/parser_test.cc
+++ b/src/reader/wgsl/parser_test.cc
@@ -46,10 +46,10 @@
   ASSERT_TRUE(p.Parse()) << p.error();
 
   auto m = p.module();
-  ASSERT_EQ(1, m.imports().size());
-  ASSERT_EQ(1, m.entry_points().size());
-  ASSERT_EQ(1, m.functions().size());
-  ASSERT_EQ(1, m.global_variables().size());
+  ASSERT_EQ(1u, m.imports().size());
+  ASSERT_EQ(1u, m.entry_points().size());
+  ASSERT_EQ(1u, m.functions().size());
+  ASSERT_EQ(1u, m.global_variables().size());
 }
 
 TEST_F(ParserTest, HandlesError) {
diff --git a/src/reader/wgsl/token_test.cc b/src/reader/wgsl/token_test.cc
index c6dc9f5..4daa091 100644
--- a/src/reader/wgsl/token_test.cc
+++ b/src/reader/wgsl/token_test.cc
@@ -58,7 +58,7 @@
 
 TEST_F(TokenTest, ReturnsU32) {
   Token t2(Source{1, 1}, 2345u);
-  EXPECT_EQ(t2.to_u32(), 2345);
+  EXPECT_EQ(t2.to_u32(), 2345u);
 }
 
 TEST_F(TokenTest, ReturnsMaxU32) {
@@ -68,8 +68,8 @@
 
 TEST_F(TokenTest, Source) {
   Token t(Token::Type::kUintLiteral, Source{3, 9});
-  EXPECT_EQ(t.line(), 3);
-  EXPECT_EQ(t.column(), 9);
+  EXPECT_EQ(t.line(), 3u);
+  EXPECT_EQ(t.column(), 9u);
 }
 
 }  // namespace
diff --git a/src/scope_stack_test.cc b/src/scope_stack_test.cc
index 2f31292..f1f5551 100644
--- a/src/scope_stack_test.cc
+++ b/src/scope_stack_test.cc
@@ -27,7 +27,7 @@
 
   uint32_t val = 0;
   EXPECT_TRUE(s.get("var", &val));
-  EXPECT_EQ(val, 5);
+  EXPECT_EQ(val, 5u);
 }
 
 TEST_F(ScopeStackTest, Global_SetWithPointer) {
@@ -49,7 +49,7 @@
 
   uint32_t val = 0;
   EXPECT_TRUE(s.get("var", &val));
-  EXPECT_EQ(val, 5);
+  EXPECT_EQ(val, 5u);
 }
 
 TEST_F(ScopeStackTest, Scope) {
@@ -59,14 +59,14 @@
 
   uint32_t val = 0;
   EXPECT_TRUE(s.get("var", &val));
-  EXPECT_EQ(val, 5);
+  EXPECT_EQ(val, 5u);
 }
 
 TEST_F(ScopeStackTest, Get_MissingName) {
   ScopeStack<uint32_t> s;
   uint32_t ret = 0;
   EXPECT_FALSE(s.get("val", &ret));
-  EXPECT_EQ(ret, 0);
+  EXPECT_EQ(ret, 0u);
 }
 
 TEST_F(ScopeStackTest, Has) {
@@ -87,7 +87,7 @@
 
   uint32_t ret;
   EXPECT_TRUE(s.get("var", &ret));
-  EXPECT_EQ(ret, 5);
+  EXPECT_EQ(ret, 5u);
 }
 
 }  // namespace
diff --git a/src/type_determiner_test.cc b/src/type_determiner_test.cc
index 875842a..b722511 100644
--- a/src/type_determiner_test.cc
+++ b/src/type_determiner_test.cc
@@ -1,4 +1,3 @@
-
 // Copyright 2020 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
@@ -71,7 +70,7 @@
 
 class TypeDeterminerTest : public testing::Test {
  public:
-  void SetUp() { td_ = std::make_unique<TypeDeterminer>(&ctx_); }
+  void SetUp() override { td_ = std::make_unique<TypeDeterminer>(&ctx_); }
 
   TypeDeterminer* td() const { return td_.get(); }
 
@@ -103,11 +102,11 @@
 
   auto lhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::IntLiteral>(&i32, 2));
-  auto lhs_ptr = lhs.get();
+  auto* lhs_ptr = lhs.get();
 
   auto rhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 2.3f));
-  auto rhs_ptr = rhs.get();
+  auto* rhs_ptr = rhs.get();
 
   ast::AssignmentStatement assign(std::move(lhs), std::move(rhs));
 
@@ -124,7 +123,7 @@
 
   auto cond = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::IntLiteral>(&i32, 2));
-  auto cond_ptr = cond.get();
+  auto* cond_ptr = cond.get();
 
   ast::BreakStatement brk(ast::StatementCondition::kIf, std::move(cond));
 
@@ -145,11 +144,11 @@
 
   auto lhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::IntLiteral>(&i32, 2));
-  auto lhs_ptr = lhs.get();
+  auto* lhs_ptr = lhs.get();
 
   auto rhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 2.3f));
-  auto rhs_ptr = rhs.get();
+  auto* rhs_ptr = rhs.get();
 
   ast::StatementList body;
   body.push_back(std::make_unique<ast::AssignmentStatement>(std::move(lhs),
@@ -170,7 +169,7 @@
 
   auto cond = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::IntLiteral>(&i32, 2));
-  auto cond_ptr = cond.get();
+  auto* cond_ptr = cond.get();
 
   ast::ContinueStatement stmt(ast::StatementCondition::kIf, std::move(cond));
 
@@ -191,11 +190,11 @@
 
   auto lhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::IntLiteral>(&i32, 2));
-  auto lhs_ptr = lhs.get();
+  auto* lhs_ptr = lhs.get();
 
   auto rhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 2.3f));
-  auto rhs_ptr = rhs.get();
+  auto* rhs_ptr = rhs.get();
 
   ast::StatementList body;
   body.push_back(std::make_unique<ast::AssignmentStatement>(std::move(lhs),
@@ -220,11 +219,11 @@
 
   auto else_lhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::IntLiteral>(&i32, 2));
-  auto else_lhs_ptr = else_lhs.get();
+  auto* else_lhs_ptr = else_lhs.get();
 
   auto else_rhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 2.3f));
-  auto else_rhs_ptr = else_rhs.get();
+  auto* else_rhs_ptr = else_rhs.get();
 
   ast::StatementList else_body;
   else_body.push_back(std::make_unique<ast::AssignmentStatement>(
@@ -240,11 +239,11 @@
 
   auto lhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::IntLiteral>(&i32, 2));
-  auto lhs_ptr = lhs.get();
+  auto* lhs_ptr = lhs.get();
 
   auto rhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 2.3f));
-  auto rhs_ptr = rhs.get();
+  auto* rhs_ptr = rhs.get();
 
   ast::StatementList body;
   body.push_back(std::make_unique<ast::AssignmentStatement>(std::move(lhs),
@@ -274,11 +273,11 @@
 
   auto body_lhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::IntLiteral>(&i32, 2));
-  auto body_lhs_ptr = body_lhs.get();
+  auto* body_lhs_ptr = body_lhs.get();
 
   auto body_rhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 2.3f));
-  auto body_rhs_ptr = body_rhs.get();
+  auto* body_rhs_ptr = body_rhs.get();
 
   ast::StatementList body;
   body.push_back(std::make_unique<ast::AssignmentStatement>(
@@ -286,11 +285,11 @@
 
   auto continuing_lhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::IntLiteral>(&i32, 2));
-  auto continuing_lhs_ptr = continuing_lhs.get();
+  auto* continuing_lhs_ptr = continuing_lhs.get();
 
   auto continuing_rhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 2.3f));
-  auto continuing_rhs_ptr = continuing_rhs.get();
+  auto* continuing_rhs_ptr = continuing_rhs.get();
 
   ast::StatementList continuing;
   continuing.push_back(std::make_unique<ast::AssignmentStatement>(
@@ -314,7 +313,7 @@
 
   auto cond = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::IntLiteral>(&i32, 2));
-  auto cond_ptr = cond.get();
+  auto* cond_ptr = cond.get();
 
   ast::ReturnStatement ret(std::move(cond));
 
@@ -335,11 +334,11 @@
 
   auto lhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::IntLiteral>(&i32, 2));
-  auto lhs_ptr = lhs.get();
+  auto* lhs_ptr = lhs.get();
 
   auto rhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 2.3f));
-  auto rhs_ptr = rhs.get();
+  auto* rhs_ptr = rhs.get();
 
   ast::StatementList body;
   body.push_back(std::make_unique<ast::AssignmentStatement>(std::move(lhs),
@@ -369,11 +368,11 @@
 
   auto lhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::IntLiteral>(&i32, 2));
-  auto lhs_ptr = lhs.get();
+  auto* lhs_ptr = lhs.get();
 
   auto rhs = std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::FloatLiteral>(&f32, 2.3f));
-  auto rhs_ptr = rhs.get();
+  auto* rhs_ptr = rhs.get();
 
   ast::StatementList body;
   body.push_back(std::make_unique<ast::AssignmentStatement>(std::move(lhs),
@@ -399,7 +398,7 @@
       std::make_unique<ast::Variable>("my_var", ast::StorageClass::kNone, &i32);
   var->set_constructor(std::make_unique<ast::ScalarConstructorExpression>(
       std::make_unique<ast::IntLiteral>(&i32, 2)));
-  auto init_ptr = var->constructor();
+  auto* init_ptr = var->constructor();
 
   ast::VariableDeclStatement decl(std::move(var));
 
@@ -460,7 +459,7 @@
   EXPECT_TRUE(td()->DetermineResultType(&acc));
   ASSERT_NE(acc.result_type(), nullptr);
   ASSERT_TRUE(acc.result_type()->IsVector());
-  EXPECT_EQ(acc.result_type()->AsVector()->size(), 3);
+  EXPECT_EQ(acc.result_type()->AsVector()->size(), 3u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_ArrayAccessor_Matrix_BothDimensions) {
@@ -584,7 +583,7 @@
   ASSERT_NE(tc.result_type(), nullptr);
   ASSERT_TRUE(tc.result_type()->IsVector());
   EXPECT_TRUE(tc.result_type()->AsVector()->type()->IsF32());
-  EXPECT_EQ(tc.result_type()->AsVector()->size(), 3);
+  EXPECT_EQ(tc.result_type()->AsVector()->size(), 3u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_Identifier_GlobalVariable) {
@@ -608,7 +607,7 @@
   ast::type::F32Type f32;
 
   auto my_var = std::make_unique<ast::IdentifierExpression>("my_var");
-  auto my_var_ptr = my_var.get();
+  auto* my_var_ptr = my_var.get();
 
   ast::StatementList body;
   body.push_back(std::make_unique<ast::VariableDeclStatement>(
@@ -700,7 +699,7 @@
   ASSERT_NE(mem.result_type(), nullptr);
   ASSERT_TRUE(mem.result_type()->IsVector());
   EXPECT_TRUE(mem.result_type()->AsVector()->type()->IsF32());
-  EXPECT_EQ(mem.result_type()->AsVector()->size(), 2);
+  EXPECT_EQ(mem.result_type()->AsVector()->size(), 2u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_MultiLevel) {
@@ -781,7 +780,7 @@
   ASSERT_NE(mem.result_type(), nullptr);
   ASSERT_TRUE(mem.result_type()->IsVector());
   EXPECT_TRUE(mem.result_type()->AsVector()->type()->IsF32());
-  EXPECT_EQ(mem.result_type()->AsVector()->size(), 2);
+  EXPECT_EQ(mem.result_type()->AsVector()->size(), 2u);
 }
 
 using Expr_Binary_BitwiseTest = testing::TestWithParam<ast::BinaryOp>;
@@ -837,7 +836,7 @@
   ASSERT_NE(expr.result_type(), nullptr);
   ASSERT_TRUE(expr.result_type()->IsVector());
   EXPECT_TRUE(expr.result_type()->AsVector()->type()->IsI32());
-  EXPECT_EQ(expr.result_type()->AsVector()->size(), 3);
+  EXPECT_EQ(expr.result_type()->AsVector()->size(), 3u);
 }
 INSTANTIATE_TEST_SUITE_P(TypeDeterminerTest,
                          Expr_Binary_BitwiseTest,
@@ -905,7 +904,7 @@
   ASSERT_NE(expr.result_type(), nullptr);
   ASSERT_TRUE(expr.result_type()->IsVector());
   EXPECT_TRUE(expr.result_type()->AsVector()->type()->IsBool());
-  EXPECT_EQ(expr.result_type()->AsVector()->size(), 3);
+  EXPECT_EQ(expr.result_type()->AsVector()->size(), 3u);
 }
 INSTANTIATE_TEST_SUITE_P(TypeDeterminerTest,
                          Expr_Binary_LogicalTest,
@@ -965,7 +964,7 @@
   ASSERT_NE(expr.result_type(), nullptr);
   ASSERT_TRUE(expr.result_type()->IsVector());
   EXPECT_TRUE(expr.result_type()->AsVector()->type()->IsBool());
-  EXPECT_EQ(expr.result_type()->AsVector()->size(), 3);
+  EXPECT_EQ(expr.result_type()->AsVector()->size(), 3u);
 }
 INSTANTIATE_TEST_SUITE_P(TypeDeterminerTest,
                          Expr_Binary_CompareTest,
@@ -1029,7 +1028,7 @@
   ASSERT_NE(expr.result_type(), nullptr);
   ASSERT_TRUE(expr.result_type()->IsVector());
   EXPECT_TRUE(expr.result_type()->AsVector()->type()->IsF32());
-  EXPECT_EQ(expr.result_type()->AsVector()->size(), 3);
+  EXPECT_EQ(expr.result_type()->AsVector()->size(), 3u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_Binary_Multiply_Scalar_Vector) {
@@ -1060,7 +1059,7 @@
   ASSERT_NE(expr.result_type(), nullptr);
   ASSERT_TRUE(expr.result_type()->IsVector());
   EXPECT_TRUE(expr.result_type()->AsVector()->type()->IsF32());
-  EXPECT_EQ(expr.result_type()->AsVector()->size(), 3);
+  EXPECT_EQ(expr.result_type()->AsVector()->size(), 3u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_Binary_Multiply_Vector_Vector) {
@@ -1088,7 +1087,7 @@
   ASSERT_NE(expr.result_type(), nullptr);
   ASSERT_TRUE(expr.result_type()->IsVector());
   EXPECT_TRUE(expr.result_type()->AsVector()->type()->IsF32());
-  EXPECT_EQ(expr.result_type()->AsVector()->size(), 3);
+  EXPECT_EQ(expr.result_type()->AsVector()->size(), 3u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_Binary_Multiply_Matrix_Scalar) {
@@ -1119,10 +1118,10 @@
   ASSERT_NE(expr.result_type(), nullptr);
   ASSERT_TRUE(expr.result_type()->IsMatrix());
 
-  auto mat = expr.result_type()->AsMatrix();
+  auto* mat = expr.result_type()->AsMatrix();
   EXPECT_TRUE(mat->type()->IsF32());
-  EXPECT_EQ(mat->rows(), 3);
-  EXPECT_EQ(mat->columns(), 2);
+  EXPECT_EQ(mat->rows(), 3u);
+  EXPECT_EQ(mat->columns(), 2u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_Binary_Multiply_Scalar_Matrix) {
@@ -1153,10 +1152,10 @@
   ASSERT_NE(expr.result_type(), nullptr);
   ASSERT_TRUE(expr.result_type()->IsMatrix());
 
-  auto mat = expr.result_type()->AsMatrix();
+  auto* mat = expr.result_type()->AsMatrix();
   EXPECT_TRUE(mat->type()->IsF32());
-  EXPECT_EQ(mat->rows(), 3);
-  EXPECT_EQ(mat->columns(), 2);
+  EXPECT_EQ(mat->rows(), 3u);
+  EXPECT_EQ(mat->columns(), 2u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_Binary_Multiply_Matrix_Vector) {
@@ -1188,7 +1187,7 @@
   ASSERT_NE(expr.result_type(), nullptr);
   ASSERT_TRUE(expr.result_type()->IsVector());
   EXPECT_TRUE(expr.result_type()->AsVector()->type()->IsF32());
-  EXPECT_EQ(expr.result_type()->AsVector()->size(), 3);
+  EXPECT_EQ(expr.result_type()->AsVector()->size(), 3u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_Binary_Multiply_Vector_Matrix) {
@@ -1220,7 +1219,7 @@
   ASSERT_NE(expr.result_type(), nullptr);
   ASSERT_TRUE(expr.result_type()->IsVector());
   EXPECT_TRUE(expr.result_type()->AsVector()->type()->IsF32());
-  EXPECT_EQ(expr.result_type()->AsVector()->size(), 2);
+  EXPECT_EQ(expr.result_type()->AsVector()->size(), 2u);
 }
 
 TEST_F(TypeDeterminerTest, Expr_Binary_Multiply_Matrix_Matrix) {
@@ -1252,10 +1251,10 @@
   ASSERT_NE(expr.result_type(), nullptr);
   ASSERT_TRUE(expr.result_type()->IsMatrix());
 
-  auto mat = expr.result_type()->AsMatrix();
+  auto* mat = expr.result_type()->AsMatrix();
   EXPECT_TRUE(mat->type()->IsF32());
-  EXPECT_EQ(mat->rows(), 4);
-  EXPECT_EQ(mat->columns(), 4);
+  EXPECT_EQ(mat->rows(), 4u);
+  EXPECT_EQ(mat->columns(), 4u);
 }
 
 using UnaryDerivativeExpressionTest =
@@ -1286,7 +1285,7 @@
   ASSERT_NE(der.result_type(), nullptr);
   ASSERT_TRUE(der.result_type()->IsVector());
   EXPECT_TRUE(der.result_type()->AsVector()->type()->IsF32());
-  EXPECT_EQ(der.result_type()->AsVector()->size(), 4);
+  EXPECT_EQ(der.result_type()->AsVector()->size(), 4u);
 }
 INSTANTIATE_TEST_SUITE_P(TypeDeterminerTest,
                          UnaryDerivativeExpressionTest,
@@ -1355,7 +1354,7 @@
   ASSERT_NE(exp.result_type(), nullptr);
   ASSERT_TRUE(exp.result_type()->IsVector());
   EXPECT_TRUE(exp.result_type()->AsVector()->type()->IsBool());
-  EXPECT_EQ(exp.result_type()->AsVector()->size(), 3);
+  EXPECT_EQ(exp.result_type()->AsVector()->size(), 3u);
 }
 TEST_P(UnaryMethodExpressionVecTest, Expr_UnaryMethod_Vec) {
   auto op = GetParam();
@@ -1447,10 +1446,10 @@
   EXPECT_TRUE(td.DetermineResultType(&exp));
   ASSERT_NE(exp.result_type(), nullptr);
   ASSERT_TRUE(exp.result_type()->IsMatrix());
-  auto mat = exp.result_type()->AsMatrix();
+  auto* mat = exp.result_type()->AsMatrix();
   EXPECT_TRUE(mat->type()->IsF32());
-  EXPECT_EQ(mat->rows(), 3);
-  EXPECT_EQ(mat->columns(), 2);
+  EXPECT_EQ(mat->rows(), 3u);
+  EXPECT_EQ(mat->columns(), 2u);
 }
 
 using UnaryOpExpressionTest = testing::TestWithParam<ast::UnaryOp>;
@@ -1479,7 +1478,7 @@
   ASSERT_NE(der.result_type(), nullptr);
   ASSERT_TRUE(der.result_type()->IsVector());
   EXPECT_TRUE(der.result_type()->AsVector()->type()->IsF32());
-  EXPECT_EQ(der.result_type()->AsVector()->size(), 4);
+  EXPECT_EQ(der.result_type()->AsVector()->size(), 4u);
 }
 INSTANTIATE_TEST_SUITE_P(TypeDeterminerTest,
                          UnaryOpExpressionTest,
@@ -1491,7 +1490,7 @@
 
   auto var =
       std::make_unique<ast::Variable>("var", ast::StorageClass::kNone, &i32);
-  auto var_ptr = var.get();
+  auto* var_ptr = var.get();
   auto stmt = std::make_unique<ast::VariableDeclStatement>(std::move(var));
 
   auto func =
@@ -1513,7 +1512,7 @@
   auto var =
       std::make_unique<ast::Variable>("var", ast::StorageClass::kNone, &i32);
   var->set_is_const(true);
-  auto var_ptr = var.get();
+  auto* var_ptr = var.get();
   auto stmt = std::make_unique<ast::VariableDeclStatement>(std::move(var));
 
   auto func =
diff --git a/src/type_manager_test.cc b/src/type_manager_test.cc
index a0526d1..1628ffb 100644
--- a/src/type_manager_test.cc
+++ b/src/type_manager_test.cc
@@ -25,28 +25,28 @@
 
 TEST_F(TypeManagerTest, GetUnregistered) {
   TypeManager tm;
-  auto t = tm.Get(std::make_unique<ast::type::I32Type>());
+  auto* t = tm.Get(std::make_unique<ast::type::I32Type>());
   ASSERT_NE(t, nullptr);
   EXPECT_TRUE(t->IsI32());
 }
 
 TEST_F(TypeManagerTest, GetSameTypeReturnsSamePtr) {
   TypeManager tm;
-  auto t = tm.Get(std::make_unique<ast::type::I32Type>());
+  auto* t = tm.Get(std::make_unique<ast::type::I32Type>());
   ASSERT_NE(t, nullptr);
   EXPECT_TRUE(t->IsI32());
 
-  auto t2 = tm.Get(std::make_unique<ast::type::I32Type>());
+  auto* t2 = tm.Get(std::make_unique<ast::type::I32Type>());
   EXPECT_EQ(t, t2);
 }
 
 TEST_F(TypeManagerTest, GetDifferentTypeReturnsDifferentPtr) {
   TypeManager tm;
-  auto t = tm.Get(std::make_unique<ast::type::I32Type>());
+  auto* t = tm.Get(std::make_unique<ast::type::I32Type>());
   ASSERT_NE(t, nullptr);
   EXPECT_TRUE(t->IsI32());
 
-  auto t2 = tm.Get(std::make_unique<ast::type::U32Type>());
+  auto* t2 = tm.Get(std::make_unique<ast::type::U32Type>());
   ASSERT_NE(t2, nullptr);
   EXPECT_NE(t, t2);
   EXPECT_TRUE(t2->IsU32());
@@ -54,14 +54,14 @@
 
 TEST_F(TypeManagerTest, ResetClearsPreviousData) {
   TypeManager tm;
-  auto t = tm.Get(std::make_unique<ast::type::I32Type>());
+  auto* t = tm.Get(std::make_unique<ast::type::I32Type>());
   ASSERT_NE(t, nullptr);
 
   EXPECT_FALSE(tm.TypesForTesting().empty());
   tm.Reset();
   EXPECT_TRUE(tm.TypesForTesting().empty());
 
-  auto t2 = tm.Get(std::make_unique<ast::type::I32Type>());
+  auto* t2 = tm.Get(std::make_unique<ast::type::I32Type>());
   ASSERT_NE(t2, nullptr);
 }
 
diff --git a/src/writer/spirv/binary_writer_test.cc b/src/writer/spirv/binary_writer_test.cc
index 2a574c4..f3cf327 100644
--- a/src/writer/spirv/binary_writer_test.cc
+++ b/src/writer/spirv/binary_writer_test.cc
@@ -33,12 +33,12 @@
   bw.WriteHeader(5);
 
   auto res = bw.result();
-  ASSERT_EQ(res.size(), 5);
+  ASSERT_EQ(res.size(), 5u);
   EXPECT_EQ(res[0], spv::MagicNumber);
-  EXPECT_EQ(res[1], 0x00010300);  // SPIR-V 1.3
-  EXPECT_EQ(res[2], 0);           // Generator ID
-  EXPECT_EQ(res[3], 5);           // ID Bound
-  EXPECT_EQ(res[4], 0);           // Reserved
+  EXPECT_EQ(res[1], 0x00010300u);  // SPIR-V 1.3
+  EXPECT_EQ(res[2], 0u);           // Generator ID
+  EXPECT_EQ(res[3], 5u);           // ID Bound
+  EXPECT_EQ(res[4], 0u);           // Reserved
 }
 
 TEST_F(BinaryWriterTest, Float) {
@@ -48,7 +48,7 @@
   bw.WriteBuilder(b);
 
   auto res = bw.result();
-  ASSERT_EQ(res.size(), 2);
+  ASSERT_EQ(res.size(), 2u);
   float f;
   memcpy(&f, res.data() + 1, 4);
   EXPECT_EQ(f, 2.4f);
@@ -61,8 +61,8 @@
   bw.WriteBuilder(b);
 
   auto res = bw.result();
-  ASSERT_EQ(res.size(), 2);
-  EXPECT_EQ(res[1], 2);
+  ASSERT_EQ(res.size(), 2u);
+  EXPECT_EQ(res[1], 2u);
 }
 
 TEST_F(BinaryWriterTest, String) {
@@ -72,7 +72,7 @@
   bw.WriteBuilder(b);
 
   auto res = bw.result();
-  ASSERT_EQ(res.size(), 4);
+  ASSERT_EQ(res.size(), 4u);
 
   uint8_t* v = reinterpret_cast<uint8_t*>(res.data() + 1);
   EXPECT_EQ(v[0], 'm');
@@ -96,7 +96,7 @@
   bw.WriteBuilder(b);
 
   auto res = bw.result();
-  ASSERT_EQ(res.size(), 4);
+  ASSERT_EQ(res.size(), 4u);
 
   uint8_t* v = reinterpret_cast<uint8_t*>(res.data() + 1);
   EXPECT_EQ(v[0], 'm');
@@ -122,9 +122,9 @@
   bw.WriteInstruction(i2);
 
   auto res = bw.result();
-  ASSERT_EQ(res.size(), 4);
-  EXPECT_EQ(res[1], 2);
-  EXPECT_EQ(res[3], 4);
+  ASSERT_EQ(res.size(), 4u);
+  EXPECT_EQ(res[1], 2u);
+  EXPECT_EQ(res[3], 4u);
 }
 
 }  // namespace
diff --git a/src/writer/spirv/builder_binary_expression_test.cc b/src/writer/spirv/builder_binary_expression_test.cc
index fe18196..e356454 100644
--- a/src/writer/spirv/builder_binary_expression_test.cc
+++ b/src/writer/spirv/builder_binary_expression_test.cc
@@ -67,7 +67,7 @@
   Builder b;
   b.push_function(Function{});
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeInt 32 1
 %2 = OpConstant %1 3
 %3 = OpConstant %1 4
@@ -110,7 +110,7 @@
   Builder b;
   b.push_function(Function{});
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeInt 32 1
 %1 = OpTypeVector %2 3
 %3 = OpConstant %2 1
@@ -155,7 +155,7 @@
   Builder b;
   b.push_function(Function{});
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeInt 32 0
 %2 = OpConstant %1 3
 %3 = OpConstant %1 4
@@ -198,7 +198,7 @@
   Builder b;
   b.push_function(Function{});
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeInt 32 0
 %1 = OpTypeVector %2 3
 %3 = OpConstant %2 1
@@ -243,7 +243,7 @@
   Builder b;
   b.push_function(Function{});
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeFloat 32
 %2 = OpConstant %1 3.20000005
 %3 = OpConstant %1 4.5
@@ -287,7 +287,7 @@
   Builder b;
   b.push_function(Function{});
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeFloat 32
 %1 = OpTypeVector %2 3
 %3 = OpConstant %2 1
@@ -325,7 +325,7 @@
   Builder b;
   b.push_function(Function{});
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeInt 32 0
 %2 = OpConstant %1 3
 %3 = OpConstant %1 4
@@ -370,7 +370,7 @@
   Builder b;
   b.push_function(Function{});
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeInt 32 0
 %1 = OpTypeVector %2 3
 %3 = OpConstant %2 1
@@ -412,7 +412,7 @@
   Builder b;
   b.push_function(Function{});
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeInt 32 1
 %2 = OpConstant %1 3
 %3 = OpConstant %1 4
@@ -457,7 +457,7 @@
   Builder b;
   b.push_function(Function{});
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeInt 32 1
 %1 = OpTypeVector %2 3
 %3 = OpConstant %2 1
@@ -499,7 +499,7 @@
   Builder b;
   b.push_function(Function{});
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeFloat 32
 %2 = OpConstant %1 3.20000005
 %3 = OpConstant %1 4.5
@@ -544,7 +544,7 @@
   Builder b;
   b.push_function(Function{});
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeFloat 32
 %1 = OpTypeVector %2 3
 %3 = OpConstant %2 1
@@ -594,7 +594,7 @@
   Builder b;
   b.push_function(Function{});
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeFloat 32
 %1 = OpTypeVector %2 3
 %3 = OpConstant %2 1
@@ -632,7 +632,7 @@
   Builder b;
   b.push_function(Function{});
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeFloat 32
 %2 = OpConstant %1 1
 %3 = OpTypeVector %1 3
@@ -665,7 +665,7 @@
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 8) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 8u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%5 = OpTypeFloat 32
 %4 = OpTypeVector %5 3
 %3 = OpTypeMatrix %4 3
@@ -702,7 +702,7 @@
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 8) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 8u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%5 = OpTypeFloat 32
 %4 = OpTypeVector %5 3
 %3 = OpTypeMatrix %4 3
@@ -748,7 +748,7 @@
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 9) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 9u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%5 = OpTypeFloat 32
 %4 = OpTypeVector %5 3
 %3 = OpTypeMatrix %4 3
@@ -796,7 +796,7 @@
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 9) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 9u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%5 = OpTypeFloat 32
 %4 = OpTypeVector %5 3
 %3 = OpTypeMatrix %4 3
@@ -834,7 +834,7 @@
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 8) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 8u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%5 = OpTypeFloat 32
 %4 = OpTypeVector %5 3
 %3 = OpTypeMatrix %4 3
diff --git a/src/writer/spirv/builder_constructor_expression_test.cc b/src/writer/spirv/builder_constructor_expression_test.cc
index 49cb27d..5e8f462 100644
--- a/src/writer/spirv/builder_constructor_expression_test.cc
+++ b/src/writer/spirv/builder_constructor_expression_test.cc
@@ -39,7 +39,7 @@
   ast::ScalarConstructorExpression c(std::move(fl));
 
   Builder b;
-  EXPECT_EQ(b.GenerateConstructorExpression(&c, true), 2);
+  EXPECT_EQ(b.GenerateConstructorExpression(&c, true), 2u);
   ASSERT_FALSE(b.has_error()) << b.error();
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeFloat 32
@@ -62,7 +62,7 @@
   ast::TypeConstructorExpression t(&vec, std::move(vals));
 
   Builder b;
-  EXPECT_EQ(b.GenerateConstructorExpression(&t, true), 5);
+  EXPECT_EQ(b.GenerateConstructorExpression(&t, true), 5u);
   ASSERT_FALSE(b.has_error()) << b.error();
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeFloat 32
@@ -88,8 +88,8 @@
   ast::TypeConstructorExpression t(&vec, std::move(vals));
 
   Builder b;
-  EXPECT_EQ(b.GenerateConstructorExpression(&t, true), 5);
-  EXPECT_EQ(b.GenerateConstructorExpression(&t, true), 5);
+  EXPECT_EQ(b.GenerateConstructorExpression(&t, true), 5u);
+  EXPECT_EQ(b.GenerateConstructorExpression(&t, true), 5u);
   ASSERT_FALSE(b.has_error()) << b.error();
 }
 
@@ -111,7 +111,7 @@
   ast::TypeConstructorExpression t(&vec, std::move(vals));
 
   Builder b;
-  EXPECT_EQ(b.GenerateConstructorExpression(&t, true), 0);
+  EXPECT_EQ(b.GenerateConstructorExpression(&t, true), 0u);
   EXPECT_TRUE(b.has_error());
   EXPECT_EQ(b.error(), R"(constructor must be a constant expression)");
 }
diff --git a/src/writer/spirv/builder_entry_point_test.cc b/src/writer/spirv/builder_entry_point_test.cc
index c92df6f..d629d26 100644
--- a/src/writer/spirv/builder_entry_point_test.cc
+++ b/src/writer/spirv/builder_entry_point_test.cc
@@ -37,7 +37,7 @@
   ASSERT_TRUE(b.GenerateEntryPoint(&ep));
 
   auto preamble = b.preamble();
-  ASSERT_EQ(preamble.size(), 1);
+  ASSERT_EQ(preamble.size(), 1u);
   EXPECT_EQ(DumpInstruction(preamble[0]), R"(OpEntryPoint Fragment %2 "main"
 )");
 }
@@ -50,7 +50,7 @@
   ASSERT_TRUE(b.GenerateEntryPoint(&ep));
 
   auto preamble = b.preamble();
-  ASSERT_EQ(preamble.size(), 1);
+  ASSERT_EQ(preamble.size(), 1u);
   EXPECT_EQ(DumpInstruction(preamble[0]),
             R"(OpEntryPoint GLCompute %3 "compute_main"
 )");
@@ -83,10 +83,10 @@
   ASSERT_TRUE(b.GenerateEntryPoint(&ep));
 
   auto preamble = b.preamble();
-  ASSERT_EQ(preamble.size(), 1);
+  ASSERT_EQ(preamble.size(), 1u);
   EXPECT_EQ(preamble[0].opcode(), spv::Op::OpEntryPoint);
 
-  ASSERT_GE(preamble[0].operands().size(), 3);
+  ASSERT_GE(preamble[0].operands().size(), 3u);
   EXPECT_EQ(preamble[0].operands()[0].to_i(), params.model);
 }
 INSTANTIATE_TEST_SUITE_P(
diff --git a/src/writer/spirv/builder_function_test.cc b/src/writer/spirv/builder_function_test.cc
index d5ee73e..f250cfb 100644
--- a/src/writer/spirv/builder_function_test.cc
+++ b/src/writer/spirv/builder_function_test.cc
@@ -42,7 +42,7 @@
 %1 = OpTypeFunction %2
 )");
 
-  ASSERT_GE(b.functions().size(), 1);
+  ASSERT_GE(b.functions().size(), 1u);
   const auto& ret = b.functions()[0];
   EXPECT_EQ(DumpInstruction(ret.declaration()), R"(%3 = OpFunction %2 None %1
 )");
diff --git a/src/writer/spirv/builder_ident_expression_test.cc b/src/writer/spirv/builder_ident_expression_test.cc
index 699de11..785aef5 100644
--- a/src/writer/spirv/builder_ident_expression_test.cc
+++ b/src/writer/spirv/builder_ident_expression_test.cc
@@ -68,7 +68,7 @@
 )");
 
   ast::IdentifierExpression expr("var");
-  EXPECT_EQ(b.GenerateIdentifierExpression(&expr), 5);
+  EXPECT_EQ(b.GenerateIdentifierExpression(&expr), 5u);
 }
 
 TEST_F(BuilderTest, IdentifierExpression_GlobalVar) {
@@ -85,7 +85,7 @@
 )");
 
   ast::IdentifierExpression expr("var");
-  EXPECT_EQ(b.GenerateIdentifierExpression(&expr), 1);
+  EXPECT_EQ(b.GenerateIdentifierExpression(&expr), 1u);
 }
 
 TEST_F(BuilderTest, IdentifierExpression_FunctionConst) {
@@ -119,7 +119,7 @@
 )");
 
   ast::IdentifierExpression expr("var");
-  EXPECT_EQ(b.GenerateIdentifierExpression(&expr), 5);
+  EXPECT_EQ(b.GenerateIdentifierExpression(&expr), 5u);
 }
 
 TEST_F(BuilderTest, IdentifierExpression_FunctionVar) {
@@ -140,7 +140,7 @@
 )");
 
   ast::IdentifierExpression expr("var");
-  EXPECT_EQ(b.GenerateIdentifierExpression(&expr), 1);
+  EXPECT_EQ(b.GenerateIdentifierExpression(&expr), 1u);
 }
 
 TEST_F(BuilderTest, IdentifierExpression_Load) {
@@ -165,7 +165,7 @@
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(&var)) << b.error();
 
-  ASSERT_EQ(b.GenerateBinaryExpression(&expr), 6) << b.error();
+  ASSERT_EQ(b.GenerateBinaryExpression(&expr), 6u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%3 = OpTypeInt 32 1
 %2 = OpTypePointer Private %3
 %1 = OpVariable %2 Private
@@ -202,7 +202,7 @@
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(&var)) << b.error();
 
-  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 3) << b.error();
+  EXPECT_EQ(b.GenerateBinaryExpression(&expr), 3u) << b.error();
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeInt 32 1
 %2 = OpConstant %1 2
 )");
diff --git a/src/writer/spirv/builder_literal_test.cc b/src/writer/spirv/builder_literal_test.cc
index 3fdda3b..d87e9b1 100644
--- a/src/writer/spirv/builder_literal_test.cc
+++ b/src/writer/spirv/builder_literal_test.cc
@@ -39,7 +39,7 @@
   Builder b;
   auto id = b.GenerateLiteralIfNeeded(&b_true);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(2, id);
+  EXPECT_EQ(2u, id);
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeBool
 %2 = OpConstantTrue %1
@@ -53,7 +53,7 @@
   Builder b;
   auto id = b.GenerateLiteralIfNeeded(&b_false);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(2, id);
+  EXPECT_EQ(2u, id);
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeBool
 %2 = OpConstantFalse %1
@@ -66,11 +66,11 @@
   ast::BoolLiteral b_false(&bool_type, false);
 
   Builder b;
-  ASSERT_NE(b.GenerateLiteralIfNeeded(&b_true), 0);
+  ASSERT_NE(b.GenerateLiteralIfNeeded(&b_true), 0u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  ASSERT_NE(b.GenerateLiteralIfNeeded(&b_false), 0);
+  ASSERT_NE(b.GenerateLiteralIfNeeded(&b_false), 0u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  ASSERT_NE(b.GenerateLiteralIfNeeded(&b_true), 0);
+  ASSERT_NE(b.GenerateLiteralIfNeeded(&b_true), 0u);
   ASSERT_FALSE(b.has_error()) << b.error();
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeBool
@@ -86,7 +86,7 @@
   Builder b;
   auto id = b.GenerateLiteralIfNeeded(&i);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(2, id);
+  EXPECT_EQ(2u, id);
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeInt 32 1
 %2 = OpConstant %1 -23
@@ -99,8 +99,8 @@
   ast::IntLiteral i2(&i32, -23);
 
   Builder b;
-  ASSERT_NE(b.GenerateLiteralIfNeeded(&i1), 0);
-  ASSERT_NE(b.GenerateLiteralIfNeeded(&i2), 0);
+  ASSERT_NE(b.GenerateLiteralIfNeeded(&i1), 0u);
+  ASSERT_NE(b.GenerateLiteralIfNeeded(&i2), 0u);
   ASSERT_FALSE(b.has_error()) << b.error();
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeInt 32 1
@@ -115,7 +115,7 @@
   Builder b;
   auto id = b.GenerateLiteralIfNeeded(&i);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(2, id);
+  EXPECT_EQ(2u, id);
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeInt 32 0
 %2 = OpConstant %1 23
@@ -128,8 +128,8 @@
   ast::UintLiteral i2(&u32, 23);
 
   Builder b;
-  ASSERT_NE(b.GenerateLiteralIfNeeded(&i1), 0);
-  ASSERT_NE(b.GenerateLiteralIfNeeded(&i2), 0);
+  ASSERT_NE(b.GenerateLiteralIfNeeded(&i1), 0u);
+  ASSERT_NE(b.GenerateLiteralIfNeeded(&i2), 0u);
   ASSERT_FALSE(b.has_error()) << b.error();
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeInt 32 0
@@ -144,7 +144,7 @@
   Builder b;
   auto id = b.GenerateLiteralIfNeeded(&i);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(2, id);
+  EXPECT_EQ(2u, id);
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeFloat 32
 %2 = OpConstant %1 23.2450008
@@ -157,8 +157,8 @@
   ast::FloatLiteral i2(&f32, 23.245f);
 
   Builder b;
-  ASSERT_NE(b.GenerateLiteralIfNeeded(&i1), 0);
-  ASSERT_NE(b.GenerateLiteralIfNeeded(&i2), 0);
+  ASSERT_NE(b.GenerateLiteralIfNeeded(&i1), 0u);
+  ASSERT_NE(b.GenerateLiteralIfNeeded(&i2), 0u);
   ASSERT_FALSE(b.has_error()) << b.error();
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeFloat 32
diff --git a/src/writer/spirv/builder_test.cc b/src/writer/spirv/builder_test.cc
index de6fd7a..6360d72 100644
--- a/src/writer/spirv/builder_test.cc
+++ b/src/writer/spirv/builder_test.cc
@@ -36,7 +36,7 @@
 
   Builder b;
   ASSERT_TRUE(b.Build(m));
-  ASSERT_EQ(b.preamble().size(), 4);
+  ASSERT_EQ(b.preamble().size(), 4u);
 
   EXPECT_EQ(DumpBuilder(b), R"(OpCapability Shader
 OpCapability VulkanMemoryModel
@@ -62,7 +62,7 @@
     EXPECT_EQ(b.next_id(), i + 1);
   }
 
-  EXPECT_EQ(6, b.id_bound());
+  EXPECT_EQ(6u, b.id_bound());
 }
 
 }  // namespace
diff --git a/src/writer/spirv/builder_type_test.cc b/src/writer/spirv/builder_type_test.cc
index 765c24b..1e2c79b 100644
--- a/src/writer/spirv/builder_type_test.cc
+++ b/src/writer/spirv/builder_type_test.cc
@@ -46,9 +46,9 @@
   Builder b;
   auto id = b.GenerateTypeIfNeeded(&alias_type);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(id, 1);
+  EXPECT_EQ(id, 1u);
 
-  EXPECT_EQ(b.types().size(), 1);
+  EXPECT_EQ(b.types().size(), 1u);
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeFloat 32
 )");
 }
@@ -59,13 +59,13 @@
   ast::type::AliasType alias_type("my_type", &f32);
 
   Builder b;
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&alias_type), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&alias_type), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&alias_type), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&alias_type), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&f32), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&f32), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
 }
 
@@ -76,7 +76,7 @@
   Builder b;
   auto id = b.GenerateTypeIfNeeded(&ary);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(1, id);
+  EXPECT_EQ(1u, id);
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeInt 32 1
 %1 = OpTypeRuntimeArray %2
@@ -88,8 +88,8 @@
   ast::type::ArrayType ary(&i32);
 
   Builder b;
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1);
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeInt 32 1
@@ -104,7 +104,7 @@
   Builder b;
   auto id = b.GenerateTypeIfNeeded(&ary);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(1, id);
+  EXPECT_EQ(1u, id);
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeInt 32 1
 %3 = OpTypeInt 32 0
@@ -118,8 +118,8 @@
   ast::type::ArrayType ary(&i32, 4);
 
   Builder b;
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1);
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeInt 32 1
@@ -135,9 +135,9 @@
   Builder b;
   auto id = b.GenerateTypeIfNeeded(&bool_type);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(id, 1);
+  EXPECT_EQ(id, 1u);
 
-  ASSERT_EQ(b.types().size(), 1);
+  ASSERT_EQ(b.types().size(), 1u);
   EXPECT_EQ(DumpInstruction(b.types()[0]), R"(%1 = OpTypeBool
 )");
 }
@@ -147,11 +147,11 @@
   ast::type::BoolType bool_type;
 
   Builder b;
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&bool_type), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&bool_type), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&bool_type), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&bool_type), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
 }
 
@@ -161,9 +161,9 @@
   Builder b;
   auto id = b.GenerateTypeIfNeeded(&f32);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(id, 1);
+  EXPECT_EQ(id, 1u);
 
-  ASSERT_EQ(b.types().size(), 1);
+  ASSERT_EQ(b.types().size(), 1u);
   EXPECT_EQ(DumpInstruction(b.types()[0]), R"(%1 = OpTypeFloat 32
 )");
 }
@@ -173,11 +173,11 @@
   ast::type::F32Type f32;
 
   Builder b;
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&f32), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&f32), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&f32), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&f32), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
 }
 
@@ -187,9 +187,9 @@
   Builder b;
   auto id = b.GenerateTypeIfNeeded(&i32);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(id, 1);
+  EXPECT_EQ(id, 1u);
 
-  ASSERT_EQ(b.types().size(), 1);
+  ASSERT_EQ(b.types().size(), 1u);
   EXPECT_EQ(DumpInstruction(b.types()[0]), R"(%1 = OpTypeInt 32 1
 )");
 }
@@ -199,11 +199,11 @@
   ast::type::F32Type f32;
 
   Builder b;
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&f32), 2);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&f32), 2u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
 }
 
@@ -214,9 +214,9 @@
   Builder b;
   auto id = b.GenerateTypeIfNeeded(&mat_type);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(id, 1);
+  EXPECT_EQ(id, 1u);
 
-  EXPECT_EQ(b.types().size(), 3);
+  EXPECT_EQ(b.types().size(), 3u);
   EXPECT_EQ(DumpInstructions(b.types()), R"(%3 = OpTypeFloat 32
 %2 = OpTypeVector %3 3
 %1 = OpTypeMatrix %2 2
@@ -228,11 +228,11 @@
   ast::type::MatrixType mat_type(&i32, 3, 4);
 
   Builder b;
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&mat_type), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&mat_type), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 3);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 3u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&mat_type), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&mat_type), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
 }
 
@@ -243,7 +243,7 @@
   Builder b;
   auto id = b.GenerateTypeIfNeeded(&ptr);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(1, id);
+  EXPECT_EQ(1u, id);
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeInt 32 1
 %1 = OpTypePointer Output %2
@@ -255,8 +255,8 @@
   ast::type::PointerType ptr(&i32, ast::StorageClass::kOutput);
 
   Builder b;
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&ptr), 1);
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&ptr), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&ptr), 1u);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&ptr), 1u);
 }
 
 TEST_F(BuilderTest_Type, GenerateStruct_Empty) {
@@ -266,9 +266,9 @@
   Builder b;
   auto id = b.GenerateTypeIfNeeded(&s_type);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(id, 1);
+  EXPECT_EQ(id, 1u);
 
-  EXPECT_EQ(b.types().size(), 1);
+  EXPECT_EQ(b.types().size(), 1u);
   EXPECT_EQ(DumpInstructions(b.debug()), "");
   EXPECT_EQ(DumpInstructions(b.types()), R"(%1 = OpTypeStruct
 )");
@@ -290,7 +290,7 @@
   Builder b;
   auto id = b.GenerateTypeIfNeeded(&s_type);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(id, 1);
+  EXPECT_EQ(id, 1u);
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeFloat 32
 %1 = OpTypeStruct %2
@@ -316,7 +316,7 @@
   Builder b;
   auto id = b.GenerateTypeIfNeeded(&s_type);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(id, 1);
+  EXPECT_EQ(id, 1u);
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeFloat 32
 %1 = OpTypeStruct %2
@@ -349,7 +349,7 @@
   Builder b;
   auto id = b.GenerateTypeIfNeeded(&s_type);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(id, 1);
+  EXPECT_EQ(id, 1u);
 
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeFloat 32
 %1 = OpTypeStruct %2 %2
@@ -368,9 +368,9 @@
   Builder b;
   auto id = b.GenerateTypeIfNeeded(&u32);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(id, 1);
+  EXPECT_EQ(id, 1u);
 
-  ASSERT_EQ(b.types().size(), 1);
+  ASSERT_EQ(b.types().size(), 1u);
   EXPECT_EQ(DumpInstruction(b.types()[0]), R"(%1 = OpTypeInt 32 0
 )");
 }
@@ -380,11 +380,11 @@
   ast::type::F32Type f32;
 
   Builder b;
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&u32), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&u32), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&f32), 2);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&f32), 2u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&u32), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&u32), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
 }
 
@@ -395,9 +395,9 @@
   Builder b;
   auto id = b.GenerateTypeIfNeeded(&vec_type);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(id, 1);
+  EXPECT_EQ(id, 1u);
 
-  EXPECT_EQ(b.types().size(), 2);
+  EXPECT_EQ(b.types().size(), 2u);
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeFloat 32
 %1 = OpTypeVector %2 3
 )");
@@ -408,11 +408,11 @@
   ast::type::VectorType vec_type(&i32, 3);
 
   Builder b;
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&vec_type), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&vec_type), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&vec_type), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&vec_type), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
 }
 
@@ -422,9 +422,9 @@
   Builder b;
   auto id = b.GenerateTypeIfNeeded(&void_type);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(id, 1);
+  EXPECT_EQ(id, 1u);
 
-  ASSERT_EQ(b.types().size(), 1);
+  ASSERT_EQ(b.types().size(), 1u);
   EXPECT_EQ(DumpInstruction(b.types()[0]), R"(%1 = OpTypeVoid
 )");
 }
@@ -434,11 +434,11 @@
   ast::type::VoidType void_type;
 
   Builder b;
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&void_type), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&void_type), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2u);
   ASSERT_FALSE(b.has_error()) << b.error();
-  EXPECT_EQ(b.GenerateTypeIfNeeded(&void_type), 1);
+  EXPECT_EQ(b.GenerateTypeIfNeeded(&void_type), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
 }
 
diff --git a/src/writer/spirv/instruction_test.cc b/src/writer/spirv/instruction_test.cc
index e147a41..65e0630 100644
--- a/src/writer/spirv/instruction_test.cc
+++ b/src/writer/spirv/instruction_test.cc
@@ -28,14 +28,14 @@
   Instruction i(spv::Op::OpEntryPoint, {Operand::Float(1.2f), Operand::Int(1),
                                         Operand::String("my_str")});
   EXPECT_EQ(i.opcode(), spv::Op::OpEntryPoint);
-  ASSERT_EQ(i.operands().size(), 3);
+  ASSERT_EQ(i.operands().size(), 3u);
 
   const auto& ops = i.operands();
   EXPECT_TRUE(ops[0].IsFloat());
   EXPECT_FLOAT_EQ(ops[0].to_f(), 1.2);
 
   EXPECT_TRUE(ops[1].IsInt());
-  EXPECT_EQ(ops[1].to_i(), 1);
+  EXPECT_EQ(ops[1].to_i(), 1u);
 
   EXPECT_TRUE(ops[2].IsString());
   EXPECT_EQ(ops[2].to_s(), "my_str");
@@ -44,7 +44,7 @@
 TEST_F(InstructionTest, Length) {
   Instruction i(spv::Op::OpEntryPoint, {Operand::Float(1.2f), Operand::Int(1),
                                         Operand::String("my_str")});
-  EXPECT_EQ(i.word_length(), 5);
+  EXPECT_EQ(i.word_length(), 5u);
 }
 
 }  // namespace
diff --git a/src/writer/spirv/operand_test.cc b/src/writer/spirv/operand_test.cc
index 681e8c4..0bb1c26 100644
--- a/src/writer/spirv/operand_test.cc
+++ b/src/writer/spirv/operand_test.cc
@@ -32,7 +32,7 @@
 TEST_F(OperandTest, CreateInt) {
   auto o = Operand::Int(1);
   EXPECT_TRUE(o.IsInt());
-  EXPECT_EQ(o.to_i(), 1);
+  EXPECT_EQ(o.to_i(), 1u);
 }
 
 TEST_F(OperandTest, CreateString) {
@@ -43,22 +43,22 @@
 
 TEST_F(OperandTest, Length_Float) {
   auto o = Operand::Float(1.2f);
-  EXPECT_EQ(o.length(), 1);
+  EXPECT_EQ(o.length(), 1u);
 }
 
 TEST_F(OperandTest, Length_Int) {
   auto o = Operand::Int(1);
-  EXPECT_EQ(o.length(), 1);
+  EXPECT_EQ(o.length(), 1u);
 }
 
 TEST_F(OperandTest, Length_String) {
   auto o = Operand::String("my string");
-  EXPECT_EQ(o.length(), 3);
+  EXPECT_EQ(o.length(), 3u);
 }
 
 TEST_F(OperandTest, Length_String_Empty) {
   auto o = Operand::String("");
-  EXPECT_EQ(o.length(), 1);
+  EXPECT_EQ(o.length(), 1u);
 }
 
 }  // namespace
diff --git a/tint_overrides_with_defaults.gni b/tint_overrides_with_defaults.gni
index 5732e2d..a8861ea 100644
--- a/tint_overrides_with_defaults.gni
+++ b/tint_overrides_with_defaults.gni
@@ -22,6 +22,11 @@
     tint_spirv_tools_dir = "//third_party/spirv-tools"
   }
 
+  # Path to googletest checkout
+  if (!defined(tint_googletest_dir)) {
+    tint_googletest_dir = "//third_party/googletest"
+  }
+
   # Path to spirv-tools generated files, relative to |target_gen_dir|
   if (!defined(tint_spirv_tools_gen)) {
     tint_spirv_tools_gen = "third_party/spirv-tools"
