diff --git a/android/cts/master/com.drawelements.deqp.gles3.xml b/android/cts/master/com.drawelements.deqp.gles3.xml
index 76ef6b4..5e19de4 100644
--- a/android/cts/master/com.drawelements.deqp.gles3.xml
+++ b/android/cts/master/com.drawelements.deqp.gles3.xml
@@ -3211,12 +3211,6 @@
 						<Test name="basic_2_fragment">
 							<TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
 						</Test>
-						<Test name="defined_macro_defined_test_vertex">
-							<TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-						</Test>
-						<Test name="defined_macro_defined_test_fragment">
-							<TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
-						</Test>
 						<Test name="defined_macro_undef_vertex">
 							<TestInstance glconfig="rgba8888d24s8ms0" rotation="unspecified" surfacetype="window"/>
 						</Test>
diff --git a/android/cts/master/gles3-master.txt b/android/cts/master/gles3-master.txt
index 6b535ab..9980ae0 100644
--- a/android/cts/master/gles3-master.txt
+++ b/android/cts/master/gles3-master.txt
@@ -956,8 +956,6 @@
 dEQP-GLES3.functional.shaders.preprocessor.conditional_inclusion.basic_1_fragment
 dEQP-GLES3.functional.shaders.preprocessor.conditional_inclusion.basic_2_vertex
 dEQP-GLES3.functional.shaders.preprocessor.conditional_inclusion.basic_2_fragment
-dEQP-GLES3.functional.shaders.preprocessor.conditional_inclusion.defined_macro_defined_test_vertex
-dEQP-GLES3.functional.shaders.preprocessor.conditional_inclusion.defined_macro_defined_test_fragment
 dEQP-GLES3.functional.shaders.preprocessor.conditional_inclusion.defined_macro_undef_vertex
 dEQP-GLES3.functional.shaders.preprocessor.conditional_inclusion.defined_macro_undef_fragment
 dEQP-GLES3.functional.shaders.preprocessor.conditional_inclusion.defined_invalid_before_all_macros_replaced_vertex
diff --git a/android/cts/master/src/gles3-spec-issues.txt b/android/cts/master/src/gles3-spec-issues.txt
index ad1f008..2b7cf96 100644
--- a/android/cts/master/src/gles3-spec-issues.txt
+++ b/android/cts/master/src/gles3-spec-issues.txt
@@ -525,3 +525,5 @@
 dEQP-GLES3.functional.shaders.preprocessor.conditional_inclusion.define_defined_fragment
 dEQP-GLES3.functional.shaders.preprocessor.conditional_inclusion.define_defined_outside_if_vertex
 dEQP-GLES3.functional.shaders.preprocessor.conditional_inclusion.define_defined_outside_if_fragment
+dEQP-GLES3.functional.shaders.preprocessor.conditional_inclusion.defined_macro_defined_test_fragment
+dEQP-GLES3.functional.shaders.preprocessor.conditional_inclusion.defined_macro_defined_test_vertex
diff --git a/framework/delibs/debase/deString.c b/framework/delibs/debase/deString.c
index e6290f0..a9d3a3e 100644
--- a/framework/delibs/debase/deString.c
+++ b/framework/delibs/debase/deString.c
@@ -185,7 +185,7 @@
 	return strnlen_s(string, maxSize);
 #else
 	size_t len = 0;
-	while (len < maxSize || string[len] != 0)
+	while (len < maxSize && string[len] != 0)
 		++len;
 	return len;
 #endif
diff --git a/modules/egl/teglPartialUpdateTests.cpp b/modules/egl/teglPartialUpdateTests.cpp
index 33ff3ea..f2f280e 100644
--- a/modules/egl/teglPartialUpdateTests.cpp
+++ b/modules/egl/teglPartialUpdateTests.cpp
@@ -504,7 +504,6 @@
 		tcu::Surface	refBuffer		 (width, height);
 		Frame			newFrame		 (width, height);
 		EGLint			currentBufferAge = -1;
-		vector<EGLint>	damageRegion;
 
 		if (frameNdx % 2 == 0)
 			generateRandomFrame(newFrame, m_evenFrameDrawType, rnd);
@@ -528,12 +527,22 @@
 
 		if (currentBufferAge > 0)
 		{
+			vector<EGLint>	damageRegion;
+
 			hasPositiveAge = true;
 
 			if (m_supportBufferAge)
+			{
 				damageRegion = getDamageRegion(newFrame, 10, 10, 10, 10);
+			}
 			else
+			{
 				damageRegion = getDamageRegion(newFrame, 0, 0, 0, 0);
+				// Set empty damage region to avoid invalidating the framebuffer. The damage area is invalidated
+				// if the buffer age extension is not supported.
+				if (damageRegion.size() == 0)
+					damageRegion = vector<EGLint>(4, 0);
+			}
 
 			EGLU_CHECK_CALL(egl, setDamageRegionKHR(m_eglDisplay, m_eglSurface, &damageRegion[0], (EGLint)damageRegion.size()/4));
 		}
diff --git a/modules/gles31/functional/es31fNegativeBufferApiTests.cpp b/modules/gles31/functional/es31fNegativeBufferApiTests.cpp
index 1e4632b..d2bb14f 100644
--- a/modules/gles31/functional/es31fNegativeBufferApiTests.cpp
+++ b/modules/gles31/functional/es31fNegativeBufferApiTests.cpp
@@ -309,13 +309,17 @@
 	ctx.glReadPixels			(0, 0, 1, 1, GL_RGBA, GL_FLOAT, &floatData[0]);
 	ctx.expectError				(GL_INVALID_OPERATION);
 
-	ctx.glTexImage2D			(GL_TEXTURE_2D, 0, GL_RGBA32F, 32, 32, 0, GL_RGBA, GL_FLOAT, NULL);
-	ctx.expectError				(GL_NO_ERROR);
-	ctx.glFramebufferTexture2D	(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
-	ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER);
-	ctx.expectError				(GL_NO_ERROR);
-	ctx.glReadPixels			(0, 0, 1, 1, GL_RGBA, GL_INT, &floatData[0]);
-	ctx.expectError				(GL_INVALID_OPERATION);
+	if (contextSupports(ctx.getRenderContext().getType(), glu::ApiType::es(3, 2)) ||
+		ctx.isExtensionSupported("GL_EXT_color_buffer_float"))
+	{
+		ctx.glTexImage2D			(GL_TEXTURE_2D, 0, GL_RGBA32F, 32, 32, 0, GL_RGBA, GL_FLOAT, NULL);
+		ctx.expectError				(GL_NO_ERROR);
+		ctx.glFramebufferTexture2D	(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
+		ctx.glCheckFramebufferStatus(GL_FRAMEBUFFER);
+		ctx.expectError				(GL_NO_ERROR);
+		ctx.glReadPixels			(0, 0, 1, 1, GL_RGBA, GL_INT, &floatData[0]);
+		ctx.expectError				(GL_INVALID_OPERATION);
+	}
 
 	ctx.endSection();
 
diff --git a/modules/gles31/functional/es31fNegativePreciseTests.cpp b/modules/gles31/functional/es31fNegativePreciseTests.cpp
index c21cb7b..18a3b27 100644
--- a/modules/gles31/functional/es31fNegativePreciseTests.cpp
+++ b/modules/gles31/functional/es31fNegativePreciseTests.cpp
@@ -164,7 +164,10 @@
 
 	ctx.beginSection("Test that precise cannot be used as a variable name.");
 	for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_shaderTypes); ++ndx)
-		generateAndVerifyShader(ctx, s_shaderTypes[ndx], TEST_PRECISE_AS_VARIABLE_NAME);
+	{
+		if (ctx.isShaderSupported(s_shaderTypes[ndx]))
+			generateAndVerifyShader(ctx, s_shaderTypes[ndx], TEST_PRECISE_AS_VARIABLE_NAME);
+	}
 	ctx.endSection();
 }
 
@@ -176,7 +179,10 @@
 
 	ctx.beginSection("Test that precise cannot be used as a function name.");
 	for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_shaderTypes); ++ndx)
-		generateAndVerifyShader(ctx, s_shaderTypes[ndx], TEST_PRECISE_AS_FUNCTION_NAME);
+	{
+		if (ctx.isShaderSupported(s_shaderTypes[ndx]))
+			generateAndVerifyShader(ctx, s_shaderTypes[ndx], TEST_PRECISE_AS_FUNCTION_NAME);
+	}
 	ctx.endSection();
 }
 
@@ -188,7 +194,10 @@
 
 	ctx.beginSection("Test that precise cannot be used as a argument name.");
 	for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_shaderTypes); ++ndx)
-		generateAndVerifyShader(ctx, s_shaderTypes[ndx], TEST_PRECISE_AS_ARGUMENT_NAME);
+	{
+		if (ctx.isShaderSupported(s_shaderTypes[ndx]))
+			generateAndVerifyShader(ctx, s_shaderTypes[ndx], TEST_PRECISE_AS_ARGUMENT_NAME);
+	}
 	ctx.endSection();
 }
 
diff --git a/modules/gles31/functional/es31fNegativeShaderDirectiveTests.cpp b/modules/gles31/functional/es31fNegativeShaderDirectiveTests.cpp
index 09ae12a..f4f4bdf 100644
--- a/modules/gles31/functional/es31fNegativeShaderDirectiveTests.cpp
+++ b/modules/gles31/functional/es31fNegativeShaderDirectiveTests.cpp
@@ -109,8 +109,9 @@
 
 void primitive_bounding_box (NegativeTestContext& ctx)
 {
-	ctx.beginSection("GL_EXT_primitive_bounding_box features require enabling the extension in 310 es shaders.");
+	if (ctx.isShaderSupported(glu::SHADERTYPE_TESSELLATION_CONTROL))
 	{
+		ctx.beginSection("GL_EXT_primitive_bounding_box features require enabling the extension in 310 es shaders.");
 		std::ostringstream source;
 		source <<	"#version 310 es\n"
 					"void main()\n"
@@ -119,8 +120,8 @@
 					"	gl_BoundingBoxEXT[1] = vec4(1.0, 1.0, 1.0, 1.0);\n"
 					"}\n";
 		verifyShader(ctx, glu::SHADERTYPE_TESSELLATION_CONTROL, source.str(), EXPECT_RESULT_FAIL);
+		ctx.endSection();
 	}
-	ctx.endSection();
 
 	if (contextSupports(ctx.getRenderContext().getType() , glu::ApiType::es(3, 2)))
 	{
@@ -303,22 +304,25 @@
 
 void geometry_shader (NegativeTestContext& ctx)
 {
-	const std::string	simpleVtxFrag	=	"#version 310 es\n"
-											"void main()\n"
-											"{\n"
-											"}\n";
-	const std::string	geometry		=	"#version 310 es\n"
-											"layout(points, invocations = 1) in;\n"
-											"layout(points, max_vertices = 3) out;\n"
-											"precision mediump float;\n"
-											"void main()\n"
-											"{\n"
-											"	EmitVertex();\n"
-											"	EndPrimitive();\n"
-											"}\n";
-	ctx.beginSection("GL_EXT_geometry_shader features require enabling the extension in 310 es shaders.");
-	verifyProgram(ctx, glu::ProgramSources() << glu::VertexSource(simpleVtxFrag) << glu::GeometrySource(geometry) << glu::FragmentSource(simpleVtxFrag), EXPECT_RESULT_FAIL);
-	ctx.endSection();
+	if (ctx.isShaderSupported(glu::SHADERTYPE_GEOMETRY))
+	{
+		const std::string	simpleVtxFrag	=	"#version 310 es\n"
+												"void main()\n"
+												"{\n"
+												"}\n";
+		const std::string	geometry		=	"#version 310 es\n"
+												"layout(points, invocations = 1) in;\n"
+												"layout(points, max_vertices = 3) out;\n"
+												"precision mediump float;\n"
+												"void main()\n"
+												"{\n"
+												"	EmitVertex();\n"
+												"	EndPrimitive();\n"
+												"}\n";
+		ctx.beginSection("GL_EXT_geometry_shader features require enabling the extension in 310 es shaders.");
+		verifyProgram(ctx, glu::ProgramSources() << glu::VertexSource(simpleVtxFrag) << glu::GeometrySource(geometry) << glu::FragmentSource(simpleVtxFrag), EXPECT_RESULT_FAIL);
+		ctx.endSection();
+	}
 }
 
 void gpu_shader_5 (NegativeTestContext& ctx)
@@ -389,28 +393,31 @@
 
 void tessellation_shader (NegativeTestContext& ctx)
 {
-	const std::string	simpleVtxFrag	=	"#version 310 es\n"
-											"void main()\n"
-											"{\n"
-											"}\n";
-	const std::string	tessControl		=	"#version 310 es\n"
-											"layout(vertices = 3) out;\n"
-											"void main()\n"
-											"{\n"
-											"}\n";
-	const std::string	tessEvaluation	=	"#version 310 es\n"
-											"layout(triangles, equal_spacing, cw) in;\n"
-											"void main()\n"
-											"{\n"
-											"}\n";
-	ctx.beginSection("GL_EXT_tessellation_shader features require enabling the extension in 310 es shaders.");
-	glu::ProgramSources sources;
-	sources << glu::VertexSource(simpleVtxFrag)
-			<< glu::TessellationControlSource(tessControl)
-			<< glu::TessellationEvaluationSource(tessEvaluation)
-			<< glu::FragmentSource(simpleVtxFrag);
-	verifyProgram(ctx, sources, EXPECT_RESULT_FAIL);
-	ctx.endSection();
+	if (ctx.isShaderSupported(glu::SHADERTYPE_TESSELLATION_CONTROL))
+	{
+		const std::string	simpleVtxFrag	=	"#version 310 es\n"
+												"void main()\n"
+												"{\n"
+												"}\n";
+		const std::string	tessControl		=	"#version 310 es\n"
+												"layout(vertices = 3) out;\n"
+												"void main()\n"
+												"{\n"
+												"}\n";
+		const std::string	tessEvaluation	=	"#version 310 es\n"
+												"layout(triangles, equal_spacing, cw) in;\n"
+												"void main()\n"
+												"{\n"
+												"}\n";
+		ctx.beginSection("GL_EXT_tessellation_shader features require enabling the extension in 310 es shaders.");
+		glu::ProgramSources sources;
+		sources << glu::VertexSource(simpleVtxFrag)
+				<< glu::TessellationControlSource(tessControl)
+				<< glu::TessellationEvaluationSource(tessEvaluation)
+				<< glu::FragmentSource(simpleVtxFrag);
+		verifyProgram(ctx, sources, EXPECT_RESULT_FAIL);
+		ctx.endSection();
+	}
 }
 
 void texture_buffer (NegativeTestContext& ctx)
