diff --git a/samples/main.cc b/samples/main.cc
index 4b22b6a..7ea3f31 100644
--- a/samples/main.cc
+++ b/samples/main.cc
@@ -429,7 +429,7 @@
     }
   }
   if (options.format == Format::kSpirv) {
-    auto w = static_cast<tint::writer::spirv::Generator*>(writer.get());
+    auto* w = static_cast<tint::writer::spirv::Generator*>(writer.get());
     if (!WriteFile(options.output_file, "wb", w->result())) {
       return 1;
     }
diff --git a/src/reader/spirv/function.cc b/src/reader/spirv/function.cc
index 994cc92..40292df 100644
--- a/src/reader/spirv/function.cc
+++ b/src/reader/spirv/function.cc
@@ -325,6 +325,11 @@
 
 }  // namespace
 
+BlockInfo::BlockInfo(const spvtools::opt::BasicBlock& bb)
+    : basic_block(&bb), id(bb.id()) {}
+
+BlockInfo::~BlockInfo() {}
+
 FunctionEmitter::FunctionEmitter(ParserImpl* pi,
                                  const spvtools::opt::Function& function)
     : parser_impl_(*pi),
diff --git a/src/reader/spirv/function.h b/src/reader/spirv/function.h
index 72fb2ab..c2e8b1c 100644
--- a/src/reader/spirv/function.h
+++ b/src/reader/spirv/function.h
@@ -74,8 +74,8 @@
 struct BlockInfo {
   /// Constructor
   /// @param bb internal representation of the basic block
-  explicit BlockInfo(const spvtools::opt::BasicBlock& bb)
-      : basic_block(&bb), id(bb.id()) {}
+  explicit BlockInfo(const spvtools::opt::BasicBlock& bb);
+  ~BlockInfo();
 
   /// The internal representation of the basic block.
   const spvtools::opt::BasicBlock* basic_block;
diff --git a/src/reader/spirv/function_cfg_test.cc b/src/reader/spirv/function_cfg_test.cc
index a37bfab..e1d96d3 100644
--- a/src/reader/spirv/function_cfg_test.cc
+++ b/src/reader/spirv/function_cfg_test.cc
@@ -3944,7 +3944,7 @@
   ASSERT_NE(bi99, nullptr);
   EXPECT_EQ(bi99->case_head_for, nullptr);
   ASSERT_NE(bi99->default_head_for, nullptr);
-  EXPECT_EQ(bi99->default_head_for->begin_id, 10);
+  EXPECT_EQ(bi99->default_head_for->begin_id, 10u);
   EXPECT_TRUE(bi99->default_is_merge);
   EXPECT_EQ(bi99->case_values.get(), nullptr);
 }
@@ -3982,7 +3982,7 @@
   ASSERT_NE(bi30, nullptr);
   EXPECT_EQ(bi30->case_head_for, nullptr);
   ASSERT_NE(bi30->default_head_for, nullptr);
-  EXPECT_EQ(bi30->default_head_for->begin_id, 10);
+  EXPECT_EQ(bi30->default_head_for->begin_id, 10u);
   EXPECT_FALSE(bi30->default_is_merge);
   EXPECT_EQ(bi30->case_values.get(), nullptr);
 }
@@ -4019,7 +4019,7 @@
   const auto* bi20 = fe.GetBlockInfo(20);
   ASSERT_NE(bi20, nullptr);
   ASSERT_NE(bi20->case_head_for, nullptr);
-  EXPECT_EQ(bi20->case_head_for->begin_id, 10);
+  EXPECT_EQ(bi20->case_head_for->begin_id, 10u);
   EXPECT_EQ(bi20->default_head_for, nullptr);
   EXPECT_FALSE(bi20->default_is_merge);
   EXPECT_THAT(*(bi20->case_values.get()), UnorderedElementsAre(200));
@@ -4054,7 +4054,7 @@
   const auto* bi20 = fe.GetBlockInfo(20);
   ASSERT_NE(bi20, nullptr);
   ASSERT_NE(bi20->case_head_for, nullptr);
-  EXPECT_EQ(bi20->case_head_for->begin_id, 10);
+  EXPECT_EQ(bi20->case_head_for->begin_id, 10u);
   EXPECT_EQ(bi20->default_head_for, bi20->case_head_for);
   EXPECT_FALSE(bi20->default_is_merge);
   EXPECT_THAT(*(bi20->case_values.get()), UnorderedElementsAre(200));
@@ -4122,7 +4122,7 @@
   const auto* bi20 = fe.GetBlockInfo(20);
   ASSERT_NE(bi20, nullptr);
   ASSERT_NE(bi20->case_head_for, nullptr);
-  EXPECT_EQ(bi20->case_head_for->begin_id, 10);
+  EXPECT_EQ(bi20->case_head_for->begin_id, 10u);
   EXPECT_EQ(bi20->default_head_for, nullptr);
   EXPECT_FALSE(bi20->default_is_merge);
   EXPECT_THAT(*(bi20->case_values.get()), UnorderedElementsAre(200, 300));
@@ -4365,7 +4365,7 @@
 
   auto* bi20 = fe.GetBlockInfo(20);
   ASSERT_NE(bi20, nullptr);
-  EXPECT_EQ(bi20->succ_edge.count(20), 1);
+  EXPECT_EQ(bi20->succ_edge.count(20), 1u);
   EXPECT_EQ(bi20->succ_edge[20], EdgeKind::kBack);
 }
 
@@ -4397,7 +4397,7 @@
 
   auto* bi40 = fe.GetBlockInfo(40);
   ASSERT_NE(bi40, nullptr);
-  EXPECT_EQ(bi40->succ_edge.count(20), 1);
+  EXPECT_EQ(bi40->succ_edge.count(20), 1u);
   EXPECT_EQ(bi40->succ_edge[20], EdgeKind::kBack);
 }
 
@@ -4432,7 +4432,7 @@
 
   auto* bi50 = fe.GetBlockInfo(50);
   ASSERT_NE(bi50, nullptr);
-  EXPECT_EQ(bi50->succ_edge.count(20), 1);
+  EXPECT_EQ(bi50->succ_edge.count(20), 1u);
   EXPECT_EQ(bi50->succ_edge[20], EdgeKind::kBack);
 }
 
@@ -4491,7 +4491,7 @@
 
   auto* bi = fe.GetBlockInfo(20);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(99), 1);
+  EXPECT_EQ(bi->succ_edge.count(99), 1u);
   EXPECT_EQ(bi->succ_edge[99], EdgeKind::kLoopBreak);
 }
 
@@ -4520,7 +4520,7 @@
 
   auto* bi = fe.GetBlockInfo(20);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(99), 1);
+  EXPECT_EQ(bi->succ_edge.count(99), 1u);
   EXPECT_EQ(bi->succ_edge[99], EdgeKind::kLoopBreak);
 }
 
@@ -4548,7 +4548,7 @@
 
   auto* bi = fe.GetBlockInfo(30);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(99), 1);
+  EXPECT_EQ(bi->succ_edge.count(99), 1u);
   EXPECT_EQ(bi->succ_edge[99], EdgeKind::kLoopBreak);
 }
 
@@ -4573,7 +4573,7 @@
 
   auto* bi = fe.GetBlockInfo(20);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(99), 1);
+  EXPECT_EQ(bi->succ_edge.count(99), 1u);
   EXPECT_EQ(bi->succ_edge[99], EdgeKind::kToMerge);
 }
 
@@ -4602,13 +4602,13 @@
   // Then clause
   auto* bi20 = fe.GetBlockInfo(20);
   ASSERT_NE(bi20, nullptr);
-  EXPECT_EQ(bi20->succ_edge.count(99), 1);
+  EXPECT_EQ(bi20->succ_edge.count(99), 1u);
   EXPECT_EQ(bi20->succ_edge[99], EdgeKind::kToMerge);
 
   // Else clause
   auto* bi50 = fe.GetBlockInfo(50);
   ASSERT_NE(bi50, nullptr);
-  EXPECT_EQ(bi50->succ_edge.count(99), 1);
+  EXPECT_EQ(bi50->succ_edge.count(99), 1u);
   EXPECT_EQ(bi50->succ_edge[99], EdgeKind::kToMerge);
 }
 
@@ -4633,7 +4633,7 @@
 
   auto* bi = fe.GetBlockInfo(10);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(99), 1);
+  EXPECT_EQ(bi->succ_edge.count(99), 1u);
   EXPECT_EQ(bi->succ_edge[99], EdgeKind::kSwitchBreak);
 }
 
@@ -4658,7 +4658,7 @@
 
   auto* bi = fe.GetBlockInfo(20);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(99), 1);
+  EXPECT_EQ(bi->succ_edge.count(99), 1u);
   EXPECT_EQ(bi->succ_edge[99], EdgeKind::kSwitchBreak);
 }
 
@@ -4686,7 +4686,7 @@
 
   auto* bi = fe.GetBlockInfo(30);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(99), 1);
+  EXPECT_EQ(bi->succ_edge.count(99), 1u);
   EXPECT_EQ(bi->succ_edge[99], EdgeKind::kSwitchBreak);
 }
 
@@ -4711,7 +4711,7 @@
 
   auto* bi = fe.GetBlockInfo(10);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(99), 1);
+  EXPECT_EQ(bi->succ_edge.count(99), 1u);
   EXPECT_EQ(bi->succ_edge[99], EdgeKind::kSwitchBreak);
 }
 
@@ -4742,7 +4742,7 @@
 
   auto* bi = fe.GetBlockInfo(30);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(99), 1);
+  EXPECT_EQ(bi->succ_edge.count(99), 1u);
   EXPECT_EQ(bi->succ_edge[99], EdgeKind::kLoopBreak);
 }
 
@@ -4776,7 +4776,7 @@
 
   auto* bi = fe.GetBlockInfo(60);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(99), 1);
+  EXPECT_EQ(bi->succ_edge.count(99), 1u);
   EXPECT_EQ(bi->succ_edge[99], EdgeKind::kLoopBreak);
 }
 
@@ -4807,7 +4807,7 @@
 
   auto* bi = fe.GetBlockInfo(30);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(99), 1);
+  EXPECT_EQ(bi->succ_edge.count(99), 1u);
   EXPECT_EQ(bi->succ_edge[99], EdgeKind::kLoopBreak);
 }
 
@@ -4838,7 +4838,7 @@
 
   auto* bi = fe.GetBlockInfo(30);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(80), 1);
+  EXPECT_EQ(bi->succ_edge.count(80), 1u);
   EXPECT_EQ(bi->succ_edge[80], EdgeKind::kLoopContinue);
 }
 
@@ -4876,7 +4876,7 @@
 
   auto* bi = fe.GetBlockInfo(40);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(80), 1);
+  EXPECT_EQ(bi->succ_edge.count(80), 1u);
   EXPECT_EQ(bi->succ_edge[80], EdgeKind::kLoopContinue);
 }
 
@@ -4914,7 +4914,7 @@
 
   auto* bi = fe.GetBlockInfo(40);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(80), 1);
+  EXPECT_EQ(bi->succ_edge.count(80), 1u);
   EXPECT_EQ(bi->succ_edge[80], EdgeKind::kLoopContinue);
 }
 
@@ -4953,7 +4953,7 @@
 
   auto* bi = fe.GetBlockInfo(40);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(80), 1);
+  EXPECT_EQ(bi->succ_edge.count(80), 1u);
   EXPECT_EQ(bi->succ_edge[80], EdgeKind::kLoopContinue);
 }
 
@@ -5068,7 +5068,7 @@
 
   auto* bi = fe.GetBlockInfo(40);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(80), 1);
+  EXPECT_EQ(bi->succ_edge.count(80), 1u);
   EXPECT_EQ(bi->succ_edge[80], EdgeKind::kLoopContinue);
 }
 
@@ -5108,7 +5108,7 @@
 
   auto* bi = fe.GetBlockInfo(40);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(80), 1);
+  EXPECT_EQ(bi->succ_edge.count(80), 1u);
   EXPECT_EQ(bi->succ_edge[80], EdgeKind::kLoopContinue);
 }
 
@@ -5139,7 +5139,7 @@
 
   auto* bi = fe.GetBlockInfo(30);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(40), 1);
+  EXPECT_EQ(bi->succ_edge.count(40), 1u);
   EXPECT_EQ(bi->succ_edge[40], EdgeKind::kCaseFallThrough);
 }
 
@@ -5170,7 +5170,7 @@
 
   auto* bi = fe.GetBlockInfo(30);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(40), 1);
+  EXPECT_EQ(bi->succ_edge.count(40), 1u);
   EXPECT_EQ(bi->succ_edge[40], EdgeKind::kCaseFallThrough);
 }
 
@@ -5201,7 +5201,7 @@
 
   auto* bi = fe.GetBlockInfo(30);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(40), 1);
+  EXPECT_EQ(bi->succ_edge.count(40), 1u);
   EXPECT_EQ(bi->succ_edge[40], EdgeKind::kCaseFallThrough);
 }
 
@@ -5316,7 +5316,7 @@
 
   auto* bi = fe.GetBlockInfo(10);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(20), 1);
+  EXPECT_EQ(bi->succ_edge.count(20), 1u);
   EXPECT_EQ(bi->succ_edge[20], EdgeKind::kForward);
 }
 
@@ -5341,7 +5341,7 @@
 
   auto* bi = fe.GetBlockInfo(10);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(30), 1);
+  EXPECT_EQ(bi->succ_edge.count(30), 1u);
   EXPECT_EQ(bi->succ_edge[30], EdgeKind::kForward);
 }
 
@@ -5366,7 +5366,7 @@
 
   auto* bi = fe.GetBlockInfo(10);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(20), 1);
+  EXPECT_EQ(bi->succ_edge.count(20), 1u);
   EXPECT_EQ(bi->succ_edge[20], EdgeKind::kForward);
 }
 
@@ -5394,7 +5394,7 @@
 
   auto* bi = fe.GetBlockInfo(10);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(30), 1);
+  EXPECT_EQ(bi->succ_edge.count(30), 1u);
   EXPECT_EQ(bi->succ_edge[30], EdgeKind::kForward);
 }
 
@@ -5425,7 +5425,7 @@
 
   auto* bi = fe.GetBlockInfo(20);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(30), 1);
+  EXPECT_EQ(bi->succ_edge.count(30), 1u);
   EXPECT_EQ(bi->succ_edge[30], EdgeKind::kForward);
 }
 
@@ -5713,9 +5713,9 @@
 
   auto* bi = fe.GetBlockInfo(20);
   ASSERT_NE(bi, nullptr);
-  EXPECT_EQ(bi->succ_edge.count(30), 1);
+  EXPECT_EQ(bi->succ_edge.count(30), 1u);
   EXPECT_EQ(bi->succ_edge[30], EdgeKind::kForward);
-  EXPECT_EQ(bi->succ_edge.count(50), 1);
+  EXPECT_EQ(bi->succ_edge.count(50), 1u);
   EXPECT_EQ(bi->succ_edge[50], EdgeKind::kForward);
 }
 
@@ -5750,22 +5750,22 @@
 
   auto* bi20 = fe.GetBlockInfo(20);
   ASSERT_NE(bi20, nullptr);
-  EXPECT_EQ(bi20->succ_edge.count(50), 1);
+  EXPECT_EQ(bi20->succ_edge.count(50), 1u);
   EXPECT_EQ(bi20->succ_edge[50], EdgeKind::kForward);
 
   auto* bi30 = fe.GetBlockInfo(30);
   ASSERT_NE(bi30, nullptr);
-  EXPECT_EQ(bi30->succ_edge.count(50), 1);
+  EXPECT_EQ(bi30->succ_edge.count(50), 1u);
   EXPECT_EQ(bi30->succ_edge[50], EdgeKind::kForward);
 
   auto* bi50 = fe.GetBlockInfo(50);
   ASSERT_NE(bi50, nullptr);
-  EXPECT_EQ(bi50->succ_edge.count(60), 1);
+  EXPECT_EQ(bi50->succ_edge.count(60), 1u);
   EXPECT_EQ(bi50->succ_edge[60], EdgeKind::kForward);
 
   auto* bi60 = fe.GetBlockInfo(60);
   ASSERT_NE(bi60, nullptr);
-  EXPECT_EQ(bi60->succ_edge.count(99), 1);
+  EXPECT_EQ(bi60->succ_edge.count(99), 1u);
   EXPECT_EQ(bi60->succ_edge[99], EdgeKind::kToMerge);
 }
 
@@ -5791,12 +5791,12 @@
 
   auto* bi10 = fe.GetBlockInfo(10);
   ASSERT_NE(bi10, nullptr);
-  EXPECT_EQ(bi10->succ_edge.count(20), 1);
+  EXPECT_EQ(bi10->succ_edge.count(20), 1u);
   EXPECT_EQ(bi10->succ_edge[20], EdgeKind::kForward);
 
   auto* bi20 = fe.GetBlockInfo(20);
   ASSERT_NE(bi20, nullptr);
-  EXPECT_EQ(bi20->succ_edge.count(99), 1);
+  EXPECT_EQ(bi20->succ_edge.count(99), 1u);
   EXPECT_EQ(bi20->succ_edge[99], EdgeKind::kToMerge);
 }
 
diff --git a/src/reader/spirv/function_logical_test.cc b/src/reader/spirv/function_logical_test.cc
index bf480b0..040a599 100644
--- a/src/reader/spirv/function_logical_test.cc
+++ b/src/reader/spirv/function_logical_test.cc
@@ -229,7 +229,7 @@
      OpReturn
      OpFunctionEnd
   )";
-  auto p = parser(test::Assemble(assembly));
+  auto* p = parser(test::Assemble(assembly));
   ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions());
   FunctionEmitter fe(p, *spirv_function(100));
   EXPECT_TRUE(fe.EmitBody()) << p->error();
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 43e2172..e8f0534 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -126,6 +126,10 @@
 
 }  // namespace
 
+Builder::AccessorInfo::AccessorInfo() : source_id(0), source_type(nullptr) {}
+
+Builder::AccessorInfo::~AccessorInfo() {}
+
 Builder::Builder(ast::Module* mod) : mod_(mod), scope_stack_({}) {}
 
 Builder::~Builder() = default;
diff --git a/src/writer/spirv/builder.h b/src/writer/spirv/builder.h
index 823dcd9..2754b7f 100644
--- a/src/writer/spirv/builder.h
+++ b/src/writer/spirv/builder.h
@@ -40,15 +40,18 @@
  public:
   /// Contains information for generating accessor chains
   struct AccessorInfo {
+    AccessorInfo();
+    ~AccessorInfo();
+
     /// The ID of the current chain source. The chain source may change as we
     /// evaluate the access chain. The chain source always points to the ID
     /// which we will use to evaluate the current set of accessors. This maybe
     /// the original variable, or maybe an intermediary if we had to evaulate
     /// the access chain early (in the case of a swizzle of an access chain).
-    uint32_t source_id = 0;
+    uint32_t source_id;
     /// The type of the current chain source. This type matches the deduced
     /// result_type of the current source defined above.
-    ast::type::Type* source_type = nullptr;
+    ast::type::Type* source_type;
     /// A list of access chain indices to emit. Note, we _only_ have access
     /// chain indices if the source is pointer.
     std::vector<uint32_t> access_chain_indices;
