Revert "Don't evaluate short-circuited preprocessor expressions"

Build break on Clang:

FAILED: /b/build/goma/gomacc ../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD -MF obj/third_party/angle/src/compiler/preprocessor/preprocessor.ExpressionParser.o.d -DV8_DEPRECATION_WARNINGS -DCLD_VERSION=2 -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORE=0 -DCHROMIUM_BUILD -DCR_CLANG_REVISION=245965-1 -DUSE_LIBJPEG_TURBO=1 -DENABLE_ONE_CLICK_SIGNIN -DENABLE_PRE_SYNC_BACKUP -DENABLE_WEBRTC=1 -DENABLE_MEDIA_ROUTER=1 -DUSE_PROPRIETARY_CODECS -DENABLE_PEPPER_CDMS -DENABLE_CONFIGURATION_POLICY -DENABLE_NOTIFICATIONS -DENABLE_HIDPI=1 -DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE -DDONT_EMBED_BUILD_METADATA -DDCHECK_ALWAYS_ON=1 -DFIELDTRIAL_TESTING_ENABLED -DENABLE_TASK_MANAGER=1 -DENABLE_EXTENSIONS=1 -DENABLE_PDF=1 -DENABLE_PLUGIN_INSTALLATION=1 -DENABLE_PLUGINS=1 -DENABLE_SESSION_SERVICE=1 -DENABLE_THEMES=1 -DENABLE_AUTOFILL_DIALOG=1 -DENABLE_BACKGROUND=1 -DENABLE_GOOGLE_NOW=1 -DENABLE_PRINTING=1 -DENABLE_BASIC_PRINTING=1 -DENABLE_PRINT_PREVIEW=1 -DENABLE_SPELLCHECK=1 -DUSE_BROWSER_SPELLCHECKER=1 -DENABLE_CAPTIVE_PORTAL_DETECTION=1 -DENABLE_APP_LIST=1 -DENABLE_SETTINGS_APP=1 -DENABLE_SUPERVISED_USERS=1 -DENABLE_SERVICE_DISCOVERY=1 -DENABLE_WIFI_BOOTSTRAPPING=1 -DV8_USE_EXTERNAL_STARTUP_DATA -DFULL_SAFE_BROWSING -DSAFE_BROWSING_CSD -DSAFE_BROWSING_DB_LOCAL -DSAFE_BROWSING_SERVICE -DUSE_LIBPCI=1 -DUSE_OPENSSL=1 -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -Igen -isysroot /Applications/Xcode5.1.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -O2 -gdwarf-2 -fvisibility=hidden -Werror -Wnewline-eof -mmacosx-version-min=10.6 -arch x86_64 -Wendif-labels -Wno-unused-parameter -Wno-missing-field-initializers -Wno-selector-type-mismatch -Wpartial-availability -Wheader-hygiene -Wno-char-subscripts -Wno-unneeded-internal-declaration -Wno-covered-switch-default -Wstring-conversion -Wno-c++11-narrowing -Wno-deprecated-register -Wno-inconsistent-missing-override -Wno-shift-negative-value -Wno-unused-function -Wno-unused-variable -std=c++11 -fno-rtti -fno-exceptions -fvisibility-inlines-hidden -fno-threadsafe-statics -Xclang -load -Xclang /b/build/slave/GPU_Mac_Builder/build/src/third_party/llvm-build/Release+Asserts/lib/libFindBadConstructs.dylib -Xclang -add-plugin -Xclang find-bad-constructs -Xclang -plugin-arg-find-bad-constructs -Xclang check-templates -fcolor-diagnostics -fno-strict-aliasing  -c ../../third_party/angle/src/compiler/preprocessor/ExpressionParser.cpp -o obj/third_party/angle/src/compiler/preprocessor/preprocessor.ExpressionParser.o
../../third_party/angle/src/compiler/preprocessor/ExpressionParser.cpp:1372:35: error: use of logical '||' with constant operand [-Werror,-Wconstant-logical-operand]
            (yyval) = (yyvsp[-3]) || 0;
                                  ^  ~
../../third_party/angle/src/compiler/preprocessor/ExpressionParser.cpp:1372:35: note: use '|' for a bitwise operation
            (yyval) = (yyvsp[-3]) || 0;
                                  ^~
                                  |
../../third_party/angle/src/compiler/preprocessor/ExpressionParser.cpp:1406:35: error: use of logical '&&' with constant operand [-Werror,-Wconstant-logical-operand]
            (yyval) = (yyvsp[-3]) && 0;
                                  ^  ~
../../third_party/angle/src/compiler/preprocessor/ExpressionParser.cpp:1406:35: note: use '&' for a bitwise operation
            (yyval) = (yyvsp[-3]) && 0;
                                  ^~
                                  &
../../third_party/angle/src/compiler/preprocessor/ExpressionParser.cpp:1406:35: note: remove constant to silence this warning
            (yyval) = (yyvsp[-3]) && 0;
                                 ~^~~~

BUG=angleproject:347

This reverts commit 6ffe613518482b966b913013c51221ce06ca7c33.

Change-Id: I6d81666cca573f320bfb1164a6c794b6f75f7463
Reviewed-on: https://chromium-review.googlesource.com/298020
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/compiler/preprocessor/ExpressionParser.y b/src/compiler/preprocessor/ExpressionParser.y
index c984b56..0933736 100644
--- a/src/compiler/preprocessor/ExpressionParser.y
+++ b/src/compiler/preprocessor/ExpressionParser.y
@@ -64,13 +64,6 @@
     pp::Lexer* lexer;
     pp::Token* token;
     int* result;
-
-    void startIgnoreErrors() { ++ignoreErrors; }
-    void endIgnoreErrors() { --ignoreErrors; }
-
-    bool isIgnoringErrors() { return ignoreErrors > 0; }
-
-    int ignoreErrors;
 };
 }  // namespace
 %}
@@ -86,7 +79,6 @@
 %}
 
 %token TOK_CONST_INT
-%token TOK_IDENTIFIER
 %left TOK_OP_OR
 %left TOK_OP_AND
 %left '|'
@@ -104,62 +96,17 @@
 input
     : expression {
         *(context->result) = static_cast<int>($1);
+        YYACCEPT;
     }
 ;
 
 expression
     : TOK_CONST_INT
-    | TOK_IDENTIFIER {
-        if (!context->isIgnoringErrors())
-        {
-            YYABORT;
-        }
+    | expression TOK_OP_OR expression {
+        $$ = $1 || $3;
     }
-    | expression TOK_OP_OR {
-        if ($1 != 0)
-        {
-            // Ignore errors in the short-circuited part of the expression.
-            // ESSL3.00 section 3.4:
-            // If an operand is not evaluated, the presence of undefined identifiers
-            // in the operand will not cause an error.
-            // Unevaluated division by zero should not cause an error either.
-            context->startIgnoreErrors();
-        }
-    } expression {
-        if ($1 != 0)
-        {
-            context->endIgnoreErrors();
-            // Make sure that short-circuited version of || works consistently
-            // with the normal version even for values other than 0 and 1.
-            $$ = $1 || 0;
-        }
-        else
-        {
-            $$ = $1 || $4;
-        }
-    }
-    | expression TOK_OP_AND {
-        if ($1 == 0)
-        {
-            // Ignore errors in the short-circuited part of the expression.
-            // ESSL3.00 section 3.4:
-            // If an operand is not evaluated, the presence of undefined identifiers
-            // in the operand will not cause an error.
-            // Unevaluated division by zero should not cause an error either.
-            context->startIgnoreErrors();
-        }
-    } expression {
-        if ($1 == 0)
-        {
-            context->endIgnoreErrors();
-            // Make sure that short-circuited version of && works consistently
-            // with the normal version even for values other than 0 and 1.
-            $$ = $1 && 0;
-        }
-        else
-        {
-            $$ = $1 && $4;
-        }
+    | expression TOK_OP_AND expression {
+        $$ = $1 && $3;
     }
     | expression '|' expression {
         $$ = $1 | $3;
@@ -201,48 +148,28 @@
         $$ = $1 + $3;
     }
     | expression '%' expression {
-        if ($3 == 0)
-        {
-            if (context->isIgnoringErrors())
-            {
-                $$ = static_cast<YYSTYPE>(0);
-            }
-            else
-            {
-                std::ostringstream stream;
-                stream << $1 << " % " << $3;
-                std::string text = stream.str();
-                context->diagnostics->report(pp::Diagnostics::PP_DIVISION_BY_ZERO,
-                                             context->token->location,
-                                             text.c_str());
-                YYABORT;
-            }
-        }
-        else
-        {
+        if ($3 == 0) {
+            std::ostringstream stream;
+            stream << $1 << " % " << $3;
+            std::string text = stream.str();
+            context->diagnostics->report(pp::Diagnostics::PP_DIVISION_BY_ZERO,
+                                         context->token->location,
+                                         text.c_str());
+            YYABORT;
+        } else {
             $$ = $1 % $3;
         }
     }
     | expression '/' expression {
-        if ($3 == 0)
-        {
-            if (context->isIgnoringErrors())
-            {
-                $$ = static_cast<YYSTYPE>(0);
-            }
-            else
-            {
-                std::ostringstream stream;
-                stream << $1 << " / " << $3;
-                std::string text = stream.str();
-                context->diagnostics->report(pp::Diagnostics::PP_DIVISION_BY_ZERO,
-                                            context->token->location,
-                                            text.c_str());
-                YYABORT;
-            }
-        }
-        else
-        {
+        if ($3 == 0) {
+            std::ostringstream stream;
+            stream << $1 << " / " << $3;
+            std::string text = stream.str();
+            context->diagnostics->report(pp::Diagnostics::PP_DIVISION_BY_ZERO,
+                                         context->token->location,
+                                         text.c_str());
+            YYABORT;
+        } else {
             $$ = $1 / $3;
         }
     }
@@ -286,15 +213,6 @@
         type = TOK_CONST_INT;
         break;
       }
-      case pp::Token::IDENTIFIER:
-        if (!context->isIgnoringErrors())
-        {
-            context->diagnostics->report(pp::Diagnostics::PP_CONDITIONAL_UNEXPECTED_TOKEN,
-                                         token->location, token->text);
-        }
-        *lvalp = static_cast<YYSTYPE>(-1);
-        type = TOK_IDENTIFIER;
-        break;
       case pp::Token::OP_OR:
         type = TOK_OP_OR;
         break;
@@ -369,7 +287,6 @@
     context.lexer = mLexer;
     context.token = token;
     context.result = result;
-    context.ignoreErrors = 0;
     int ret = yyparse(&context);
     switch (ret)
     {