Use of uninitialized value fixed

TParseContext::addConstVectorNode() was returning a
TIntermTyped* variable of the wrong type if a swizzle
was of a different size than the vector's size. When
parseVectorFields() fails, fields.num is reset to 1,
which no longer matches fieldString.size(), so
fieldString.size() should not have been used. To
avoid future errors, the proper type is now set
directly within TParseContext::addConstVectorNode().

Bug chromium:796776

Change-Id: Id5e8d1b94d0a03fcf5ef6f5deeb77581bc070288
Reviewed-on: https://swiftshader-review.googlesource.com/17089
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/OpenGL/compiler/ParseHelper.cpp b/src/OpenGL/compiler/ParseHelper.cpp
index f2f3089..c7100ba 100644
--- a/src/OpenGL/compiler/ParseHelper.cpp
+++ b/src/OpenGL/compiler/ParseHelper.cpp
@@ -2206,7 +2206,9 @@
 		constArray[i] = unionArray[fields.offsets[i]];
 
 	}
-	typedNode = intermediate.addConstantUnion(constArray, node->getType(), line);
+
+	TType type(node->getType().getBasicType(), node->getType().getPrecision(), EvqConstExpr, fields.num);
+	typedNode = intermediate.addConstantUnion(constArray, type, line);
 	return typedNode;
 }
 
@@ -2652,11 +2654,6 @@
 				recover();
 				indexedExpression = baseExpression;
 			}
-			else
-			{
-				indexedExpression->setType(TType(baseExpression->getBasicType(), baseExpression->getPrecision(),
-					EvqConstExpr, (unsigned char)(fieldString).size()));
-			}
 		}
 		else
 		{