[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;
 }