ConstantUnion: Error on undefined shift.

BUG=chromium:648135

Change-Id: I41581f63af650564a0f61c1baeeb38017c8513ed
Reviewed-on: https://chromium-review.googlesource.com/387470
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/compiler/translator/ConstantUnion.cpp b/src/compiler/translator/ConstantUnion.cpp
index 6ef6179..4547f41 100644
--- a/src/compiler/translator/ConstantUnion.cpp
+++ b/src/compiler/translator/ConstantUnion.cpp
@@ -380,11 +380,21 @@
     switch (lhs.type)
     {
         case EbtInt:
-            returnValue.setIConst(lhs.iConst >> rhs.iConst);
+            if (lhs.iConst < 0 || rhs.iConst < 0)
+            {
+                diag->error(line, "Undefined shift", ">>", "");
+                returnValue.setIConst(0);
+            }
+            else
+            {
+                returnValue.setIConst(lhs.iConst >> rhs.iConst);
+            }
             break;
+
         case EbtUInt:
             returnValue.setUConst(lhs.uConst >> rhs.uConst);
             break;
+
         default:
             UNREACHABLE();
     }
@@ -406,11 +416,21 @@
     switch (lhs.type)
     {
         case EbtInt:
-            returnValue.setIConst(lhs.iConst << rhs.iConst);
+            if (lhs.iConst < 0 || rhs.iConst < 0)
+            {
+                diag->error(line, "Undefined shift", "<<", "");
+                returnValue.setIConst(0);
+            }
+            else
+            {
+                returnValue.setIConst(lhs.iConst << rhs.iConst);
+            }
             break;
+
         case EbtUInt:
             returnValue.setUConst(lhs.uConst << rhs.uConst);
             break;
+
         default:
             UNREACHABLE();
     }