[validation] validate if entry point functions return void
This CL validates following validation rule:
v-0024: Entry point functions return void
Bug: tint: 6
Change-Id: I420781008016af110cb0d3d65fc018a1301efeae
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/27120
Commit-Queue: David Neto <dneto@google.com>
Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/validator_function_test.cc b/src/validator_function_test.cc
index 9451718..8e80fee 100644
--- a/src/validator_function_test.cc
+++ b/src/validator_function_test.cc
@@ -286,7 +286,7 @@
EXPECT_TRUE(v.Validate(mod())) << v.error();
}
-TEST_F(ValidateFunctionTest, DISABLED_EntryPointFunctionNotVoid_Fail) {
+TEST_F(ValidateFunctionTest, EntryPointFunctionNotVoid_Fail) {
// entry_point vertex as "main" = vtx_main
// fn vtx_main() -> i32 { return 0; }
ast::type::I32Type i32;
@@ -301,7 +301,7 @@
func->set_body(std::move(body));
auto entry_point = std::make_unique<ast::EntryPoint>(
- ast::PipelineStage::kVertex, "main", "vtx_main");
+ Source{12, 34}, ast::PipelineStage::kVertex, "main", "vtx_main");
mod()->AddFunction(std::move(func));
mod()->AddEntryPoint(std::move(entry_point));
diff --git a/src/validator_impl.cc b/src/validator_impl.cc
index bd67899..9f36feb 100644
--- a/src/validator_impl.cc
+++ b/src/validator_impl.cc
@@ -68,6 +68,14 @@
ep_ptr->function_name() + "'");
return false;
}
+ ast::Function* func;
+ function_stack_.get(ep_ptr->function_name(), &func);
+ if (!func->return_type()->IsVoid()) {
+ set_error(ep_ptr->source(),
+ "v-0024: Entry point function must return void: '" +
+ ep_ptr->function_name() + "'");
+ return false;
+ }
}
return true;
}