From 2bfde345291a6f7b07865abbd0a48ec5bf4a4b61 Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 18 Mar 2024 17:59:08 -0700 Subject: Check cyclic types after specialization. (#3791) --- source/slang/slang-emit.cpp | 2 ++ tests/bugs/cyclic-type-2.slang | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 tests/bugs/cyclic-type-2.slang diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp index 649858e51..70dddb4f6 100644 --- a/source/slang/slang-emit.cpp +++ b/source/slang/slang-emit.cpp @@ -14,6 +14,7 @@ #include "slang-ir-composite-reg-to-mem.h" #include "slang-ir-dce.h" #include "slang-ir-diff-call.h" +#include "slang-ir-check-recursive-type.h" #include "slang-ir-autodiff.h" #include "slang-ir-defunctionalization.h" #include "slang-ir-dll-export.h" @@ -475,6 +476,7 @@ Result linkAndOptimizeIR( break; } + checkForRecursiveTypes(irModule, sink); if (sink->getErrorCount() != 0) return SLANG_FAIL; diff --git a/tests/bugs/cyclic-type-2.slang b/tests/bugs/cyclic-type-2.slang new file mode 100644 index 000000000..b7e2aa448 --- /dev/null +++ b/tests/bugs/cyclic-type-2.slang @@ -0,0 +1,24 @@ + +//TEST:SIMPLE(filecheck=CHECK):-target spirv -emit-spirv-directly + +// CHECK: error 41001: + +interface IFoo {} +struct TA : IFoo +{ + TB tb; +} + +struct TB +{ + TA ta[2]; +} + +struct TC : IFoo {} + +[numthreads(1,1,1)] +void main() +{ + TA ta; + ta.tb.ta[0] = ta; +} \ No newline at end of file -- cgit v1.2.3