diff --git a/src/writer/spirv/binary_writer_test.cc b/src/writer/spirv/binary_writer_test.cc
index f3cf327..4de1aae 100644
--- a/src/writer/spirv/binary_writer_test.cc
+++ b/src/writer/spirv/binary_writer_test.cc
@@ -28,7 +28,8 @@
 using BinaryWriterTest = testing::Test;
 
 TEST_F(BinaryWriterTest, Preamble) {
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   BinaryWriter bw;
   bw.WriteHeader(5);
 
@@ -42,7 +43,8 @@
 }
 
 TEST_F(BinaryWriterTest, Float) {
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_preamble(spv::Op::OpNop, {Operand::Float(2.4f)});
   BinaryWriter bw;
   bw.WriteBuilder(b);
@@ -55,7 +57,8 @@
 }
 
 TEST_F(BinaryWriterTest, Int) {
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_preamble(spv::Op::OpNop, {Operand::Int(2)});
   BinaryWriter bw;
   bw.WriteBuilder(b);
@@ -66,7 +69,8 @@
 }
 
 TEST_F(BinaryWriterTest, String) {
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_preamble(spv::Op::OpNop, {Operand::String("my_string")});
   BinaryWriter bw;
   bw.WriteBuilder(b);
@@ -90,7 +94,8 @@
 }
 
 TEST_F(BinaryWriterTest, String_Multiple4Length) {
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_preamble(spv::Op::OpNop, {Operand::String("mystring")});
   BinaryWriter bw;
   bw.WriteBuilder(b);
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index ed435dc..19fab5b 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -82,16 +82,16 @@
 
 }  // namespace
 
-Builder::Builder() : scope_stack_({}) {}
+Builder::Builder(ast::Module* mod) : mod_(mod), scope_stack_({}) {}
 
 Builder::~Builder() = default;
 
-bool Builder::Build(const ast::Module& m) {
+bool Builder::Build() {
   push_preamble(spv::Op::OpCapability, {Operand::Int(SpvCapabilityShader)});
   push_preamble(spv::Op::OpCapability,
                 {Operand::Int(SpvCapabilityVulkanMemoryModel)});
 
-  for (const auto& imp : m.imports()) {
+  for (const auto& imp : mod_->imports()) {
     GenerateImport(imp.get());
   }
 
@@ -99,19 +99,19 @@
                 {Operand::Int(SpvAddressingModelLogical),
                  Operand::Int(SpvMemoryModelVulkanKHR)});
 
-  for (const auto& var : m.global_variables()) {
+  for (const auto& var : mod_->global_variables()) {
     if (!GenerateGlobalVariable(var.get())) {
       return false;
     }
   }
 
-  for (const auto& func : m.functions()) {
+  for (const auto& func : mod_->functions()) {
     if (!GenerateFunction(func.get())) {
       return false;
     }
   }
 
-  for (const auto& ep : m.entry_points()) {
+  for (const auto& ep : mod_->entry_points()) {
     if (!GenerateEntryPoint(ep.get())) {
       return false;
     }
diff --git a/src/writer/spirv/builder.h b/src/writer/spirv/builder.h
index f1ae870..36f53d0 100644
--- a/src/writer/spirv/builder.h
+++ b/src/writer/spirv/builder.h
@@ -38,13 +38,13 @@
 class Builder {
  public:
   /// Constructor
-  Builder();
+  /// @param mod the module to generate from
+  explicit Builder(ast::Module* mod);
   ~Builder();
 
   /// Generates the SPIR-V instructions for the given module
-  /// @param module the module to generate from
   /// @returns true if the SPIR-V was successfully built
-  bool Build(const ast::Module& module);
+  bool Build();
 
   /// @returns the error string or blank if no error was reported.
   const std::string& error() const { return error_; }
@@ -280,6 +280,7 @@
   /// automatically.
   Operand result_op();
 
+  ast::Module* mod_;
   std::string error_;
   uint32_t next_id_ = 1;
   std::vector<Instruction> preamble_;
diff --git a/src/writer/spirv/builder_assign_test.cc b/src/writer/spirv/builder_assign_test.cc
index 5c7430e..c567386 100644
--- a/src/writer/spirv/builder_assign_test.cc
+++ b/src/writer/spirv/builder_assign_test.cc
@@ -37,7 +37,8 @@
 
   ast::Variable v("var", ast::StorageClass::kOutput, &f32);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
   ASSERT_FALSE(b.has_error()) << b.error();
 
diff --git a/src/writer/spirv/builder_binary_expression_test.cc b/src/writer/spirv/builder_binary_expression_test.cc
index e356454..4d8df69 100644
--- a/src/writer/spirv/builder_binary_expression_test.cc
+++ b/src/writer/spirv/builder_binary_expression_test.cc
@@ -64,7 +64,8 @@
   TypeDeterminer td(&ctx);
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
 
   EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
@@ -107,7 +108,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
 
   EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
@@ -152,7 +154,8 @@
   TypeDeterminer td(&ctx);
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
 
   EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
@@ -195,7 +198,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
 
   EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
@@ -240,7 +244,8 @@
   TypeDeterminer td(&ctx);
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
 
   EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
@@ -284,7 +289,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
 
   EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
@@ -322,7 +328,8 @@
   TypeDeterminer td(&ctx);
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
 
   EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
@@ -367,7 +374,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
 
   EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
@@ -409,7 +417,8 @@
   TypeDeterminer td(&ctx);
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
 
   EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
@@ -454,7 +463,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
 
   EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
@@ -496,7 +506,8 @@
   TypeDeterminer td(&ctx);
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
 
   EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
@@ -541,7 +552,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
 
   EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
@@ -591,7 +603,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
 
   EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
@@ -629,7 +642,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
 
   EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
@@ -661,7 +675,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
 
@@ -698,7 +713,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
 
@@ -744,7 +760,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
 
@@ -792,7 +809,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
 
@@ -830,7 +848,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
 
diff --git a/src/writer/spirv/builder_constructor_expression_test.cc b/src/writer/spirv/builder_constructor_expression_test.cc
index 5e8f462..0bc3da1 100644
--- a/src/writer/spirv/builder_constructor_expression_test.cc
+++ b/src/writer/spirv/builder_constructor_expression_test.cc
@@ -38,7 +38,8 @@
   auto fl = std::make_unique<ast::FloatLiteral>(&f32, 42.2f);
   ast::ScalarConstructorExpression c(std::move(fl));
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_EQ(b.GenerateConstructorExpression(&c, true), 2u);
   ASSERT_FALSE(b.has_error()) << b.error();
 
@@ -61,7 +62,8 @@
 
   ast::TypeConstructorExpression t(&vec, std::move(vals));
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_EQ(b.GenerateConstructorExpression(&t, true), 5u);
   ASSERT_FALSE(b.has_error()) << b.error();
 
@@ -87,7 +89,8 @@
 
   ast::TypeConstructorExpression t(&vec, std::move(vals));
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_EQ(b.GenerateConstructorExpression(&t, true), 5u);
   EXPECT_EQ(b.GenerateConstructorExpression(&t, true), 5u);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -110,7 +113,8 @@
 
   ast::TypeConstructorExpression t(&vec, std::move(vals));
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   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 d629d26..71dcfb7 100644
--- a/src/writer/spirv/builder_entry_point_test.cc
+++ b/src/writer/spirv/builder_entry_point_test.cc
@@ -32,7 +32,8 @@
 TEST_F(BuilderTest, EntryPoint) {
   ast::EntryPoint ep(ast::PipelineStage::kFragment, "main", "frag_main");
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.set_func_name_to_id("frag_main", 2);
   ASSERT_TRUE(b.GenerateEntryPoint(&ep));
 
@@ -45,7 +46,8 @@
 TEST_F(BuilderTest, EntryPoint_WithoutName) {
   ast::EntryPoint ep(ast::PipelineStage::kCompute, "", "compute_main");
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.set_func_name_to_id("compute_main", 3);
   ASSERT_TRUE(b.GenerateEntryPoint(&ep));
 
@@ -59,7 +61,8 @@
 TEST_F(BuilderTest, EntryPoint_BadFunction) {
   ast::EntryPoint ep(ast::PipelineStage::kFragment, "main", "frag_main");
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_FALSE(b.GenerateEntryPoint(&ep));
   EXPECT_EQ(b.error(), "unable to find ID for function: frag_main");
 }
@@ -78,7 +81,8 @@
 
   ast::EntryPoint ep(params.stage, "", "main");
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.set_func_name_to_id("main", 3);
   ASSERT_TRUE(b.GenerateEntryPoint(&ep));
 
diff --git a/src/writer/spirv/builder_function_test.cc b/src/writer/spirv/builder_function_test.cc
index f250cfb..cc34a96 100644
--- a/src/writer/spirv/builder_function_test.cc
+++ b/src/writer/spirv/builder_function_test.cc
@@ -33,7 +33,8 @@
   ast::type::VoidType void_type;
   ast::Function func("a_func", {}, &void_type);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   ASSERT_TRUE(b.GenerateFunction(&func));
 
   EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %3 "a_func"
@@ -56,7 +57,8 @@
   ast::type::VoidType void_type;
   ast::Function func("a_func", {}, &void_type);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   ASSERT_TRUE(b.GenerateFunction(&func));
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeVoid
 %1 = OpTypeFunction %2
@@ -68,7 +70,8 @@
   ast::Function func1("a_func", {}, &void_type);
   ast::Function func2("b_func", {}, &void_type);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   ASSERT_TRUE(b.GenerateFunction(&func1));
   ASSERT_TRUE(b.GenerateFunction(&func2));
   EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeVoid
diff --git a/src/writer/spirv/builder_function_variable_test.cc b/src/writer/spirv/builder_function_variable_test.cc
index 286470d..38e98bd 100644
--- a/src/writer/spirv/builder_function_variable_test.cc
+++ b/src/writer/spirv/builder_function_variable_test.cc
@@ -44,7 +44,8 @@
   ast::type::F32Type f32;
   ast::Variable v("var", ast::StorageClass::kNone, &f32);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   EXPECT_TRUE(b.GenerateFunctionVariable(&v)) << b.error();
   EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "var"
@@ -76,7 +77,8 @@
   ast::Variable v("var", ast::StorageClass::kOutput, &f32);
   v.set_constructor(std::move(init));
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   EXPECT_TRUE(b.GenerateFunctionVariable(&v)) << b.error();
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -120,7 +122,8 @@
   ast::Variable v("var", ast::StorageClass::kOutput, &f32);
   v.set_constructor(std::move(init));
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   EXPECT_TRUE(b.GenerateFunctionVariable(&v)) << b.error();
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -162,7 +165,8 @@
   v.set_constructor(std::move(init));
   v.set_is_const(true);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_TRUE(b.GenerateFunctionVariable(&v)) << b.error();
   ASSERT_FALSE(b.has_error()) << b.error();
 
diff --git a/src/writer/spirv/builder_global_variable_test.cc b/src/writer/spirv/builder_global_variable_test.cc
index 4591925..aad5670 100644
--- a/src/writer/spirv/builder_global_variable_test.cc
+++ b/src/writer/spirv/builder_global_variable_test.cc
@@ -43,7 +43,8 @@
   ast::type::F32Type f32;
   ast::Variable v("var", ast::StorageClass::kNone, &f32);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
   EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "var"
 )");
@@ -57,7 +58,8 @@
   ast::type::F32Type f32;
   ast::Variable v("var", ast::StorageClass::kOutput, &f32);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
   EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "var"
 )");
@@ -85,7 +87,8 @@
   ast::Variable v("var", ast::StorageClass::kOutput, &f32);
   v.set_constructor(std::move(init));
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
   ASSERT_FALSE(b.has_error()) << b.error();
 
@@ -120,7 +123,8 @@
   v.set_constructor(std::move(init));
   v.set_is_const(true);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
   ASSERT_FALSE(b.has_error()) << b.error();
 
@@ -142,7 +146,8 @@
   ast::DecoratedVariable dv(std::move(v));
   dv.set_decorations(std::move(decos));
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_TRUE(b.GenerateGlobalVariable(&dv)) << b.error();
   EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "var"
 OpDecorate %1 Location 5
@@ -164,7 +169,8 @@
   ast::DecoratedVariable dv(std::move(v));
   dv.set_decorations(std::move(decos));
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_TRUE(b.GenerateGlobalVariable(&dv)) << b.error();
   EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "var"
 OpDecorate %1 Binding 2
@@ -187,7 +193,8 @@
   ast::DecoratedVariable dv(std::move(v));
   dv.set_decorations(std::move(decos));
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_TRUE(b.GenerateGlobalVariable(&dv)) << b.error();
   EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "var"
 OpDecorate %1 BuiltIn Position
@@ -210,7 +217,8 @@
 TEST_P(BuiltinDataTest, Convert) {
   auto params = GetParam();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_EQ(b.ConvertBuiltin(params.builtin), params.result);
 }
 INSTANTIATE_TEST_SUITE_P(
diff --git a/src/writer/spirv/builder_ident_expression_test.cc b/src/writer/spirv/builder_ident_expression_test.cc
index 785aef5..81f3330 100644
--- a/src/writer/spirv/builder_ident_expression_test.cc
+++ b/src/writer/spirv/builder_ident_expression_test.cc
@@ -56,7 +56,8 @@
   v.set_constructor(std::move(init));
   v.set_is_const(true);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
   ASSERT_FALSE(b.has_error()) << b.error();
 
@@ -75,7 +76,8 @@
   ast::type::F32Type f32;
   ast::Variable v("var", ast::StorageClass::kOutput, &f32);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
   EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "var"
 )");
@@ -107,7 +109,8 @@
   v.set_constructor(std::move(init));
   v.set_is_const(true);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_TRUE(b.GenerateFunctionVariable(&v)) << b.error();
   ASSERT_FALSE(b.has_error()) << b.error();
 
@@ -126,7 +129,8 @@
   ast::type::F32Type f32;
   ast::Variable v("var", ast::StorageClass::kNone, &f32);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   EXPECT_TRUE(b.GenerateFunctionVariable(&v)) << b.error();
   EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "var"
@@ -161,7 +165,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(&var)) << b.error();
 
@@ -198,7 +203,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(&var)) << b.error();
 
diff --git a/src/writer/spirv/builder_if_test.cc b/src/writer/spirv/builder_if_test.cc
index e7f8bfb..bbb2ff7 100644
--- a/src/writer/spirv/builder_if_test.cc
+++ b/src/writer/spirv/builder_if_test.cc
@@ -50,7 +50,8 @@
   TypeDeterminer td(&ctx);
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
 
   EXPECT_TRUE(b.GenerateIfStatement(&expr)) << b.error();
@@ -93,7 +94,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
 
@@ -155,7 +157,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
 
@@ -224,7 +227,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
 
@@ -317,7 +321,8 @@
 
   ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
 
diff --git a/src/writer/spirv/builder_literal_test.cc b/src/writer/spirv/builder_literal_test.cc
index d87e9b1..a2307ff 100644
--- a/src/writer/spirv/builder_literal_test.cc
+++ b/src/writer/spirv/builder_literal_test.cc
@@ -36,7 +36,8 @@
   ast::type::BoolType bool_type;
   ast::BoolLiteral b_true(&bool_type, true);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateLiteralIfNeeded(&b_true);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(2u, id);
@@ -50,7 +51,8 @@
   ast::type::BoolType bool_type;
   ast::BoolLiteral b_false(&bool_type, false);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateLiteralIfNeeded(&b_false);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(2u, id);
@@ -65,7 +67,8 @@
   ast::BoolLiteral b_true(&bool_type, true);
   ast::BoolLiteral b_false(&bool_type, false);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   ASSERT_NE(b.GenerateLiteralIfNeeded(&b_true), 0u);
   ASSERT_FALSE(b.has_error()) << b.error();
   ASSERT_NE(b.GenerateLiteralIfNeeded(&b_false), 0u);
@@ -83,7 +86,8 @@
   ast::type::I32Type i32;
   ast::IntLiteral i(&i32, -23);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateLiteralIfNeeded(&i);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(2u, id);
@@ -98,7 +102,8 @@
   ast::IntLiteral i1(&i32, -23);
   ast::IntLiteral i2(&i32, -23);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   ASSERT_NE(b.GenerateLiteralIfNeeded(&i1), 0u);
   ASSERT_NE(b.GenerateLiteralIfNeeded(&i2), 0u);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -112,7 +117,8 @@
   ast::type::U32Type u32;
   ast::UintLiteral i(&u32, 23);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateLiteralIfNeeded(&i);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(2u, id);
@@ -127,7 +133,8 @@
   ast::UintLiteral i1(&u32, 23);
   ast::UintLiteral i2(&u32, 23);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   ASSERT_NE(b.GenerateLiteralIfNeeded(&i1), 0u);
   ASSERT_NE(b.GenerateLiteralIfNeeded(&i2), 0u);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -141,7 +148,8 @@
   ast::type::F32Type f32;
   ast::FloatLiteral i(&f32, 23.245f);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateLiteralIfNeeded(&i);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(2u, id);
@@ -156,7 +164,8 @@
   ast::FloatLiteral i1(&f32, 23.245f);
   ast::FloatLiteral i2(&f32, 23.245f);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   ASSERT_NE(b.GenerateLiteralIfNeeded(&i1), 0u);
   ASSERT_NE(b.GenerateLiteralIfNeeded(&i2), 0u);
   ASSERT_FALSE(b.has_error()) << b.error();
diff --git a/src/writer/spirv/builder_return_test.cc b/src/writer/spirv/builder_return_test.cc
index 91c0f56..e6ab54c 100644
--- a/src/writer/spirv/builder_return_test.cc
+++ b/src/writer/spirv/builder_return_test.cc
@@ -34,7 +34,8 @@
 TEST_F(BuilderTest, Return) {
   ast::ReturnStatement ret;
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   EXPECT_TRUE(b.GenerateReturnStatement(&ret));
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -60,7 +61,8 @@
 
   ast::ReturnStatement ret(std::move(val));
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   b.push_function(Function{});
   EXPECT_TRUE(b.GenerateReturnStatement(&ret));
   ASSERT_FALSE(b.has_error()) << b.error();
diff --git a/src/writer/spirv/builder_test.cc b/src/writer/spirv/builder_test.cc
index 6360d72..c74fc55 100644
--- a/src/writer/spirv/builder_test.cc
+++ b/src/writer/spirv/builder_test.cc
@@ -34,8 +34,8 @@
   ast::Module m;
   m.AddImport(std::make_unique<ast::Import>("GLSL.std.450", "glsl"));
 
-  Builder b;
-  ASSERT_TRUE(b.Build(m));
+  Builder b(&m);
+  ASSERT_TRUE(b.Build());
   ASSERT_EQ(b.preamble().size(), 4u);
 
   EXPECT_EQ(DumpBuilder(b), R"(OpCapability Shader
@@ -47,8 +47,8 @@
 
 TEST_F(BuilderTest, InsertsPreambleWithoutImport) {
   ast::Module m;
-  Builder b;
-  ASSERT_TRUE(b.Build(m));
+  Builder b(&m);
+  ASSERT_TRUE(b.Build());
   EXPECT_EQ(DumpBuilder(b), R"(OpCapability Shader
 OpCapability VulkanMemoryModel
 OpMemoryModel Logical Vulkan
@@ -56,7 +56,8 @@
 }
 
 TEST_F(BuilderTest, TracksIdBounds) {
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
 
   for (size_t i = 0; i < 5; i++) {
     EXPECT_EQ(b.next_id(), i + 1);
diff --git a/src/writer/spirv/builder_type_test.cc b/src/writer/spirv/builder_type_test.cc
index 1e2c79b..544ec02 100644
--- a/src/writer/spirv/builder_type_test.cc
+++ b/src/writer/spirv/builder_type_test.cc
@@ -43,7 +43,8 @@
   ast::type::F32Type f32;
   ast::type::AliasType alias_type("my_type", &f32);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateTypeIfNeeded(&alias_type);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(id, 1u);
@@ -58,7 +59,8 @@
   ast::type::F32Type f32;
   ast::type::AliasType alias_type("my_type", &f32);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&alias_type), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2u);
@@ -73,7 +75,8 @@
   ast::type::I32Type i32;
   ast::type::ArrayType ary(&i32);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateTypeIfNeeded(&ary);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(1u, id);
@@ -87,7 +90,8 @@
   ast::type::I32Type i32;
   ast::type::ArrayType ary(&i32);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -101,7 +105,8 @@
   ast::type::I32Type i32;
   ast::type::ArrayType ary(&i32, 4);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateTypeIfNeeded(&ary);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(1u, id);
@@ -117,7 +122,8 @@
   ast::type::I32Type i32;
   ast::type::ArrayType ary(&i32, 4);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
@@ -132,7 +138,8 @@
 TEST_F(BuilderTest_Type, GenerateBool) {
   ast::type::BoolType bool_type;
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateTypeIfNeeded(&bool_type);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(id, 1u);
@@ -146,7 +153,8 @@
   ast::type::I32Type i32;
   ast::type::BoolType bool_type;
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&bool_type), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2u);
@@ -158,7 +166,8 @@
 TEST_F(BuilderTest_Type, GenerateF32) {
   ast::type::F32Type f32;
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateTypeIfNeeded(&f32);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(id, 1u);
@@ -172,7 +181,8 @@
   ast::type::I32Type i32;
   ast::type::F32Type f32;
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&f32), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2u);
@@ -184,7 +194,8 @@
 TEST_F(BuilderTest_Type, GenerateI32) {
   ast::type::I32Type i32;
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateTypeIfNeeded(&i32);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(id, 1u);
@@ -198,7 +209,8 @@
   ast::type::I32Type i32;
   ast::type::F32Type f32;
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&f32), 2u);
@@ -211,7 +223,8 @@
   ast::type::F32Type f32;
   ast::type::MatrixType mat_type(&f32, 3, 2);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateTypeIfNeeded(&mat_type);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(id, 1u);
@@ -227,7 +240,8 @@
   ast::type::I32Type i32;
   ast::type::MatrixType mat_type(&i32, 3, 4);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&mat_type), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 3u);
@@ -240,7 +254,8 @@
   ast::type::I32Type i32;
   ast::type::PointerType ptr(&i32, ast::StorageClass::kOutput);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateTypeIfNeeded(&ptr);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(1u, id);
@@ -254,7 +269,8 @@
   ast::type::I32Type i32;
   ast::type::PointerType ptr(&i32, ast::StorageClass::kOutput);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ptr), 1u);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&ptr), 1u);
 }
@@ -263,7 +279,8 @@
   auto s = std::make_unique<ast::Struct>();
   ast::type::StructType s_type(std::move(s));
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateTypeIfNeeded(&s_type);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(id, 1u);
@@ -287,7 +304,8 @@
   ast::type::StructType s_type(std::move(s));
   s_type.set_name("my_struct");
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateTypeIfNeeded(&s_type);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(id, 1u);
@@ -313,7 +331,8 @@
   ast::type::StructType s_type(std::move(s));
   s_type.set_name("my_struct");
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateTypeIfNeeded(&s_type);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(id, 1u);
@@ -346,7 +365,8 @@
                                          std::move(members));
   ast::type::StructType s_type(std::move(s));
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateTypeIfNeeded(&s_type);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(id, 1u);
@@ -365,7 +385,8 @@
 TEST_F(BuilderTest_Type, GenerateU32) {
   ast::type::U32Type u32;
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateTypeIfNeeded(&u32);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(id, 1u);
@@ -379,7 +400,8 @@
   ast::type::U32Type u32;
   ast::type::F32Type f32;
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&u32), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&f32), 2u);
@@ -392,7 +414,8 @@
   ast::type::F32Type f32;
   ast::type::VectorType vec_type(&f32, 3);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateTypeIfNeeded(&vec_type);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(id, 1u);
@@ -407,7 +430,8 @@
   ast::type::I32Type i32;
   ast::type::VectorType vec_type(&i32, 3);
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&vec_type), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2u);
@@ -419,7 +443,8 @@
 TEST_F(BuilderTest_Type, GenerateVoid) {
   ast::type::VoidType void_type;
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   auto id = b.GenerateTypeIfNeeded(&void_type);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(id, 1u);
@@ -433,7 +458,8 @@
   ast::type::I32Type i32;
   ast::type::VoidType void_type;
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_EQ(b.GenerateTypeIfNeeded(&void_type), 1u);
   ASSERT_FALSE(b.has_error()) << b.error();
   EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2u);
@@ -454,7 +480,8 @@
 TEST_P(PtrDataTest, ConvertStorageClass) {
   auto params = GetParam();
 
-  Builder b;
+  ast::Module mod;
+  Builder b(&mod);
   EXPECT_EQ(b.ConvertStorageClass(params.ast_class), params.result);
 }
 INSTANTIATE_TEST_SUITE_P(
diff --git a/src/writer/spirv/generator.cc b/src/writer/spirv/generator.cc
index a530fd0..c3b5720 100644
--- a/src/writer/spirv/generator.cc
+++ b/src/writer/spirv/generator.cc
@@ -20,12 +20,13 @@
 namespace writer {
 namespace spirv {
 
-Generator::Generator(ast::Module module) : writer::Writer(std::move(module)) {}
+Generator::Generator(ast::Module module)
+    : writer::Writer(std::move(module)), builder_(&module_) {}
 
 Generator::~Generator() = default;
 
 bool Generator::Generate() {
-  if (!builder_.Build(module_)) {
+  if (!builder_.Build()) {
     set_error(builder_.error());
     return false;
   }
