Revert "Fix setting const qualifier on indexing expression"

Failing to compile shaders which are used in some layout_tests,
see http://crbug.com/538692 for logs and bad shaders.

We should diagnose if the shaders are faulty or if there's a
bug in this CL and take appropriate action, but first priority 
is to get the tests running again.

BUG=538692
BUG=angleproject:1170

This reverts commit 16a79cd169420cdf0254964b1bac9dd9964a8119.

Change-Id: Iea14c58d87041bcf5ba645b7076ba0936dea6b9d
Reviewed-on: https://chromium-review.googlesource.com/303794
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/compiler/translator/ParseContext.cpp b/src/compiler/translator/ParseContext.cpp
index 04e88da..8eaa111 100644
--- a/src/compiler/translator/ParseContext.cpp
+++ b/src/compiler/translator/ParseContext.cpp
@@ -2872,36 +2872,51 @@
     }
     else if (baseExpression->isArray())
     {
-        TType indexedType = baseExpression->getType();
-        indexedType.clearArrayness();
-        indexedExpression->setType(indexedType);
+        const TType &baseType = baseExpression->getType();
+        if (baseType.getStruct())
+        {
+            TType copyOfType(baseType.getStruct());
+            indexedExpression->setType(copyOfType);
+        }
+        else if (baseType.isInterfaceBlock())
+        {
+            TType copyOfType(baseType.getInterfaceBlock(), baseType.getQualifier(),
+                             baseType.getLayoutQualifier(), 0);
+            indexedExpression->setType(copyOfType);
+        }
+        else
+        {
+            indexedExpression->setType(
+                TType(baseExpression->getBasicType(), baseExpression->getPrecision(), EvqTemporary,
+                      static_cast<unsigned char>(baseExpression->getNominalSize()),
+                      static_cast<unsigned char>(baseExpression->getSecondarySize())));
+        }
+
+        if (baseExpression->getType().getQualifier() == EvqConst)
+        {
+            indexedExpression->getTypePointer()->setQualifier(EvqConst);
+        }
     }
     else if (baseExpression->isMatrix())
     {
+        TQualifier qualifier =
+            baseExpression->getType().getQualifier() == EvqConst ? EvqConst : EvqTemporary;
         indexedExpression->setType(TType(baseExpression->getBasicType(),
-                                         baseExpression->getPrecision(), EvqTemporary,
+                                         baseExpression->getPrecision(), qualifier,
                                          static_cast<unsigned char>(baseExpression->getRows())));
     }
     else if (baseExpression->isVector())
     {
+        TQualifier qualifier =
+            baseExpression->getType().getQualifier() == EvqConst ? EvqConst : EvqTemporary;
         indexedExpression->setType(
-            TType(baseExpression->getBasicType(), baseExpression->getPrecision(), EvqTemporary));
+            TType(baseExpression->getBasicType(), baseExpression->getPrecision(), qualifier));
     }
     else
     {
         indexedExpression->setType(baseExpression->getType());
     }
 
-    if (baseExpression->getType().getQualifier() == EvqConst &&
-        indexExpression->getType().getQualifier() == EvqConst)
-    {
-        indexedExpression->getTypePointer()->setQualifier(EvqConst);
-    }
-    else
-    {
-        indexedExpression->getTypePointer()->setQualifier(EvqTemporary);
-    }
-
     return indexedExpression;
 }