summaryrefslogtreecommitdiff
path: root/tests/bugs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/bugs')
-rw-r--r--tests/bugs/generic-member-method.slang52
-rw-r--r--tests/bugs/generic-member-method.slang.expected.txt4
2 files changed, 56 insertions, 0 deletions
diff --git a/tests/bugs/generic-member-method.slang b/tests/bugs/generic-member-method.slang
new file mode 100644
index 000000000..06e80cd0c
--- /dev/null
+++ b/tests/bugs/generic-member-method.slang
@@ -0,0 +1,52 @@
+// Test calling a generic member method with partially specified generic arguments.
+
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj
+//TEST(compute,vulkan):COMPARE_COMPUTE_EX:-vk -slang -compute -shaderobj
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer
+RWStructuredBuffer<int> outputBuffer;
+
+interface INothing
+{
+ int getVal();
+}
+
+struct Nothing : INothing
+{
+ int getVal() { return 0; }
+}
+
+interface IImpl
+{
+ int computeAdd<TNothing : INothing, TNothing2 : INothing>(TNothing nothingArg, TNothing2 nothing, int otherVal);
+}
+
+struct Impl : IImpl
+{
+ int thisVal;
+ __init()
+ {
+ thisVal = 1;
+ }
+ // Introduce two generic parameters so we can construct a partially specialized invoke.
+ int computeAdd<TNothing : INothing, TNothing2 : INothing>(TNothing nothingArg, TNothing2 nothing, int otherVal)
+ {
+ return thisVal + otherVal + nothingArg.getVal();
+ }
+ int doThing(int otherVal)
+ {
+ Nothing nothing;
+ // Partially specialize the invoke.
+ // This will result in construction of `PartiallySpecializedInvokeExpr`.
+ // We need to make sure the baseExpr is persisted during this step.
+ return computeAdd<Nothing>(nothing, nothing, otherVal);
+ }
+}
+
+[numthreads(1, 1, 1)]
+void computeMain(int3 dispatchThreadID: SV_DispatchThreadID)
+{
+ Impl impl;
+ Nothing nothing;
+ outputBuffer[0] = impl.doThing(2);
+} \ No newline at end of file
diff --git a/tests/bugs/generic-member-method.slang.expected.txt b/tests/bugs/generic-member-method.slang.expected.txt
new file mode 100644
index 000000000..8a673e262
--- /dev/null
+++ b/tests/bugs/generic-member-method.slang.expected.txt
@@ -0,0 +1,4 @@
+3
+0
+0
+0