From b3b6c44cb8b8ebc413d41f9ca3833d8242f3c805 Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 21 Feb 2024 12:22:31 -0800 Subject: Fix SPIRV lowering issue. (#3608) * Fix SPIRV pointer lowering issue. Fixes #3605. * Add another pointer test. Fixes #3601. * Fixes #3600. * Fix #3595. --- tests/bugs/gh-3601.slang | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 tests/bugs/gh-3601.slang (limited to 'tests/bugs') diff --git a/tests/bugs/gh-3601.slang b/tests/bugs/gh-3601.slang new file mode 100644 index 000000000..d12b480ac --- /dev/null +++ b/tests/bugs/gh-3601.slang @@ -0,0 +1,56 @@ +//TEST:SIMPLE(filecheck=CHECK): -target spirv -emit-spirv-directly +struct TestStruct +{ + uint index; +}; + +[[vk::binding(2, 0)]] StructuredBuffer test; + +struct PP +{ + int data; + int data2; +} +struct Data +{ + int data; + PP* pNext; +}; + +void funcThatTakesPointer(PP* p) +{ + p.data = 2; +} +int* funcThatReturnsPointer(PP* p) +{ + return &p.data; +} + +// CHECK: OpEntryPoint + +[[vk::binding(0, 0)]] StructuredBuffer buffer; +[[vk::binding(1, 0)]] RWStructuredBuffer output; +[shader("compute")] +[numthreads(8, 8, 1)] +void main(int id : SV_DispatchThreadID) +{ + TestStruct * ptr = (TestStruct *)(test[0]); + output[0] = buffer[ptr.index].pNext.data; + let pData = &(buffer[0].pNext.data); + // CHECK: OpPtrAccessChain + int* pData1 = pData + 1; + *pData1 = 3; + *(int2*)pData = int2(1, 2); + pData1[-1] = 2; + buffer[0].pNext[1] = {5}; + // CHECK: OpConvertPtrToU + // CHECK: OpINotEqual + if (pData1) + { + *(funcThatReturnsPointer(buffer[0].pNext)) = 4; + } + if (pData1 > pData) + { + funcThatTakesPointer(buffer[0].pNext); + } +} \ No newline at end of file -- cgit v1.2.3