From ecc5a39feecbf73feedf352214406c8752af798a Mon Sep 17 00:00:00 2001 From: Darren Wihandi <65404740+fairywreath@users.noreply.github.com> Date: Thu, 5 Dec 2024 20:09:40 -0500 Subject: Do recursive function checks early during IR linking (#5777) --- source/slang/slang-ir-check-recursive-type.cpp | 65 -------------------------- 1 file changed, 65 deletions(-) delete mode 100644 source/slang/slang-ir-check-recursive-type.cpp (limited to 'source/slang/slang-ir-check-recursive-type.cpp') diff --git a/source/slang/slang-ir-check-recursive-type.cpp b/source/slang/slang-ir-check-recursive-type.cpp deleted file mode 100644 index ee4541735..000000000 --- a/source/slang/slang-ir-check-recursive-type.cpp +++ /dev/null @@ -1,65 +0,0 @@ -#include "slang-ir-check-recursive-type.h" - -#include "slang-ir-util.h" - -namespace Slang -{ -bool checkTypeRecursionImpl( - HashSet& checkedTypes, - HashSet& stack, - IRInst* type, - IRInst* field, - DiagnosticSink* sink) -{ - auto visitElementType = [&](IRInst* elementType, IRInst* field) -> bool - { - if (!stack.add(elementType)) - { - sink->diagnose(field ? field : type, Diagnostics::recursiveType, type); - return false; - } - if (checkedTypes.add(elementType)) - checkTypeRecursionImpl(checkedTypes, stack, elementType, field, sink); - stack.remove(elementType); - return true; - }; - if (auto arrayType = as(type)) - { - return visitElementType(arrayType->getElementType(), field); - } - else if (auto structType = as(type)) - { - for (auto sfield : structType->getFields()) - if (!visitElementType(sfield->getFieldType(), sfield)) - return false; - } - return true; -} - -void checkTypeRecursion(HashSet& checkedTypes, IRInst* type, DiagnosticSink* sink) -{ - HashSet stack; - if (checkedTypes.add(type)) - { - stack.add(type); - checkTypeRecursionImpl(checkedTypes, stack, type, nullptr, sink); - } -} - -void checkForRecursiveTypes(IRModule* module, DiagnosticSink* sink) -{ - HashSet checkedTypes; - for (auto globalInst : module->getGlobalInsts()) - { - switch (globalInst->getOp()) - { - case kIROp_StructType: - { - checkTypeRecursion(checkedTypes, globalInst, sink); - } - break; - } - } -} - -} // namespace Slang -- cgit v1.2.3