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>
This commit is contained in:
Ben Clayton 2021-04-19 14:26:00 +00:00 committed by Commit Bot service account
parent b696607338
commit 238de88266
5 changed files with 35 additions and 48 deletions

View File

@ -24,6 +24,7 @@ using SpvBuilderConstructorTest = TestHelper;
TEST_F(SpvBuilderConstructorTest, Const) {
auto* c = Expr(42.2f);
WrapInFunction(c);
spirv::Builder& b = Build();

View File

@ -24,6 +24,7 @@ using BuilderTest = TestHelper;
TEST_F(BuilderTest, Discard) {
auto* expr = create<ast::DiscardStatement>();
WrapInFunction(expr);
spirv::Builder& b = Build();

View File

@ -27,9 +27,8 @@ TEST_F(BuilderTest, If_Empty) {
// }
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 @@ TEST_F(BuilderTest, If_Empty_OutsideFunction_IsError) {
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 @@ TEST_F(BuilderTest, If_WithBreak) {
// }
// }
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 @@ TEST_F(BuilderTest, If_WithElseBreak) {
// 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 @@ TEST_F(BuilderTest, If_WithContinue) {
// 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 @@ TEST_F(BuilderTest, If_WithElseContinue) {
// 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 @@ TEST_F(BuilderTest, If_WithReturn) {
// 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 @@ TEST_F(BuilderTest, If_WithLoad_Bug327) {
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();

View File

@ -23,6 +23,7 @@ using BuilderTest = TestHelper;
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_True) {
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_False) {
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_Bool_Dedup) {
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) {
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_I32_Dedup) {
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) {
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_U32_Dedup) {
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) {
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();

View File

@ -23,7 +23,8 @@ namespace {
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) {
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) {
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();