diff options
| -rw-r--r-- | source/slang/slang-ir-inst-defs.h | 2 | ||||
| -rw-r--r-- | source/slang/slang-ir-use-uninitialized-values.cpp | 3 | ||||
| -rw-r--r-- | tests/diagnostics/uninitialized-globals.slang | 41 |
3 files changed, 40 insertions, 6 deletions
diff --git a/source/slang/slang-ir-inst-defs.h b/source/slang/slang-ir-inst-defs.h index 9899feba1..74cb534f9 100644 --- a/source/slang/slang-ir-inst-defs.h +++ b/source/slang/slang-ir-inst-defs.h @@ -903,7 +903,7 @@ INST_RANGE(BindingQuery, GetRegisterIndex, GetRegisterSpace) INST(AlwaysFoldIntoUseSiteDecoration, alwaysFold, 0, 0) INST(GlobalOutputDecoration, output, 0, 0) - INST(GlobalInputDecoration, output, 0, 0) + INST(GlobalInputDecoration, input, 0, 0) INST(GLSLLocationDecoration, glslLocation, 1, 0) INST(GLSLOffsetDecoration, glslOffset, 1, 0) INST(PayloadDecoration, payload, 0, 0) diff --git a/source/slang/slang-ir-use-uninitialized-values.cpp b/source/slang/slang-ir-use-uninitialized-values.cpp index e92eb7d7a..9f2cbe7a7 100644 --- a/source/slang/slang-ir-use-uninitialized-values.cpp +++ b/source/slang/slang-ir-use-uninitialized-values.cpp @@ -552,6 +552,9 @@ namespace Slang if (variable->findDecoration<IRSemanticDecoration>()) return; + if (variable->findDecoration<IRGlobalInputDecoration>()) + return; + // Check for initialization blocks for (auto inst : variable->getChildren()) { diff --git a/tests/diagnostics/uninitialized-globals.slang b/tests/diagnostics/uninitialized-globals.slang index 314881a80..635db1e29 100644 --- a/tests/diagnostics/uninitialized-globals.slang +++ b/tests/diagnostics/uninitialized-globals.slang @@ -1,8 +1,8 @@ -//TEST:SIMPLE(filecheck=CHK): -target spirv +//TEST:SIMPLE(filecheck=CHK): -allow-glsl -target spirv // Using groupshared variables groupshared float4 gsConstexpr = float4(1.0f); -groupshared float4 gsUndefined; +groupshared float4 gsUninitialized; // OK float use_constexpr_initialized_gs() @@ -12,8 +12,8 @@ float use_constexpr_initialized_gs() float use_undefined_gs() { - //CHK-DAG: warning 41017: use of uninitialized global variable 'gsUndefined' - return gsUndefined.x; + //CHK-DAG: ([[# @LINE + 1]]): warning 41017: use of uninitialized global variable 'gsUninitialized' + return gsUninitialized.x; } // Using static variables @@ -35,7 +35,7 @@ void write_to_later() float use_never_written() { - //CHK-DAG: warning 41017: use of uninitialized global variable 'writtenNever' + //CHK-DAG: ([[# @LINE + 1]]): warning 41017: use of uninitialized global variable 'writtenNever' return writtenNever; } @@ -45,4 +45,35 @@ float use_later_writte() return writtenLater; } +// Varying inputs never warn +layout(location = 0) in vec4 data; + +vec4 glsl_layout_in_ok() +{ + return data; +} + +// Layout outputs should still be written to at some point +layout(location = 1) out vec4 x; + +vec4 glsl_layout_out_undefined() +{ + //CHK-DAG: ([[# @LINE + 1]]): warning 41017: use of uninitialized global variable 'x' + return x; +} + +layout(location = 2) out vec4 y; + +void glsl_layout_out_store(vec4 data) +{ + // Written to here... + y = data; +} + +vec4 glsl_layout_out_ok() +{ + // ...so read here is treated as OK + return y; +} + //CHK-NOT: warning 41017 |
