summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/slang/slang-mangle.cpp18
-rw-r--r--tests/bugs/array-size-static-const-2.slang33
-rw-r--r--tests/bugs/array-size-static-const-2.slang.expected.txt5
3 files changed, 56 insertions, 0 deletions
diff --git a/source/slang/slang-mangle.cpp b/source/slang/slang-mangle.cpp
index a7d047a0c..2386e9f5a 100644
--- a/source/slang/slang-mangle.cpp
+++ b/source/slang/slang-mangle.cpp
@@ -287,6 +287,24 @@ namespace Slang
emitRaw(context, "k");
emit(context, (UInt) constantIntVal->value);
}
+ else if (auto funcCallIntVal = dynamicCast<FuncCallIntVal>(val))
+ {
+ emitRaw(context, "KC");
+ emit(context, funcCallIntVal->args.getCount());
+ emitName(context, funcCallIntVal->funcDeclRef.getName());
+ for (Index i = 0; i < funcCallIntVal->args.getCount(); i++)
+ emitVal(context, funcCallIntVal->args[i]);
+ }
+ else if (auto lookupIntVal = dynamicCast<WitnessLookupIntVal>(val))
+ {
+ emitRaw(context, "KL");
+ emitVal(context, lookupIntVal->witness);
+ emitName(context, lookupIntVal->key->getName());
+ }
+ else if (auto polynomialIntVal = dynamicCast<PolynomialIntVal>(val))
+ {
+ emitRaw(context, "KX");
+ }
else
{
SLANG_UNEXPECTED("unimplemented case in mangling");
diff --git a/tests/bugs/array-size-static-const-2.slang b/tests/bugs/array-size-static-const-2.slang
new file mode 100644
index 000000000..f7aa00b97
--- /dev/null
+++ b/tests/bugs/array-size-static-const-2.slang
@@ -0,0 +1,33 @@
+// array-size-static-const-2.hlsl
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -output-using-type
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<uint> outputBuffer;
+
+interface IA
+{
+ static const int M;
+}
+struct B : IA
+{
+ static const int M = 2;
+}
+struct GenType<T : __BuiltinIntegerType, A: IA, let N : int>
+{
+ static const int HalfN = N > 1? N / A.M : 1;
+ T sum(T arr[HalfN])
+ {
+ T rs = T(0);
+ for (int i = 0; i < HalfN; i++)
+ rs += arr[i];
+ return rs;
+ }
+}
+
+[numthreads(1, 1, 1)]
+void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID)
+{
+ int arr[2] = { 1, 2 };
+ GenType<int, B, 4> obj;
+ outputBuffer[0] = obj.sum(arr);
+} \ No newline at end of file
diff --git a/tests/bugs/array-size-static-const-2.slang.expected.txt b/tests/bugs/array-size-static-const-2.slang.expected.txt
new file mode 100644
index 000000000..ae5bfa02a
--- /dev/null
+++ b/tests/bugs/array-size-static-const-2.slang.expected.txt
@@ -0,0 +1,5 @@
+type: uint32_t
+3
+0
+0
+0