writer/spirv: Fix all tests that had unreachable AST nodes

By making nodes reachable, the resolver has now caught a whole lot of additional problems, which have been fixed in this CL.

Some of these broken tests were attempting to use private and workgroup variables as function-scope declarations.
This is not legal, and these have been moved to module-scope variables.

Bug: tint:469
Change-Id: I09c1a8e72a33d3e4df13554e8b07d0a169fcf575
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/48226
Commit-Queue: Ben Clayton <bclayton@chromium.org>
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/writer/spirv/builder_constructor_expression_test.cc b/src/writer/spirv/builder_constructor_expression_test.cc
index b198ec8..4037115 100644
--- a/src/writer/spirv/builder_constructor_expression_test.cc
+++ b/src/writer/spirv/builder_constructor_expression_test.cc
@@ -24,6 +24,7 @@
 
 TEST_F(SpvBuilderConstructorTest, Const) {
   auto* c = Expr(42.2f);
+  WrapInFunction(c);
 
   spirv::Builder& b = Build();
 
diff --git a/src/writer/spirv/builder_discard_test.cc b/src/writer/spirv/builder_discard_test.cc
index 6784893..106f87b 100644
--- a/src/writer/spirv/builder_discard_test.cc
+++ b/src/writer/spirv/builder_discard_test.cc
@@ -24,6 +24,7 @@
 
 TEST_F(BuilderTest, Discard) {
   auto* expr = create<ast::DiscardStatement>();
+  WrapInFunction(expr);
 
   spirv::Builder& b = Build();
 
diff --git a/src/writer/spirv/builder_if_test.cc b/src/writer/spirv/builder_if_test.cc
index 90215a5..4b91cee 100644
--- a/src/writer/spirv/builder_if_test.cc
+++ b/src/writer/spirv/builder_if_test.cc
@@ -27,9 +27,8 @@
   // }
   auto* cond = Expr(true);
 
-  auto* expr = create<ast::IfStatement>(
-      cond, create<ast::BlockStatement>(ast::StatementList{}),
-      ast::ElseStatementList{});
+  auto* expr =
+      create<ast::IfStatement>(cond, Block(), ast::ElseStatementList{});
   WrapInFunction(expr);
 
   spirv::Builder& b = Build();
@@ -56,7 +55,7 @@
   auto* cond = Expr(true);
 
   ast::ElseStatementList elses;
-  auto* block = create<ast::BlockStatement>(ast::StatementList{});
+  auto* block = Block();
   auto* expr = create<ast::IfStatement>(cond, block, elses);
   WrapInFunction(expr);
 
@@ -288,19 +287,14 @@
   //   }
   // }
 
-  auto* if_body = create<ast::BlockStatement>(ast::StatementList{
-      create<ast::BreakStatement>(),
-  });
+  auto* if_body = Block(create<ast::BreakStatement>());
 
   auto* if_stmt =
       create<ast::IfStatement>(Expr(true), if_body, ast::ElseStatementList{});
 
-  auto* loop_body = create<ast::BlockStatement>(ast::StatementList{
-      if_stmt,
-  });
+  auto* loop_body = Block(if_stmt);
 
-  auto* expr = create<ast::LoopStatement>(
-      loop_body, create<ast::BlockStatement>(ast::StatementList{}));
+  auto* expr = create<ast::LoopStatement>(loop_body, Block());
   WrapInFunction(expr);
 
   spirv::Builder& b = Build();
@@ -336,20 +330,15 @@
   //     break;
   //   }
   // }
-  auto* else_body = create<ast::BlockStatement>(ast::StatementList{
-      create<ast::BreakStatement>(),
-  });
+  auto* else_body = Block(create<ast::BreakStatement>());
 
   auto* if_stmt = create<ast::IfStatement>(
-      Expr(true), create<ast::BlockStatement>(ast::StatementList{}),
+      Expr(true), Block(),
       ast::ElseStatementList{create<ast::ElseStatement>(nullptr, else_body)});
 
-  auto* loop_body = create<ast::BlockStatement>(ast::StatementList{
-      if_stmt,
-  });
+  auto* loop_body = Block(if_stmt);
 
-  auto* expr = create<ast::LoopStatement>(
-      loop_body, create<ast::BlockStatement>(ast::StatementList{}));
+  auto* expr = create<ast::LoopStatement>(loop_body, Block());
   WrapInFunction(expr);
 
   spirv::Builder& b = Build();
@@ -386,19 +375,14 @@
   //     continue;
   //   }
   // }
-  auto* if_body = create<ast::BlockStatement>(ast::StatementList{
-      create<ast::ContinueStatement>(),
-  });
+  auto* if_body = Block(create<ast::ContinueStatement>());
 
   auto* if_stmt =
       create<ast::IfStatement>(Expr(true), if_body, ast::ElseStatementList{});
 
-  auto* loop_body = create<ast::BlockStatement>(ast::StatementList{
-      if_stmt,
-  });
+  auto* loop_body = Block(if_stmt);
 
-  auto* expr = create<ast::LoopStatement>(
-      loop_body, create<ast::BlockStatement>(ast::StatementList{}));
+  auto* expr = create<ast::LoopStatement>(loop_body, Block());
   WrapInFunction(expr);
 
   spirv::Builder& b = Build();
@@ -434,20 +418,15 @@
   //     continue;
   //   }
   // }
-  auto* else_body = create<ast::BlockStatement>(ast::StatementList{
-      create<ast::ContinueStatement>(),
-  });
+  auto* else_body = Block(create<ast::ContinueStatement>());
 
   auto* if_stmt = create<ast::IfStatement>(
-      Expr(true), create<ast::BlockStatement>(ast::StatementList{}),
+      Expr(true), Block(),
       ast::ElseStatementList{create<ast::ElseStatement>(nullptr, else_body)});
 
-  auto* loop_body = create<ast::BlockStatement>(ast::StatementList{
-      if_stmt,
-  });
+  auto* loop_body = Block(if_stmt);
 
-  auto* expr = create<ast::LoopStatement>(
-      loop_body, create<ast::BlockStatement>(ast::StatementList{}));
+  auto* expr = create<ast::LoopStatement>(loop_body, Block());
   WrapInFunction(expr);
 
   spirv::Builder& b = Build();
@@ -482,9 +461,7 @@
   // if (true) {
   //   return;
   // }
-  auto* if_body = create<ast::BlockStatement>(ast::StatementList{
-      create<ast::ReturnStatement>(),
-  });
+  auto* if_body = Block(create<ast::ReturnStatement>());
 
   auto* expr =
       create<ast::IfStatement>(Expr(true), if_body, ast::ElseStatementList{});
@@ -540,9 +517,8 @@
 
   auto* var = Global("a", ty.bool_(), ast::StorageClass::kFunction);
 
-  auto* expr = create<ast::IfStatement>(
-      Expr("a"), create<ast::BlockStatement>(ast::StatementList{}),
-      ast::ElseStatementList{});
+  auto* expr =
+      create<ast::IfStatement>(Expr("a"), Block(), ast::ElseStatementList{});
   WrapInFunction(expr);
 
   spirv::Builder& b = Build();
diff --git a/src/writer/spirv/builder_literal_test.cc b/src/writer/spirv/builder_literal_test.cc
index dfe2047..74f17ed 100644
--- a/src/writer/spirv/builder_literal_test.cc
+++ b/src/writer/spirv/builder_literal_test.cc
@@ -23,6 +23,7 @@
 
 TEST_F(BuilderTest, Literal_Bool_True) {
   auto* b_true = create<ast::BoolLiteral>(ty.bool_(), true);
+  WrapInFunction(b_true);
 
   spirv::Builder& b = Build();
 
@@ -37,6 +38,7 @@
 
 TEST_F(BuilderTest, Literal_Bool_False) {
   auto* b_false = create<ast::BoolLiteral>(ty.bool_(), false);
+  WrapInFunction(b_false);
 
   spirv::Builder& b = Build();
 
@@ -52,6 +54,7 @@
 TEST_F(BuilderTest, Literal_Bool_Dedup) {
   auto* b_true = create<ast::BoolLiteral>(ty.bool_(), true);
   auto* b_false = create<ast::BoolLiteral>(ty.bool_(), false);
+  WrapInFunction(b_true, b_false);
 
   spirv::Builder& b = Build();
 
@@ -70,7 +73,7 @@
 
 TEST_F(BuilderTest, Literal_I32) {
   auto* i = create<ast::SintLiteral>(ty.i32(), -23);
-
+  WrapInFunction(i);
   spirv::Builder& b = Build();
 
   auto id = b.GenerateLiteralIfNeeded(nullptr, i);
@@ -85,6 +88,7 @@
 TEST_F(BuilderTest, Literal_I32_Dedup) {
   auto* i1 = create<ast::SintLiteral>(ty.i32(), -23);
   auto* i2 = create<ast::SintLiteral>(ty.i32(), -23);
+  WrapInFunction(i1, i2);
 
   spirv::Builder& b = Build();
 
@@ -99,6 +103,7 @@
 
 TEST_F(BuilderTest, Literal_U32) {
   auto* i = create<ast::UintLiteral>(ty.u32(), 23);
+  WrapInFunction(i);
 
   spirv::Builder& b = Build();
 
@@ -114,6 +119,7 @@
 TEST_F(BuilderTest, Literal_U32_Dedup) {
   auto* i1 = create<ast::UintLiteral>(ty.u32(), 23);
   auto* i2 = create<ast::UintLiteral>(ty.u32(), 23);
+  WrapInFunction(i1, i2);
 
   spirv::Builder& b = Build();
 
@@ -128,6 +134,7 @@
 
 TEST_F(BuilderTest, Literal_F32) {
   auto* i = create<ast::FloatLiteral>(ty.f32(), 23.245f);
+  WrapInFunction(i);
 
   spirv::Builder& b = Build();
 
@@ -143,6 +150,7 @@
 TEST_F(BuilderTest, Literal_F32_Dedup) {
   auto* i1 = create<ast::FloatLiteral>(ty.f32(), 23.245f);
   auto* i2 = create<ast::FloatLiteral>(ty.f32(), 23.245f);
+  WrapInFunction(i1, i2);
 
   spirv::Builder& b = Build();
 
diff --git a/src/writer/spirv/builder_return_test.cc b/src/writer/spirv/builder_return_test.cc
index 3169a2f..a640967 100644
--- a/src/writer/spirv/builder_return_test.cc
+++ b/src/writer/spirv/builder_return_test.cc
@@ -23,7 +23,8 @@
 using BuilderTest = TestHelper;
 
 TEST_F(BuilderTest, Return) {
-  auto* ret = create<ast::ReturnStatement>();
+  auto* ret = Return();
+  WrapInFunction(ret);
 
   spirv::Builder& b = Build();
 
@@ -38,7 +39,7 @@
 TEST_F(BuilderTest, Return_WithValue) {
   auto* val = vec3<f32>(1.f, 1.f, 3.f);
 
-  auto* ret = create<ast::ReturnStatement>(val);
+  auto* ret = Return(val);
   Func("test", {}, ty.vec3<f32>(), {ret}, {});
 
   spirv::Builder& b = Build();
@@ -61,7 +62,7 @@
 TEST_F(BuilderTest, Return_WithValue_GeneratesLoad) {
   auto* var = Global("param", ty.f32(), ast::StorageClass::kFunction);
 
-  auto* ret = create<ast::ReturnStatement>(Expr("param"));
+  auto* ret = Return(Expr("param"));
   Func("test", {}, ty.f32(), {ret}, {});
 
   spirv::Builder& b = Build();