[validation] Add Disabled test for detecting recursion
This CL adds a disabled test for validating following rule:
v-0004: Recursion is not allowed
Bug: tint: 6
Change-Id: I35d51b08174ac23a4b1def9f762e80c5950a726d
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/26942
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/validator_test.cc b/src/validator_test.cc
index aaed618..853fe6e 100644
--- a/src/validator_test.cc
+++ b/src/validator_test.cc
@@ -23,6 +23,7 @@
#include "src/ast/bool_literal.h"
#include "src/ast/break_statement.h"
#include "src/ast/call_expression.h"
+#include "src/ast/call_statement.h"
#include "src/ast/case_statement.h"
#include "src/ast/cast_expression.h"
#include "src/ast/continue_statement.h"
@@ -685,10 +686,32 @@
mod()->AddFunction(std::move(func1));
EXPECT_TRUE(td()->Determine()) << td()->error();
- EXPECT_TRUE(td()->Determine()) << td()->error();
tint::ValidatorImpl v;
EXPECT_TRUE(v.Validate(mod())) << v.error();
}
+TEST_F(ValidatorTest, DISABLED_RecursionIsNotAllowed_Fail) {
+ // fn func() -> void {func(); return; }
+ ast::type::F32Type f32;
+ ast::type::VoidType void_type;
+ ast::ExpressionList call_params;
+ auto call_expr = std::make_unique<ast::CallExpression>(
+ Source{12, 34}, std::make_unique<ast::IdentifierExpression>("func"),
+ std::move(call_params));
+ ast::VariableList params0;
+ auto func0 =
+ std::make_unique<ast::Function>("func", std::move(params0), &f32);
+ auto body0 = std::make_unique<ast::BlockStatement>();
+ body0->append(std::make_unique<ast::CallStatement>(std::move(call_expr)));
+ body0->append(std::make_unique<ast::ReturnStatement>());
+ func0->set_body(std::move(body0));
+ mod()->AddFunction(std::move(func0));
+
+ EXPECT_TRUE(td()->Determine()) << td()->error();
+ tint::ValidatorImpl v;
+ EXPECT_FALSE(v.Validate(mod())) << v.error();
+ EXPECT_EQ(v.error(), "12:34: v-0004: recursion is not allowed: 'func'");
+}
+
} // namespace
} // namespace tint