From d3a5a4723e0ba0f90ac3a0df3dd841d1f0c69782 Mon Sep 17 00:00:00 2001 From: venkataram-nv Date: Wed, 28 Aug 2024 14:42:14 -0700 Subject: Ignoring construct field warnings on delegatory methods (#4911) * Ignoring construct field warnings on delegatory methods * Generalizing instruction usage type interface * Skip collection when searching for stores * Adding separate construct delegation tests * Treating differentiable functions as stores --- .../uninitialized-fields-delegated.slang | 46 ++++++++++++++++++++++ tests/diagnostics/uninitialized-fields.slang | 18 --------- 2 files changed, 46 insertions(+), 18 deletions(-) create mode 100644 tests/diagnostics/uninitialized-fields-delegated.slang (limited to 'tests') diff --git a/tests/diagnostics/uninitialized-fields-delegated.slang b/tests/diagnostics/uninitialized-fields-delegated.slang new file mode 100644 index 000000000..e3777f477 --- /dev/null +++ b/tests/diagnostics/uninitialized-fields-delegated.slang @@ -0,0 +1,46 @@ +//TEST:SIMPLE(filecheck=CHK): -target spirv + +// Delegated constructors +struct Impl +{ + float x; + + __init(float val) + { + x = val; + } + + __init() + { + float val = 2.0; + + // Shouldn't trigger a warning here + return Impl(val); + } +} + +// Calling a method from a constructor to initialize fields +struct HitInfo +{ + float3 barycentrics; + uint primitiveIndex; + + [[mutating]] void init(float2 hitBarycentrics, uint hitPrimitiveIndex) + { + barycentrics = { 1.0 - hitBarycentrics.x - hitBarycentrics.y, hitBarycentrics.x, hitBarycentrics.y }; + primitiveIndex = hitPrimitiveIndex; + } + + __init(float2 hitBarycentrics, uint hitPrimitiveIndex) + { + init(hitBarycentrics, hitPrimitiveIndex); + } + + __init(BuiltInTriangleIntersectionAttributes attr) + { + init(attr.barycentrics, PrimitiveIndex()); + } +} + +//CHK-NOT: warning 41020 +//CHK-NOT: warning 41021 diff --git a/tests/diagnostics/uninitialized-fields.slang b/tests/diagnostics/uninitialized-fields.slang index 29e065d2b..c5fa37aad 100644 --- a/tests/diagnostics/uninitialized-fields.slang +++ b/tests/diagnostics/uninitialized-fields.slang @@ -86,23 +86,5 @@ struct Pass int y = 0; } -struct Impl -{ - float x; - - __init(float val) - { - x = val; - } - - __init() - { - float val = 2.0; - - // Shouldn't trigger a warning here - return Impl(val); - } -} - //CHK-NOT: warning 41020 //CHK-NOT: warning 41021 -- cgit v1.2.3