summaryrefslogtreecommitdiffstats
path: root/tests/language-feature
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2025-06-16 20:37:27 -0700
committerGitHub <noreply@github.com>2025-06-16 20:37:27 -0700
commita4345725a083651c16795d27fedd769f2d7e55ae (patch)
tree763c27f687e25e081a87cd266ca1442f5f6624ad /tests/language-feature
parent07f79b943c3041dd18137d72893af260b75ddcf9 (diff)
Require `override` keyword for overriding default interface methods. (#7458)
* Require `override` keyword for overriding default interface methods. * Update doc. * Fix test.
Diffstat (limited to 'tests/language-feature')
-rw-r--r--tests/language-feature/interfaces/default-method-generic-interface.slang2
-rw-r--r--tests/language-feature/interfaces/override-default-method.slang40
2 files changed, 41 insertions, 1 deletions
diff --git a/tests/language-feature/interfaces/default-method-generic-interface.slang b/tests/language-feature/interfaces/default-method-generic-interface.slang
index fb32b2001..f33950a82 100644
--- a/tests/language-feature/interfaces/default-method-generic-interface.slang
+++ b/tests/language-feature/interfaces/default-method-generic-interface.slang
@@ -30,7 +30,7 @@ struct Impl2 : IFoo<2>
}
// overriding default implementation.
- int getGreaterVal<int x>()
+ override int getGreaterVal<int x>()
{
return 100 + x;
}
diff --git a/tests/language-feature/interfaces/override-default-method.slang b/tests/language-feature/interfaces/override-default-method.slang
new file mode 100644
index 000000000..22ae48311
--- /dev/null
+++ b/tests/language-feature/interfaces/override-default-method.slang
@@ -0,0 +1,40 @@
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj -output-using-type
+
+// Test that a generic interface method can have a body providing default implementation.
+
+interface IFoo
+{
+ int getVal();
+ int getGreaterVal<int x>()
+ {
+ return getVal() + x;
+ }
+}
+
+struct Impl : IFoo
+{
+ int getVal()
+ {
+ return 42;
+ }
+
+ // override default implementation for getGreaterVal.
+ override int getGreaterVal<int x>()
+ {
+ return getVal() + x + 1; // Adding 1 to differentiate from the default implementation.
+ }
+}
+
+int test<T:IFoo>(T v) { return v.getGreaterVal<1>(); }
+
+//TEST_INPUT: set resultBuffer = out ubuffer(data=[0 0 0 0], stride=4)
+RWStructuredBuffer<int> resultBuffer;
+
+[numthreads(1,1,1)]
+void computeMain()
+{
+ Impl impl = {};
+ int result = test(impl);
+ resultBuffer[0] = result;
+ // CHECK: 44
+} \ No newline at end of file