From 70661b9c084fdb88ae1820cf4e8ffcdec28bb0b4 Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Mon, 12 Nov 2018 13:56:52 -0500 Subject: [PATCH 1/2] Handle potentially uninitialized result --- SPIRV/GlslangToSpv.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 632a2175..f0da8505 100755 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -7302,6 +7302,10 @@ spv::Id TGlslangToSpvTraverser::createSpvConstant(const glslang::TIntermTyped& n } else if (auto* const_union_array = &sn->getConstArray()) { int nextConst = 0; result = createSpvConstantFromConstUnionArray(sn->getType(), *const_union_array, nextConst, true); + } else { + logger->missingFunctionality("Invalid initializer for spec onstant."); + exit(1); + return spv::NoResult; } builder.addName(result, sn->getName().c_str()); return result; From 12fcaa2cc23b5653ac552b9200196671b5efcd6a Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Tue, 13 Nov 2018 09:17:44 -0500 Subject: [PATCH 2/2] Review feedback --- SPIRV/GlslangToSpv.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index f0da8505..c58013b5 100755 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -2775,7 +2775,9 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* // can still have a mapping to a SPIR-V Id. // This includes specialization constants. if (node->getQualifier().isConstant()) { - return createSpvConstant(*node); + spv::Id result = createSpvConstant(*node); + if (result != spv::NoResult) + return result; } // Now, handle actual variables @@ -7304,7 +7306,6 @@ spv::Id TGlslangToSpvTraverser::createSpvConstant(const glslang::TIntermTyped& n result = createSpvConstantFromConstUnionArray(sn->getType(), *const_union_array, nextConst, true); } else { logger->missingFunctionality("Invalid initializer for spec onstant."); - exit(1); return spv::NoResult; } builder.addName(result, sn->getName().c_str()); @@ -7314,7 +7315,6 @@ spv::Id TGlslangToSpvTraverser::createSpvConstant(const glslang::TIntermTyped& n // Neither a front-end constant node, nor a specialization constant node with constant union array or // constant sub tree as initializer. logger->missingFunctionality("Neither a front-end constant nor a spec constant."); - exit(1); return spv::NoResult; }