Fix shaders with invariant keyword.

We would trigger assertion failures in Debug mode, and fail to
parse and translate correctly in Release.

BUG=angle:711

Change-Id: Ibb7f33b288376617598578f48c7bbdbdec044279
Reviewed-on: https://chromium-review.googlesource.com/210822
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Nicolas Capens <capn@chromium.org>
diff --git a/src/compiler/translator/VariableInfo.cpp b/src/compiler/translator/VariableInfo.cpp
index 153455c..0bd95cb 100644
--- a/src/compiler/translator/VariableInfo.cpp
+++ b/src/compiler/translator/VariableInfo.cpp
@@ -320,6 +320,8 @@
       case EOpDeclaration:
         {
             const TIntermSequence &sequence = *(node->getSequence());
+            ASSERT(!sequence.empty());
+
             const TIntermTyped &typedNode = *(sequence.front()->getAsTyped());
             TQualifier qualifier = typedNode.getQualifier();
 
@@ -344,14 +346,16 @@
                     visitInfoList(sequence, mUniforms);
                     break;
                   default:
-                    visitInfoList(sequence, mVaryings);
+                    // do not traverse invariant declarations such as
+                    //  "invariant gl_Position;"
+                    if (typedNode.getBasicType() != EbtInvariant)
+                    {
+                        visitInfoList(sequence, mVaryings);
+                    }
                     break;
                 }
 
-                if (!sequence.empty())
-                {
-                    visitChildren = false;
-                }
+                visitChildren = false;
             }
             break;
         }