diff options
| author | Yong He <yonghe@outlook.com> | 2025-06-16 20:37:27 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-16 20:37:27 -0700 |
| commit | a4345725a083651c16795d27fedd769f2d7e55ae (patch) | |
| tree | 763c27f687e25e081a87cd266ca1442f5f6624ad /tests/language-feature | |
| parent | 07f79b943c3041dd18137d72893af260b75ddcf9 (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.slang | 2 | ||||
| -rw-r--r-- | tests/language-feature/interfaces/override-default-method.slang | 40 |
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 |
