Fix tracking variables in folded ternary operators

The result of folding a ternary operator may be a TIntermSymbol node
where the qualifier doesn't match the qualifier of the variable that
the node is referring to.

Get the qualifier from the variable instead of directly from
TIntermSymbol when collecting variables in CollectVariables or when
tracking referenced variables in OutputHLSL.

BUG=angleproject:2288
TEST=angle_unittests, angle_end2end_tests

Change-Id: If294a7fe9dca50f2ebcea3feff887e72a521d395
Reviewed-on: https://chromium-review.googlesource.com/836893
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/compiler/translator/OutputHLSL.cpp b/src/compiler/translator/OutputHLSL.cpp
index 65270ff..9df5186 100644
--- a/src/compiler/translator/OutputHLSL.cpp
+++ b/src/compiler/translator/OutputHLSL.cpp
@@ -403,11 +403,10 @@
     TString attributes;
     TString mappedStructs = generateStructMapping(std140Structs);
 
-    for (ReferencedSymbols::const_iterator varying = mReferencedVaryings.begin();
-         varying != mReferencedVaryings.end(); varying++)
+    for (const auto &varying : mReferencedVaryings)
     {
-        const TType &type   = varying->second->getType();
-        const TString &name = varying->second->getSymbol();
+        const TType &type   = varying.second->variable().getType();
+        const TString &name = varying.second->getSymbol();
 
         // Program linking depends on this exact format
         varyings += "static " + InterpolationString(type.getQualifier()) + " " + TypeString(type) +
@@ -880,7 +879,7 @@
     else
     {
         const TType &nodeType = node->getType();
-        TQualifier qualifier = node->getQualifier();
+        TQualifier qualifier  = node->variable().getType().getQualifier();
 
         ensureStructDefined(nodeType);