Fix NULL/False to std::string conversion errors
authorMika Väinölä <mika.vainola@siru.fi>
Fri, 17 Dec 2021 07:10:19 +0000 (09:10 +0200)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Thu, 20 Jan 2022 17:01:20 +0000 (17:01 +0000)
Newer versions of GCC reject std::string(DE_NULL). Previously this
didn't cause any errors or warnings when compiling, but should produce
an error at runtime. This change replaces invalid values with empty
string literals and adds deFatalStr for cases that potentially
relied on the string constructor throwing an exception.

Components: Framework, OpenGL, Vulkan
VK-GL-CTS issue: 3419

Change-Id: I68ec7d1447d1e96f5d7841e0684687cdd294fe39

12 files changed:
external/vulkancts/modules/vulkan/image/vktImageAtomicOperationTests.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperation.cpp
external/vulkancts/modules/vulkan/tessellation/vktTessellationUserDefinedIO.cpp
framework/delibs/debase/deDefs.h
framework/opengl/gluShaderLibrary.cpp
modules/gles2/performance/es2pShaderOptimizationTests.cpp
modules/gles3/performance/es3pShaderOptimizationTests.cpp
modules/gles31/functional/es31fGeometryShaderTests.cpp
modules/gles31/functional/es31fNegativeAdvancedBlendEquationTests.cpp
modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp
modules/gles31/functional/es31fShaderImageLoadStoreTests.cpp
modules/gles31/functional/es31fTessellationTests.cpp

index a6e624b..2159975 100644 (file)
@@ -115,7 +115,7 @@ static string getCoordStr (const ImageType          imageType,
                        return string("ivec3(" + x + "," + y + "," + z + ")");
                default:
                        DE_ASSERT(false);
-                       return DE_NULL;
+                       return "";
        }
 }
 
@@ -142,7 +142,7 @@ static string getAtomicFuncArgumentShaderStr (const AtomicOperation op,
                        return string("((" + z + "*" + toString(gridSize.x()) + " + " + x + ")*" + toString(gridSize.y()) + " + " + y + ")");
                default:
                        DE_ASSERT(false);
-                       return DE_NULL;
+                       return "";
        }
 }
 
@@ -163,7 +163,7 @@ static string getAtomicOperationCaseName (const AtomicOperation op)
                case ATOMIC_OPERATION_COMPARE_EXCHANGE: return string("compare_exchange");
                default:
                        DE_ASSERT(false);
-                       return DE_NULL;
+                       return "";
        }
 }
 
@@ -181,7 +181,7 @@ static string getAtomicOperationShaderFuncName (const AtomicOperation op)
                case ATOMIC_OPERATION_COMPARE_EXCHANGE: return string("imageAtomicCompSwap");
                default:
                        DE_ASSERT(false);
-                       return DE_NULL;
+                       return "";
        }
 }
 
index aebfbce..16c581c 100644 (file)
@@ -413,7 +413,7 @@ std::string getShaderImageType (const VkFormat format, const VkImageType imageTy
 
                default:
                        DE_FATAL("Unknown image type");
-                       return DE_NULL;
+                       return "";
        }
 }
 
index 106ee04..19cddc7 100644 (file)
@@ -148,7 +148,7 @@ std::string glslTraverseBasicTypes (const std::string&                      rootName,
        else
        {
                DE_ASSERT(false);
-               return DE_NULL;
+               return "";
        }
 }
 
@@ -311,7 +311,7 @@ std::string Variable::basicSubobjectAtIndex (const int subobjectIndex, const int
                ++currentIndex;
        }
        DE_ASSERT(false);
-       return DE_NULL;
+       return "";
 }
 
 class IOBlock : public TopLevelObject
@@ -428,7 +428,7 @@ std::string IOBlock::basicSubobjectAtIndex (const int subobjectIndex, const int
                }
        }
        DE_ASSERT(false);
-       return DE_NULL;
+       return "";
 }
 
 class UserDefinedIOTest : public TestCase
@@ -464,7 +464,7 @@ UserDefinedIOTest::UserDefinedIOTest (tcu::TestContext& testCtx, const std::stri
        const std::string       vertexAttrArrayInputSize        = m_caseDef.vertexIOArraySize == VERTEX_IO_ARRAY_SIZE_IMPLICIT                                  ? ""
                                                                                                        : m_caseDef.vertexIOArraySize == VERTEX_IO_ARRAY_SIZE_EXPLICIT_SHADER_BUILTIN   ? "gl_MaxPatchVertices"
                                                                                                        : m_caseDef.vertexIOArraySize == VERTEX_IO_ARRAY_SIZE_EXPLICIT_SPEC_MIN                 ? de::toString(MAX_TESSELLATION_PATCH_SIZE)
-                                                                                                       : DE_NULL;
+                                                                                                       : deFatalStr("Invalid vertexIOArraySize");
 
        const char* const       maybePatch                                      = isPerPatchIO ? "patch " : "";
        const std::string       outMaybePatch                           = std::string() + maybePatch + "out ";
index 314d2ad..ed3b917 100644 (file)
@@ -382,6 +382,8 @@ DE_INLINE deBool deGetTrue (void) { return DE_TRUE; }
 #      define DE_UNUSED_FUNCTION
 #endif
 
+DE_INLINE const char* deFatalStr (const char* reason) { DE_ASSERT(0); return reason; }
+
 #ifdef __cplusplus
 }
 #endif
index 293c919..347ce4c 100644 (file)
@@ -1316,7 +1316,7 @@ void ShaderParser::parsePipelineProgram (ProgramSpecification& program)
                                case TOKEN_TESSELLATION_EVALUATION:     program.sources.sources[SHADERTYPE_TESSELLATION_EVALUATION].push_back(source);  break;
                                case TOKEN_GEOMETRY:                            program.sources.sources[SHADERTYPE_GEOMETRY].push_back(source);                                 break;
                                default:
-                                       parseError(DE_FALSE);
+                                       DE_FATAL("Unreachable");
                        }
                }
                else
@@ -1418,7 +1418,7 @@ void ShaderParser::parseShaderCase (vector<tcu::TestNode*>& shaderNodeList)
                                }
 
                                default:
-                                       parseError(DE_FALSE);
+                                       DE_FATAL("Unreachable");
                        }
                }
                else if (m_curToken == TOKEN_VERSION)
index 1bef454..ade8061 100644 (file)
@@ -108,7 +108,7 @@ static inline string getShaderPrecision (CaseShaderType shaderType)
                case CASESHADERTYPE_FRAGMENT:   return "mediump";
                default:
                        DE_ASSERT(false);
-                       return DE_NULL;
+                       return "";
        }
 }
 
@@ -336,7 +336,7 @@ private:
                        case CASETYPE_DEPENDENT:        return "value = sin(value)";
                        default:
                                DE_ASSERT(false);
-                               return DE_NULL;
+                               return "";
                }
        }
 
@@ -451,7 +451,7 @@ protected:
                const string    statements              = m_caseType == CASETYPE_BUILT_IN_FUNCTIONS             ? builtinFunctionsCaseStatements        (optimized, m_useConstantExpressionsOnly, precision, isVertexCase)
                                                                                : m_caseType == CASETYPE_ARRAY                                  ? arrayCaseStatements                           (optimized, precision, isVertexCase)
                                                                                : m_caseType == CASETYPE_STRUCT                                 ? structCaseStatements                          (optimized, m_useConstantExpressionsOnly, precision, isVertexCase)
-                                                                               : DE_NULL;
+                                                                               : deFatalStr("Invalid CaseType");
 
                return defaultProgramData(m_caseShaderType, statements);
        }
@@ -552,7 +552,7 @@ protected:
                                                                                : m_caseType == CASETYPE_MULTIPLE_STATEMENTS    ? multipleStatementsCaseStatements      (optimized, precision, isVertexCase)
                                                                                : m_caseType == CASETYPE_STATIC_BRANCH                  ? staticBranchCaseStatements            (optimized, precision, isVertexCase)
                                                                                : m_caseType == CASETYPE_LOOP                                   ? loopCaseStatements                            (optimized, precision, isVertexCase)
-                                                                               : DE_NULL;
+                                                                               : deFatalStr("Invalid CaseType");
 
                return defaultProgramData(m_caseShaderType, statements);
        }
@@ -702,7 +702,7 @@ protected:
                                                                                : m_caseType == CASETYPE_UNUSED_VALUE_DEAD_BRANCH               ? unusedValueDeadBranchCaseStatements           (optimized, precision, isVertexCase)
                                                                                : m_caseType == CASETYPE_UNUSED_VALUE_AFTER_RETURN              ? unusedValueAfterReturnCaseStatements          ()
                                                                                : m_caseType == CASETYPE_UNUSED_VALUE_MUL_ZERO                  ? unusedValueMulZeroCaseStatements                      (optimized, precision, isVertexCase)
-                                                                               : DE_NULL;
+                                                                               : deFatalStr("Invalid CaseType");
 
                return defaultProgramData(m_caseShaderType, funcDefs, statements);
        }
index 8c63efa..80adce8 100644 (file)
@@ -108,7 +108,7 @@ static inline string getShaderPrecision (CaseShaderType shaderType)
                case CASESHADERTYPE_FRAGMENT:   return "highp";
                default:
                        DE_ASSERT(false);
-                       return DE_NULL;
+                       return "";
        }
 }
 
@@ -339,7 +339,7 @@ private:
                        case CASETYPE_DEPENDENT:        return "value = sin(value)";
                        default:
                                DE_ASSERT(false);
-                               return DE_NULL;
+                               return "";
                }
        }
 
@@ -453,7 +453,7 @@ protected:
                const string    statements              = m_caseType == CASETYPE_BUILT_IN_FUNCTIONS             ? builtinFunctionsCaseStatements        (optimized, m_useConstantExpressionsOnly, precision, isVertexCase)
                                                                                : m_caseType == CASETYPE_ARRAY                                  ? arrayCaseStatements                           (optimized, m_useConstantExpressionsOnly, precision, isVertexCase)
                                                                                : m_caseType == CASETYPE_STRUCT                                 ? structCaseStatements                          (optimized, m_useConstantExpressionsOnly, precision, isVertexCase)
-                                                                               : DE_NULL;
+                                                                               : deFatalStr("Invalid CaseType");
 
                return defaultProgramData(m_caseShaderType, statements);
        }
@@ -563,7 +563,7 @@ protected:
                                                                                : m_caseType == CASETYPE_MULTIPLE_STATEMENTS    ? multipleStatementsCaseStatements      (optimized, precision, isVertexCase)
                                                                                : m_caseType == CASETYPE_STATIC_BRANCH                  ? staticBranchCaseStatements            (optimized, precision, isVertexCase)
                                                                                : m_caseType == CASETYPE_LOOP                                   ? loopCaseStatements                            (optimized, precision, isVertexCase)
-                                                                               : DE_NULL;
+                                                                               : deFatalStr("Invalid CaseType");
 
                return defaultProgramData(m_caseShaderType, statements);
        }
@@ -713,7 +713,7 @@ protected:
                                                                                : m_caseType == CASETYPE_UNUSED_VALUE_DEAD_BRANCH               ? unusedValueDeadBranchCaseStatements           (optimized, precision, isVertexCase)
                                                                                : m_caseType == CASETYPE_UNUSED_VALUE_AFTER_RETURN              ? unusedValueAfterReturnCaseStatements          ()
                                                                                : m_caseType == CASETYPE_UNUSED_VALUE_MUL_ZERO                  ? unusedValueMulZeroCaseStatements                      (optimized, precision, isVertexCase)
-                                                                               : DE_NULL;
+                                                                               : deFatalStr("Invalid CaseType");
 
                return defaultProgramData(m_caseShaderType, funcDefs, statements);
        }
index 7fa9c6a..7ceba8b 100644 (file)
@@ -1181,7 +1181,7 @@ std::string BuiltinVariableShader::genFragmentSource (const glu::ContextType& co
        else
        {
                DE_ASSERT(DE_FALSE);
-               return DE_NULL;
+               return "";
        }
 }
 
index 511bb5c..2d28dba 100644 (file)
@@ -101,7 +101,7 @@ std::string getShaderLayoutEquation (BlendEquation equation)
                default:
                        DE_FATAL("Equation not supported.");
        }
-       return DE_NULL;
+       return "";
 }
 
 glw::GLenum getEquation (BlendEquation equation)
index d8578b2..0c8e336 100644 (file)
@@ -1414,7 +1414,7 @@ std::string ResourceTestCase::genMultilineDescription (const ResourceDefinition:
        }
 
        DE_ASSERT(false);
-       return DE_NULL;
+       return "";
 }
 
 class ResourceNameBufferLimitCase : public TestCase
index 0e51ab8..d27ed76 100644 (file)
@@ -1197,7 +1197,7 @@ ImageStoreCase::IterateResult ImageStoreCase::iterate (void)
                                                                                                                        "       imageStore(u_image, ivec2(gx, gy), " + colorExpr + ");\n"
                                                                                                                 : shaderImageType == TEXTURETYPE_3D || shaderImageType == TEXTURETYPE_CUBE || shaderImageType == TEXTURETYPE_2D_ARRAY ?
                                                                                                                        "       imageStore(u_image, ivec3(gx, gy, gz), " + colorExpr + ");\n"
-                                                                                                                : DE_NULL) +
+                                                                                                                : deFatalStr("Invalid TextureType")) +
                                                                                                                "}\n"));
 
                UniformAccessLogger uniforms(renderCtx.getFunctions(), log, program.getProgram());
@@ -1448,7 +1448,7 @@ ImageLoadAndStoreCase::IterateResult ImageLoadAndStoreCase::iterate (void)
                                                                                                                 : shaderImageType == TEXTURETYPE_3D || shaderImageType == TEXTURETYPE_CUBE || shaderImageType == TEXTURETYPE_2D_ARRAY ?
                                                                                                                        "       ivec3 pos = ivec3(gl_GlobalInvocationID);\n"
                                                                                                                        "       imageStore(u_image1, pos, imageLoad(u_image0, ivec3(" + toString(imageSize.x()-1) + "-pos.x, pos.y, pos.z)));\n"
-                                                                                                                : DE_NULL) +
+                                                                                                                : deFatalStr("Invalid TextureType")) +
                                                                                                                "}\n"));
 
                UniformAccessLogger uniforms(renderCtx.getFunctions(), log, program.getProgram());
@@ -1691,7 +1691,7 @@ string BinaryAtomicOperationCase::getAtomicFuncArgumentShaderStr (AtomicOperatio
 
                default:
                        DE_ASSERT(false);
-                       return DE_NULL;
+                       return "";
        }
 }
 
@@ -2043,7 +2043,7 @@ BinaryAtomicOperationCase::IterateResult BinaryAtomicOperationCase::iterate (voi
                                                                                                                        "       imageStore(u_returnValues, " + invocationCoord + ", " + colorVecTypeName + "(" + atomicInvocation + "));\n"
                                                                                                                 : m_caseType == ATOMIC_OPERATION_CASE_TYPE_END_RESULT ?
                                                                                                                        "       " + atomicInvocation + ";\n"
-                                                                                                                : DE_NULL) +
+                                                                                                                : deFatalStr("Invalid AtomicOperationCaseType")) +
                                                                                                                "}\n"));
 
                UniformAccessLogger uniforms(renderCtx.getFunctions(), log, program.getProgram());
@@ -3304,7 +3304,7 @@ void ShaderImageLoadStoreTests::init (void)
                                        const char* const                                       imageAccessStr  = imageAccess == ImageSizeCase::IMAGEACCESS_READ_ONLY                           ? "readonly"
                                                                                                                                                : imageAccess == ImageSizeCase::IMAGEACCESS_WRITE_ONLY                          ? "writeonly"
                                                                                                                                                : imageAccess == ImageSizeCase::IMAGEACCESS_READ_ONLY_WRITE_ONLY        ? "readonly_writeonly"
-                                                                                                                                               : DE_NULL;
+                                                                                                                                               : deFatalStr("Invalid ImageAccess");
 
                                        for (int imageSizeNdx = 0; imageSizeNdx < DE_LENGTH_OF_ARRAY(baseImageSizes); imageSizeNdx++)
                                        {
@@ -3321,7 +3321,7 @@ void ShaderImageLoadStoreTests::init (void)
                                                                                                        : imageType == TEXTURETYPE_CUBE                 ? toString(imageSize.x()) + "x" + toString(imageSize.y())
                                                                                                        : imageType == TEXTURETYPE_3D                   ? toString(imageSize.x()) + "x" + toString(imageSize.y()) + "x" + toString(imageSize.z())
                                                                                                        : imageType == TEXTURETYPE_2D_ARRAY             ? toString(imageSize.x()) + "x" + toString(imageSize.y()) + "x" + toString(imageSize.z())
-                                                                                                       : DE_NULL;
+                                                                                                       : deFatalStr("Invalid TextureType");
 
                                                const string    caseName        = string() + imageAccessStr + "_" + sizeStr;
 
index c5bbf96..69ce613 100644 (file)
@@ -1640,7 +1640,7 @@ void CommonEdgeCase::init (void)
                                                                                                                "       gl_TessLevelOuter[1] = 1.0 + 59.0 * 0.5 * (in_tc_tessParam[1] + in_tc_tessParam[0]);\n"
                                                                                                                "       gl_TessLevelOuter[2] = 1.0 + 59.0 * 0.5 * (in_tc_tessParam[3] + in_tc_tessParam[1]);\n"
                                                                                                                "       gl_TessLevelOuter[3] = 1.0 + 59.0 * 0.5 * (in_tc_tessParam[2] + in_tc_tessParam[3]);\n"
-                                                                                                         : DE_NULL) +
+                                                                                                         : deFatalStr("Invalid TessPrimitiveType")) +
                                                                                                 "}\n");
 
        std::string tessellationEvaluationTemplate      ("${GLSL_VERSION_DECL}\n"
@@ -1674,11 +1674,11 @@ void CommonEdgeCase::init (void)
                                                                                                                        "       highp vec2 c = (1.0-gl_TessCoord.x)*(    gl_TessCoord.y)*in_te_position[2];\n"
                                                                                                                        "       highp vec2 d = (    gl_TessCoord.x)*(    gl_TessCoord.y)*in_te_position[3];\n"
                                                                                                                        "       highp vec2 pos = a+b+c+d;\n"
-                                                                                                                : DE_NULL) +
+                                                                                                                : deFatalStr("Invalid CaseType")) +
                                                                                                                "\n"
                                                                                                                "       highp float f = sqrt(1.0 - 2.0 * max(abs(gl_TessCoord.x - 0.5), abs(gl_TessCoord.y - 0.5)))*0.5 + 0.5;\n"
                                                                                                                "       in_f_color = vec4(0.1, gl_TessCoord.xy*f, 1.0);\n"
-                                                                                                         : DE_NULL) +
+                                                                                                         : deFatalStr("Invalid TessPrimitiveType")) +
                                                                                                         "\n"
                                                                                                         "      // Offset the position slightly, based on the parity of the bits in the float representation.\n"
                                                                                                         "      // This is done to detect possible small differences in edge vertex positions between patches.\n"
@@ -5742,7 +5742,7 @@ string UserDefinedIOCase::glslTraverseBasicTypes (const string&                   rootName,
        else
        {
                DE_ASSERT(false);
-               return DE_NULL;
+               return "";
        }
 }
 
@@ -5861,7 +5861,7 @@ string UserDefinedIOCase::Variable::basicSubobjectAtIndex (int subobjectIndex, i
                currentIndex++;
        }
        DE_ASSERT(false);
-       return DE_NULL;
+       return "";
 }
 
 string UserDefinedIOCase::IOBlock::basicSubobjectAtIndex (int subobjectIndex, int arraySize) const
@@ -5883,7 +5883,7 @@ string UserDefinedIOCase::IOBlock::basicSubobjectAtIndex (int subobjectIndex, in
                }
        }
        DE_ASSERT(false);
-       return DE_NULL;
+       return "";
 }
 
 // Used as the 'visit' argument for glslTraverseBasicTypes.
@@ -5969,7 +5969,7 @@ void UserDefinedIOCase::init (void)
        const string            vertexAttrArrayInputSize        = m_vertexIOArraySize == VERTEX_IO_ARRAY_SIZE_IMPLICIT                                  ? ""
                                                                                                        : m_vertexIOArraySize == VERTEX_IO_ARRAY_SIZE_EXPLICIT_SHADER_BUILTIN   ? "gl_MaxPatchVertices"
                                                                                                        : m_vertexIOArraySize == VERTEX_IO_ARRAY_SIZE_EXPLICIT_QUERY                    ? de::toString(m_context.getContextInfo().getInt(GL_MAX_PATCH_VERTICES))
-                                                                                                       : DE_NULL;
+                                                                                                       : deFatalStr("Invalid VertexIOArraySize");
 
        const char* const       maybePatch                                      = isPerPatchIO ? "patch " : "";
        const string            outMaybePatch                           = string() + maybePatch + "out ";