From b411c05bc074f53037e32b23583b85adcfbf81fc Mon Sep 17 00:00:00 2001 From: venkataram-nv Date: Fri, 16 Aug 2024 15:18:17 -0700 Subject: Include inout cast operation as an aliasing instruction (#4859) Previously, the warnings were: ``` environment.slang(22): warning 41022: inout parameter 'seed' is never written to public float3 environment_sample(StructuredBuffer sample_buffer, inout int seed) ^~~~~~~~~~~~~~~~~~ hit.slang(5): warning 41022: inout parameter 'seed' is never written to float3 sample_lights(inout uint seed) ^~~~~~~~~~~~~ ``` With this commit they should not be emitted. --- source/slang/slang-ir-use-uninitialized-values.cpp | 1 + tests/diagnostics/inout-never-written.slang | 28 +++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/source/slang/slang-ir-use-uninitialized-values.cpp b/source/slang/slang-ir-use-uninitialized-values.cpp index b8dfcc33c..8b940d30d 100644 --- a/source/slang/slang-ir-use-uninitialized-values.cpp +++ b/source/slang/slang-ir-use-uninitialized-values.cpp @@ -110,6 +110,7 @@ namespace Slang case kIROp_FieldAddress: case kIROp_GetElement: case kIROp_GetElementPtr: + case kIROp_InOutImplicitCast: return true; default: break; diff --git a/tests/diagnostics/inout-never-written.slang b/tests/diagnostics/inout-never-written.slang index 0bc59ecf3..f4d4bce7e 100644 --- a/tests/diagnostics/inout-never-written.slang +++ b/tests/diagnostics/inout-never-written.slang @@ -44,5 +44,31 @@ struct B [mutating] int next() { return state; } }; +// Sometimes an inOutImplicitCast is done, +// this needs to be tracked as an alias; +// none of the following functions should +// generate warnings +uint lcg(inout uint prev) +{ + const uint LCG_A = 1664525u; + const uint LCG_C = 1013904223u; + prev = (LCG_A * prev + LCG_C); + return prev & 0x00FFFFFF; +} + +float rnd(inout uint prev) +{ + return ((float) lcg(prev) / (float) 0x01000000); +} + +float3 sample(inout int seed) +{ + float3 xi; + xi.x = rnd(seed); + xi.y = rnd(seed); + xi.z = rnd(seed); + return xi.z; +} + //CHK-NOT: warning 41022 -//CHK-NOT: warning 41023 \ No newline at end of file +//CHK-NOT: warning 41023 -- cgit v1.2.3