diff options
| author | venkataram-nv <vedavamadath@nvidia.com> | 2024-07-31 11:51:09 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-31 11:51:09 -0700 |
| commit | 93a3ba812dd33b10f166f9172bd781e84d938e21 (patch) | |
| tree | fd5175d41a5b16f6de97ba37dd00267219ec3e4d /tests/diagnostics | |
| parent | 134f8ccc930a8da28808c2e288344c21c67a577e (diff) | |
Warnings target switch intrinsic asm (#4727)
* Proper warning generation for target switches and intrinsic asm
* Relaxing terminators
* Fix compiler warnings
* Rectified target switch reachability check
* Simplify target switch reachability check
* Refactoring variable names
* Using getBlocks
* Moving ad hoc special case to diagnostics source
* Using the LINE directive for testing
* Simplifying reliance on target switches
* Skipping IR generation for empty target switches
---------
Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'tests/diagnostics')
| -rw-r--r-- | tests/diagnostics/uninitialized-out-parameters.slang | 53 |
1 files changed, 48 insertions, 5 deletions
diff --git a/tests/diagnostics/uninitialized-out-parameters.slang b/tests/diagnostics/uninitialized-out-parameters.slang index 9714a4b76..37cfbb3d4 100644 --- a/tests/diagnostics/uninitialized-out-parameters.slang +++ b/tests/diagnostics/uninitialized-out-parameters.slang @@ -3,24 +3,24 @@ // Using before assigning float regular_undefined_use(out float3 v) { - //CHK-DAG: warning 41015: use of uninitialized out parameter 'v' + //CHK-DAG: ([[# @LINE + 1]]): warning 41015: use of uninitialized out parameter 'v' float r = v.x + 1.0; - //CHK-DAG: warning 41018: returning without initializing out parameter 'v' + //CHK-DAG: ([[# @LINE + 1]]): warning 41018: returning without initializing out parameter 'v' return r; } // Returning before assigning float returning_undefined_use(out float x) { - //CHK-DAG: warning 41018: returning without initializing out parameter 'x' + //CHK-DAG: ([[# @LINE + 1]]): warning 41018: returning without initializing out parameter 'x' return 0; } // Implicit, still returning before assigning void implicit_undefined_use(out float x) { - //CHK-DAG: warning 41018: returning without initializing out parameter 'x' + //CHK-DAG: ([[# @LINE + 1]]): warning 41018: returning without initializing out parameter 'x' } // Warn on potential return paths @@ -28,7 +28,7 @@ void control_flow_undefined(bool b, out float y) { if(b) { - //CHK-DAG: warning 41018: returning without initializing out parameter 'y' + //CHK-DAG: ([[# @LINE + 1]]): warning 41018: returning without initializing out parameter 'y' return; } y = 0; @@ -47,5 +47,48 @@ void control_flow_defined(bool b, out float y) return; } +// Specialized handling for intrinsic asm +void instrincs_defined(float x, out float exp) +{ + __intrinsic_asm "frexp"; +} + +// Specialized handling for target switches +void target_switching_undefined(float x, out float exp) +{ + //CHK-DAG: ([[# @LINE + 2]]): warning 41018: returning without initializing out parameter 'exp' + __target_switch {} +} + +void target_switching_defined(float x, out float exp) +{ + __target_switch + { + case glsl: __intrinsic_asm "frexp"; + } +} + +void target_switching_blocks(uint x, out half v) +{ + __target_switch + { + case hlsl: + if ((x & 2) == 0) + v = half(1); + else + v = half(1); + return; + case glsl: + case spirv: + { + if ((x & 2) == 0) + v = half(1); + else + v = half(1); + return; + } + } +} + //CHK-NOT: warning 41015 //CHK-NOT: warning 41018 |
