diff options
| author | Julius Ikkala <julius.ikkala@gmail.com> | 2025-05-25 23:44:26 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-25 20:44:26 +0000 |
| commit | 8ecb2c70437292ef6fa34f7122df44067de6a4de (patch) | |
| tree | 56c9cc959ab5c77ca6215f5d4c45e4f5975d566d /tests/bugs | |
| parent | 0476b57faad96bee61f59f27ddd48c6cb067cfa2 (diff) | |
Fix #7232 (#7236)
Diffstat (limited to 'tests/bugs')
| -rw-r--r-- | tests/bugs/gh-7232.slang | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/bugs/gh-7232.slang b/tests/bugs/gh-7232.slang new file mode 100644 index 000000000..041d3e880 --- /dev/null +++ b/tests/bugs/gh-7232.slang @@ -0,0 +1,59 @@ +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -vk +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -dx12 +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -cpu + +// CHECK: 5 +// CHECK-NEXT: 5 +// CHECK-NEXT: 5 +// CHECK-NEXT: 1 +// CHECK-NEXT: 1 +// CHECK-NEXT: 1 +// CHECK-NEXT: 1 + +//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<int> outputBuffer; + +interface IFoo +{ + property uint value { get; } +}; + +struct Foo : IFoo +{ + property uint value + { + get { return _value; } + } + + uint _value; +}; + +void issue1(Foo foo) +{ + int array[10] = {0,1,2,3,4,5,6,7,8,9}; + outputBuffer[0] = array[foo._value]; // ok + outputBuffer[1] = array[uint(foo.value)]; // ok + outputBuffer[2] = array[foo.value]; // Used to cause error, 'value' was not resolved before checking that it's an integer +} + +void issue2(Foo foo, uint arg) +{ + bool b1 = foo._value < arg; // ok + bool b2 = uint(foo.value) < arg; // ok + bool b3 = foo.value < arg; // Used to crash the compiler + bool b4 = foo.value > arg; // ok + if (b1) outputBuffer[3] = 1; + if (b2) outputBuffer[4] = 1; + if (b3) outputBuffer[5] = 1; + if (!b4) outputBuffer[6] = 1; +} + +[numthreads(1, 1, 1)] +void computeMain(int3 dispatchThreadID: SV_DispatchThreadID) +{ + Foo foo; + foo._value = 5; + issue1(foo); + foo._value = 42; + issue2(foo, 43); +} |
