mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-05-31 11:41:35 +00:00
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:
parent
b696607338
commit
238de88266
@ -24,6 +24,7 @@ using SpvBuilderConstructorTest = TestHelper;
|
||||
|
||||
TEST_F(SpvBuilderConstructorTest, Const) {
|
||||
auto* c = Expr(42.2f);
|
||||
WrapInFunction(c);
|
||||
|
||||
spirv::Builder& b = Build();
|
||||
|
||||
|
@ -24,6 +24,7 @@ using BuilderTest = TestHelper;
|
||||
|
||||
TEST_F(BuilderTest, Discard) {
|
||||
auto* expr = create<ast::DiscardStatement>();
|
||||
WrapInFunction(expr);
|
||||
|
||||
spirv::Builder& b = Build();
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user