[validation] checks if function used in entry point exists
This CL check validation rule v-0019: Functions used in entry points must exist. Bug: tint: 6 Change-Id: Ic4d4702cac53dcdaa1207425a6214d53cacb2442 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/27100 Commit-Queue: Sarah Mashayekhi <sarahmashay@google.com> Reviewed-by: David Neto <dneto@google.com> Reviewed-by: dan sinclair <dsinclair@chromium.org>
This commit is contained in:
parent
255cfe829f
commit
3c9fee13b9
|
@ -241,7 +241,7 @@ TEST_F(ValidateFunctionTest, RecursionIsNotAllowedExpr_Fail) {
|
||||||
EXPECT_EQ(v.error(), "12:34: v-0004: recursion is not allowed: 'func'");
|
EXPECT_EQ(v.error(), "12:34: v-0004: recursion is not allowed: 'func'");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ValidateFunctionTest, DISABLED_EntryPointFunctionMissing_Fail) {
|
TEST_F(ValidateFunctionTest, EntryPointFunctionMissing_Fail) {
|
||||||
// entry_point vertex as "main" = vtx_main
|
// entry_point vertex as "main" = vtx_main
|
||||||
// fn frag_main() -> void { return; }
|
// fn frag_main() -> void { return; }
|
||||||
ast::type::VoidType void_type;
|
ast::type::VoidType void_type;
|
||||||
|
|
|
@ -49,7 +49,26 @@ bool ValidatorImpl::Validate(const ast::Module* module) {
|
||||||
if (!ValidateFunctions(module->functions())) {
|
if (!ValidateFunctions(module->functions())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
// ValidateEntryPoints must be done after populating function_stack_
|
||||||
|
if (!ValidateEntryPoints(module->entry_points())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
function_stack_.pop_scope();
|
function_stack_.pop_scope();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ValidatorImpl::ValidateEntryPoints(const ast::EntryPointList& eps) {
|
||||||
|
for (const auto& ep : eps) {
|
||||||
|
auto* ep_ptr = ep.get();
|
||||||
|
if (!function_stack_.has(ep_ptr->function_name())) {
|
||||||
|
set_error(ep_ptr->source(),
|
||||||
|
"v-0019: Function used in entry point does not exist: '" +
|
||||||
|
ep_ptr->function_name() + "'");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include "src/ast/assignment_statement.h"
|
#include "src/ast/assignment_statement.h"
|
||||||
#include "src/ast/call_expression.h"
|
#include "src/ast/call_expression.h"
|
||||||
|
#include "src/ast/entry_point.h"
|
||||||
#include "src/ast/expression.h"
|
#include "src/ast/expression.h"
|
||||||
#include "src/ast/identifier_expression.h"
|
#include "src/ast/identifier_expression.h"
|
||||||
#include "src/ast/module.h"
|
#include "src/ast/module.h"
|
||||||
|
@ -105,6 +106,11 @@ class ValidatorImpl {
|
||||||
/// @param expr the call to validate
|
/// @param expr the call to validate
|
||||||
/// @returns true if successful
|
/// @returns true if successful
|
||||||
bool ValidateCallExpr(const ast::CallExpression* expr);
|
bool ValidateCallExpr(const ast::CallExpression* expr);
|
||||||
|
/// Validates entry points
|
||||||
|
/// this funtion must be called after populating function_stack_
|
||||||
|
/// @param eps the vector of entry points to check
|
||||||
|
/// @return true if the validation was successful
|
||||||
|
bool ValidateEntryPoints(const ast::EntryPointList& eps);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string error_;
|
std::string error_;
|
||||||
|
|
Loading…
Reference in New Issue