summaryrefslogtreecommitdiffstats
path: root/tests/diagnostics
diff options
context:
space:
mode:
authorvenkataram-nv <vedavamadath@nvidia.com>2024-07-31 11:51:09 -0700
committerGitHub <noreply@github.com>2024-07-31 11:51:09 -0700
commit93a3ba812dd33b10f166f9172bd781e84d938e21 (patch)
treefd5175d41a5b16f6de97ba37dd00267219ec3e4d /tests/diagnostics
parent134f8ccc930a8da28808c2e288344c21c67a577e (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.slang53
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