summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-check-unsupported-inst.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-07-26 19:42:15 -0700
committerGitHub <noreply@github.com>2024-07-26 19:42:15 -0700
commit7e2bc8e06f61d554bae9bbebc1db0302eb3f1d8a (patch)
tree0f10e4a45cb81af2908da61743a4518de27748e2 /source/slang/slang-ir-check-unsupported-inst.cpp
parentc0bff66541302309ff4833e8d4ae2eba1561498a (diff)
Allow passing sized array to unsized array parameter. (#4744)
Diffstat (limited to 'source/slang/slang-ir-check-unsupported-inst.cpp')
-rw-r--r--source/slang/slang-ir-check-unsupported-inst.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/source/slang/slang-ir-check-unsupported-inst.cpp b/source/slang/slang-ir-check-unsupported-inst.cpp
index c89928af5..2a1c0e325 100644
--- a/source/slang/slang-ir-check-unsupported-inst.cpp
+++ b/source/slang/slang-ir-check-unsupported-inst.cpp
@@ -42,6 +42,23 @@ namespace Slang
}
}
+ void checkUnsupportedInst(TargetRequest* target, IRFunc* func, DiagnosticSink* sink)
+ {
+ SLANG_UNUSED(target);
+ for (auto block : func->getBlocks())
+ {
+ for (auto inst : block->getChildren())
+ {
+ switch (inst->getOp())
+ {
+ case kIROp_GetArrayLength:
+ sink->diagnose(inst, Diagnostics::attemptToQuerySizeOfUnsizedArray);
+ break;
+ }
+ }
+ }
+ }
+
void checkUnsupportedInst(TargetRequest* target, IRModule* module, DiagnosticSink* sink)
{
HashSet<IRFunc*> checkedFuncsForRecursionDetection;
@@ -62,6 +79,16 @@ namespace Slang
case kIROp_Func:
if (!isCPUTarget(target))
checkRecursion(checkedFuncsForRecursionDetection, as<IRFunc>(globalInst), sink);
+ checkUnsupportedInst(target, as<IRFunc>(globalInst), sink);
+ break;
+ case kIROp_Generic:
+ {
+ auto generic = as<IRGeneric>(globalInst);
+ auto innerFunc = as<IRFunc>(findGenericReturnVal(generic));
+ if (innerFunc)
+ checkUnsupportedInst(target, innerFunc, sink);
+ break;
+ }
default:
break;
}