1#include "taichi/ir/ir.h"
2#include "taichi/ir/analysis.h"
3#include "taichi/ir/visitors.h"
4
5namespace taichi::lang {
6
7class FieldsRegisteredChecker : public BasicStmtVisitor {
8 public:
9 using BasicStmtVisitor::visit;
10
11 FieldsRegisteredChecker() {
12 allow_undefined_visitor = true;
13 invoke_default_visitor = true;
14 }
15
16 void preprocess_container_stmt(Stmt *stmt) override {
17 TI_ASSERT(stmt->fields_registered);
18 }
19
20 void visit(Stmt *stmt) override {
21 TI_ASSERT(stmt->fields_registered);
22 }
23
24 static void run(IRNode *root) {
25 FieldsRegisteredChecker checker;
26 root->accept(&checker);
27 }
28};
29
30namespace irpass::analysis {
31void check_fields_registered(IRNode *root) {
32 return FieldsRegisteredChecker::run(root);
33}
34} // namespace irpass::analysis
35
36} // namespace taichi::lang
37