[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