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();