diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/bugs/gh-4467.slang | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/bugs/gh-4467.slang b/tests/bugs/gh-4467.slang new file mode 100644 index 000000000..dc97b9890 --- /dev/null +++ b/tests/bugs/gh-4467.slang @@ -0,0 +1,43 @@ +//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=CHK): -d3d12 -compute -shaderobj -output-using-type +//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=CHK): -vk -compute -shaderobj -output-using-type + + +// Test that we can synthesize a [mutating] interface requirement from a nonmutating implementation, +// and the interface requirement signature contains an output interface-typed parameter. + +//TEST_INPUT: ubuffer(data=[0 0], stride=4):out,name outputBuffer +RWStructuredBuffer<int> outputBuffer; + +interface IFoo +{ + int getVal(); +}; + +interface IBar +{ + [mutating] void method(out IFoo o); +}; + +struct FooImpl : IFoo +{ + int x; + int getVal() { return x; } +} + +struct BarImpl : IBar +{ + void method(out IFoo o) + { + o = FooImpl(1); + } +}; + +[numthreads(1,1,1)] +void computeMain() +{ + BarImpl bar; + IFoo foo; + bar.method(foo); + // CHK: 1 + outputBuffer[0] = foo.getVal(); +}
\ No newline at end of file |
