diff --git a/external/vulkancts/modules/vulkan/image/vktImageAtomicOperationTests.cpp b/external/vulkancts/modules/vulkan/image/vktImageAtomicOperationTests.cpp
index a6e624b..2159975 100644
--- a/external/vulkancts/modules/vulkan/image/vktImageAtomicOperationTests.cpp
+++ b/external/vulkancts/modules/vulkan/image/vktImageAtomicOperationTests.cpp
@@ -115,7 +115,7 @@
 			return string("ivec3(" + x + "," + y + "," + z + ")");
 		default:
 			DE_ASSERT(false);
-			return DE_NULL;
+			return "";
 	}
 }
 
@@ -142,7 +142,7 @@
 			return string("((" + z + "*" + toString(gridSize.x()) + " + " + x + ")*" + toString(gridSize.y()) + " + " + y + ")");
 		default:
 			DE_ASSERT(false);
-			return DE_NULL;
+			return "";
 	}
 }
 
@@ -163,7 +163,7 @@
 		case ATOMIC_OPERATION_COMPARE_EXCHANGE:	return string("compare_exchange");
 		default:
 			DE_ASSERT(false);
-			return DE_NULL;
+			return "";
 	}
 }
 
@@ -181,7 +181,7 @@
 		case ATOMIC_OPERATION_COMPARE_EXCHANGE:	return string("imageAtomicCompSwap");
 		default:
 			DE_ASSERT(false);
-			return DE_NULL;
+			return "";
 	}
 }
 
diff --git a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperation.cpp b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperation.cpp
index aebfbce..16c581c 100644
--- a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperation.cpp
+++ b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperation.cpp
@@ -413,7 +413,7 @@
 
 		default:
 			DE_FATAL("Unknown image type");
-			return DE_NULL;
+			return "";
 	}
 }
 
diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationUserDefinedIO.cpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationUserDefinedIO.cpp
index 106ee04..19cddc7 100644
--- a/external/vulkancts/modules/vulkan/tessellation/vktTessellationUserDefinedIO.cpp
+++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationUserDefinedIO.cpp
@@ -148,7 +148,7 @@
 	else
 	{
 		DE_ASSERT(false);
-		return DE_NULL;
+		return "";
 	}
 }
 
@@ -311,7 +311,7 @@
 		++currentIndex;
 	}
 	DE_ASSERT(false);
-	return DE_NULL;
+	return "";
 }
 
 class IOBlock : public TopLevelObject
@@ -428,7 +428,7 @@
 		}
 	}
 	DE_ASSERT(false);
-	return DE_NULL;
+	return "";
 }
 
 class UserDefinedIOTest : public TestCase
@@ -464,7 +464,7 @@
 	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 ";
diff --git a/framework/delibs/debase/deDefs.h b/framework/delibs/debase/deDefs.h
index 314d2ad..ed3b917 100644
--- a/framework/delibs/debase/deDefs.h
+++ b/framework/delibs/debase/deDefs.h
@@ -382,6 +382,8 @@
 #	define DE_UNUSED_FUNCTION
 #endif
 
+DE_INLINE const char* deFatalStr (const char* reason) { DE_ASSERT(0); return reason; }
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/framework/opengl/gluShaderLibrary.cpp b/framework/opengl/gluShaderLibrary.cpp
index 293c919..347ce4c 100644
--- a/framework/opengl/gluShaderLibrary.cpp
+++ b/framework/opengl/gluShaderLibrary.cpp
@@ -1316,7 +1316,7 @@
 				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 @@
 				}
 
 				default:
-					parseError(DE_FALSE);
+					DE_FATAL("Unreachable");
 			}
 		}
 		else if (m_curToken == TOKEN_VERSION)
diff --git a/modules/gles2/performance/es2pShaderOptimizationTests.cpp b/modules/gles2/performance/es2pShaderOptimizationTests.cpp
index 1bef454..ade8061 100644
--- a/modules/gles2/performance/es2pShaderOptimizationTests.cpp
+++ b/modules/gles2/performance/es2pShaderOptimizationTests.cpp
@@ -108,7 +108,7 @@
 		case CASESHADERTYPE_FRAGMENT:	return "mediump";
 		default:
 			DE_ASSERT(false);
-			return DE_NULL;
+			return "";
 	}
 }
 
@@ -336,7 +336,7 @@
 			case CASETYPE_DEPENDENT:	return "value = sin(value)";
 			default:
 				DE_ASSERT(false);
-				return DE_NULL;
+				return "";
 		}
 	}
 
@@ -451,7 +451,7 @@
 		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 @@
 										: 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 @@
 										: 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);
 	}
diff --git a/modules/gles3/performance/es3pShaderOptimizationTests.cpp b/modules/gles3/performance/es3pShaderOptimizationTests.cpp
index 8c63efa..80adce8 100644
--- a/modules/gles3/performance/es3pShaderOptimizationTests.cpp
+++ b/modules/gles3/performance/es3pShaderOptimizationTests.cpp
@@ -108,7 +108,7 @@
 		case CASESHADERTYPE_FRAGMENT:	return "highp";
 		default:
 			DE_ASSERT(false);
-			return DE_NULL;
+			return "";
 	}
 }
 
@@ -339,7 +339,7 @@
 			case CASETYPE_DEPENDENT:	return "value = sin(value)";
 			default:
 				DE_ASSERT(false);
-				return DE_NULL;
+				return "";
 		}
 	}
 
@@ -453,7 +453,7 @@
 		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 @@
 										: 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 @@
 										: 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);
 	}
diff --git a/modules/gles31/functional/es31fGeometryShaderTests.cpp b/modules/gles31/functional/es31fGeometryShaderTests.cpp
index 7fa9c6a..7ceba8b 100644
--- a/modules/gles31/functional/es31fGeometryShaderTests.cpp
+++ b/modules/gles31/functional/es31fGeometryShaderTests.cpp
@@ -1181,7 +1181,7 @@
 	else
 	{
 		DE_ASSERT(DE_FALSE);
-		return DE_NULL;
+		return "";
 	}
 }
 
diff --git a/modules/gles31/functional/es31fNegativeAdvancedBlendEquationTests.cpp b/modules/gles31/functional/es31fNegativeAdvancedBlendEquationTests.cpp
index 511bb5c..2d28dba 100644
--- a/modules/gles31/functional/es31fNegativeAdvancedBlendEquationTests.cpp
+++ b/modules/gles31/functional/es31fNegativeAdvancedBlendEquationTests.cpp
@@ -101,7 +101,7 @@
 		default:
 			DE_FATAL("Equation not supported.");
 	}
-	return DE_NULL;
+	return "";
 }
 
 glw::GLenum getEquation (BlendEquation equation)
diff --git a/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp b/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp
index d8578b2..0c8e336 100644
--- a/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp
+++ b/modules/gles31/functional/es31fProgramInterfaceQueryTests.cpp
@@ -1414,7 +1414,7 @@
 	}
 
 	DE_ASSERT(false);
-	return DE_NULL;
+	return "";
 }
 
 class ResourceNameBufferLimitCase : public TestCase
diff --git a/modules/gles31/functional/es31fShaderImageLoadStoreTests.cpp b/modules/gles31/functional/es31fShaderImageLoadStoreTests.cpp
index 0e51ab8..d27ed76 100644
--- a/modules/gles31/functional/es31fShaderImageLoadStoreTests.cpp
+++ b/modules/gles31/functional/es31fShaderImageLoadStoreTests.cpp
@@ -1197,7 +1197,7 @@
 															"	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 @@
 														 : 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 @@
 
 		default:
 			DE_ASSERT(false);
-			return DE_NULL;
+			return "";
 	}
 }
 
@@ -2043,7 +2043,7 @@
 															"	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 @@
 					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 @@
 													: 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;
 
diff --git a/modules/gles31/functional/es31fTessellationTests.cpp b/modules/gles31/functional/es31fTessellationTests.cpp
index c5bbf96..69ce613 100644
--- a/modules/gles31/functional/es31fTessellationTests.cpp
+++ b/modules/gles31/functional/es31fTessellationTests.cpp
@@ -1640,7 +1640,7 @@
 														"	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 @@
 															"	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 @@
 	else
 	{
 		DE_ASSERT(false);
-		return DE_NULL;
+		return "";
 	}
 }
 
@@ -5861,7 +5861,7 @@
 		currentIndex++;
 	}
 	DE_ASSERT(false);
-	return DE_NULL;
+	return "";
 }
 
 string UserDefinedIOCase::IOBlock::basicSubobjectAtIndex (int subobjectIndex, int arraySize) const
@@ -5883,7 +5883,7 @@
 		}
 	}
 	DE_ASSERT(false);
-	return DE_NULL;
+	return "";
 }
 
 // Used as the 'visit' argument for glslTraverseBasicTypes.
@@ -5969,7 +5969,7 @@
 	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 ";
