Fix Wvarargs warning in XFA error code.

Chrome has enabled the -Wvarargs warning that was added to clang, this fails
with PDFium XFA builds due to two warnings:

../../xfa/fxfa/fm2js/xfa_lexer.cpp:539:16: error: passing an object that
undergoes default argument promotion to 'va_start' has undefined behavior
[-Werror,-Wvarargs]
  va_start(ap, msg);
               ^
../../xfa/fxfa/fm2js/xfa_lexer.cpp:535:40: note: parameter of type
'XFA_FM_ERRMSG' is declared here
void CXFA_FMLexer::Error(XFA_FM_ERRMSG msg, ...) {

The issue is that XFA_FM_ERRMSG is an enum and we violate the promotion rules
for passing the value to va_start.

I removed the enum and named the flags explicitly then pass in the string as
the argument.

BUG=chromium:606726

Review URL: https://codereview.chromium.org/1921323002
diff --git a/DEPS b/DEPS
index 9bfcec6..7fb3a32 100644
--- a/DEPS
+++ b/DEPS
@@ -4,9 +4,9 @@
   'chromium_git': 'https://chromium.googlesource.com',
   'pdfium_git': 'https://pdfium.googlesource.com',
 
-  'build_revision': '2f91397926336dd46ea49ffef702197b9cc2215a',
+  'build_revision': '28e8fda8744c8c44bac72eee610642798daf2705',
   'buildtools_revision': '5378d73123b64907773cc5c1bb027b2f765ff00a',
-  'clang_revision': '2956eca572ff0e1b181df65f71a045f061a2eb34',
+  'clang_revision': 'b6f620b311665e2d96d0921833f54295b9bbf925',
   'cygwin_revision': 'c89e446b273697fadf3a10ff1007a97c0b7de6df',
   'gmock_revision': '29763965ab52f24565299976b936d1265cb6a271',
   'gtest_revision': '8245545b6dc9c4703e6496d1efd19e975ad2b038',
@@ -14,7 +14,7 @@
   'pdfium_tests_revision': '7e5050a49256a7350df9b8d7ad86e911eb83c021',
   'skia_revision': '0a291c7b7eea1807bd58bdaa60c258fd0ebeb257',
   'trace_event_revision': 'd83d44b13d07c2fd0a40101a7deef9b93b841732',
-  'v8_revision': '0ff89ea75b3807d751c8cc7bb955a4325776de71',
+  'v8_revision': '5cd0d8f27e3f740179a8a3de7b9d2c0cfae7afb9',
 
 }
 
diff --git a/build_gyp/standalone.gypi b/build_gyp/standalone.gypi
index 4b5b740..ad7ebda 100644
--- a/build_gyp/standalone.gypi
+++ b/build_gyp/standalone.gypi
@@ -394,7 +394,10 @@
       ],
     },
     'variables': {
-      'clang_warning_flags': [],
+      'clang_warning_flags': [
+        # TODO(thakis): https://crbug.com/604888
+        '-Wno-undefined-var-template',
+      ],
     },
     'includes': [ 'set_clang_warning_flags.gypi', ],
     'conditions': [
diff --git a/build_overrides/v8.gni b/build_overrides/v8.gni
index 2f3c079..2b50795 100644
--- a/build_overrides/v8.gni
+++ b/build_overrides/v8.gni
@@ -6,6 +6,7 @@
   import("//build/config/android/config.gni")
 }
 
+v8_optimized_debug = true
 v8_use_external_startup_data = false
 
 # V8 extras
diff --git a/xfa/fxfa/fm2js/xfa_error.cpp b/xfa/fxfa/fm2js/xfa_error.cpp
index 69ce608..020d9bc 100644
--- a/xfa/fxfa/fm2js/xfa_error.cpp
+++ b/xfa/fxfa/fm2js/xfa_error.cpp
@@ -6,16 +6,12 @@
 
 #include "xfa/fxfa/fm2js/xfa_error.h"
 
-static const FX_WCHAR* const gs_lpStrErrorMsgInfo[] = {
-    L"unsupported char '%c'",         L"bad suffix on number",
-    L"invalidate char '%c'",          L"expected identifier instead of '%s'",
-    L"expected '%s' instead of '%s'", L"expected 'endif' instead of '%s'",
-    L"unexpected expression '%s'",    L"expected operator '%s' instead of '%s'",
-    L"expected non-empty expression",
-};
-
-const FX_WCHAR* XFA_FM_ErrorMsg(XFA_FM_ERRMSG msg) {
-  if (msg < FMERR_MAXIMUM)
-    return gs_lpStrErrorMsgInfo[msg];
-  return L"";
-}
+const FX_WCHAR kFMErrUnsupportedChar[] = L"unsupported char '%c'";
+const FX_WCHAR kFMErrBadSuffixNumber[] = L"bad suffix on number";
+const FX_WCHAR kFMErrExpectedIdentifier[] =
+    L"expected identifier instead of '%s'";
+const FX_WCHAR kFMErrExpectedToken[] = L"expected '%s' instead of '%s'";
+const FX_WCHAR kFMErrExpectedEndIf[] = L"expected 'endif' instead of '%s'";
+const FX_WCHAR kFMErrUnexpectedExpression[] = L"unexpected expression '%s'";
+const FX_WCHAR kFMErrExpectedNonEmptyExpression[] =
+    L"expected non-empty expression";
diff --git a/xfa/fxfa/fm2js/xfa_error.h b/xfa/fxfa/fm2js/xfa_error.h
index 2415cd3..6ce102e 100644
--- a/xfa/fxfa/fm2js/xfa_error.h
+++ b/xfa/fxfa/fm2js/xfa_error.h
@@ -10,18 +10,13 @@
 #include "core/fxcrt/include/fx_string.h"
 #include "core/fxcrt/include/fx_system.h"
 
-enum XFA_FM_ERRMSG {
-  FMERR_UNSUPPORTED_CHAR,
-  FMERR_BAD_SUFFIX_NUMBER,
-  FMERR_INVALIDATE_CHAR,
-  FMERR_EXPECTED_IDENTIFIER,
-  FMERR_EXPECTED_TOKEN,
-  FMERR_EXPECTED_IFEND,
-  FMERR_UNEXPECTED_EXPRESSION,
-  FMERR_EXPTECTED_OPERATOR,
-  FMERR_EXPECTED_NON_EMPTY_EXPRESSION,
-  FMERR_MAXIMUM
-};
+extern const FX_WCHAR kFMErrUnsupportedChar[];
+extern const FX_WCHAR kFMErrBadSuffixNumber[];
+extern const FX_WCHAR kFMErrExpectedIdentifier[];
+extern const FX_WCHAR kFMErrExpectedToken[];
+extern const FX_WCHAR kFMErrExpectedEndIf[];
+extern const FX_WCHAR kFMErrUnexpectedExpression[];
+extern const FX_WCHAR kFMErrExpectedNonEmptyExpression[];
 
 class CXFA_FMErrorInfo {
  public:
@@ -30,6 +25,5 @@
   uint32_t linenum;
   CFX_WideString message;
 };
-const FX_WCHAR* XFA_FM_ErrorMsg(XFA_FM_ERRMSG msg);
 
 #endif  // XFA_FXFA_FM2JS_XFA_ERROR_H_
diff --git a/xfa/fxfa/fm2js/xfa_fmparse.cpp b/xfa/fxfa/fm2js/xfa_fmparse.cpp
index c99f015..a917e23 100644
--- a/xfa/fxfa/fm2js/xfa_fmparse.cpp
+++ b/xfa/fxfa/fm2js/xfa_fmparse.cpp
@@ -30,18 +30,17 @@
 void CXFA_FMParse::Check(XFA_FM_TOKEN op) {
   if (m_pToken->m_type != op) {
     CFX_WideString ws_TempString = m_pToken->m_wstring;
-    Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN,
-          XFA_FM_KeywordToString(op), ws_TempString.c_str());
+    Error(m_pToken->m_uLinenum, kFMErrExpectedToken, XFA_FM_KeywordToString(op),
+          ws_TempString.c_str());
   }
   NextToken();
 }
 
-void CXFA_FMParse::Error(uint32_t lineNum, XFA_FM_ERRMSG msg, ...) {
+void CXFA_FMParse::Error(uint32_t lineNum, const FX_WCHAR* msg, ...) {
   m_pErrorInfo->linenum = lineNum;
-  const FX_WCHAR* lpMessageInfo = XFA_FM_ErrorMsg(msg);
   va_list ap;
   va_start(ap, msg);
-  m_pErrorInfo->message.FormatV(lpMessageInfo, ap);
+  m_pErrorInfo->message.FormatV(msg, ap);
   va_end(ap);
 }
 
@@ -83,7 +82,7 @@
   NextToken();
   if (m_pToken->m_type != TOKidentifier) {
     CFX_WideString ws_TempString = m_pToken->m_wstring;
-    Error(m_pToken->m_uLinenum, FMERR_EXPECTED_IDENTIFIER,
+    Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier,
           ws_TempString.c_str());
   } else {
     ident = m_pToken->m_wstring;
@@ -112,7 +111,7 @@
         }
       } else {
         CFX_WideString ws_TempString = m_pToken->m_wstring;
-        Error(m_pToken->m_uLinenum, FMERR_EXPECTED_IDENTIFIER,
+        Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier,
               ws_TempString.c_str());
         NextToken();
         break;
@@ -182,7 +181,7 @@
       break;
     default:
       CFX_WideString ws_TempString = m_pToken->m_wstring;
-      Error(m_pToken->m_uLinenum, FMERR_UNEXPECTED_EXPRESSION,
+      Error(m_pToken->m_uLinenum, kFMErrUnexpectedExpression,
             ws_TempString.c_str());
       NextToken();
       break;
@@ -197,7 +196,7 @@
   NextToken();
   if (m_pToken->m_type != TOKidentifier) {
     CFX_WideString ws_TempString = m_pToken->m_wstring;
-    Error(m_pToken->m_uLinenum, FMERR_EXPECTED_IDENTIFIER,
+    Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier,
           ws_TempString.c_str());
   } else {
     ident = m_pToken->m_wstring;
@@ -533,7 +532,7 @@
       break;
     default:
       CFX_WideString ws_TempString = m_pToken->m_wstring;
-      Error(m_pToken->m_uLinenum, FMERR_UNEXPECTED_EXPRESSION,
+      Error(m_pToken->m_uLinenum, kFMErrUnexpectedExpression,
             ws_TempString.c_str());
       NextToken();
       break;
@@ -568,7 +567,7 @@
           }
           if (m_pToken->m_type != TOKrparen) {
             CFX_WideString ws_TempString = m_pToken->m_wstring;
-            Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN,
+            Error(m_pToken->m_uLinenum, kFMErrExpectedToken,
                   XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str());
           }
         }
@@ -621,7 +620,7 @@
               }
               if (m_pToken->m_type != TOKrparen) {
                 CFX_WideString ws_TempString = m_pToken->m_wstring;
-                Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN,
+                Error(m_pToken->m_uLinenum, kFMErrExpectedToken,
                       XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str());
               }
             }
@@ -669,7 +668,7 @@
           }
         } else {
           CFX_WideString ws_TempString = m_pToken->m_wstring;
-          Error(m_pToken->m_uLinenum, FMERR_EXPECTED_IDENTIFIER,
+          Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier,
                 ws_TempString.c_str());
           return e;
         }
@@ -697,7 +696,7 @@
           }
         } else {
           CFX_WideString ws_TempString = m_pToken->m_wstring;
-          Error(m_pToken->m_uLinenum, FMERR_EXPECTED_IDENTIFIER,
+          Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier,
                 ws_TempString.c_str());
           return e;
         }
@@ -725,7 +724,7 @@
           }
         } else {
           CFX_WideString ws_TempString = m_pToken->m_wstring;
-          Error(m_pToken->m_uLinenum, FMERR_EXPECTED_IDENTIFIER,
+          Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier,
                 ws_TempString.c_str());
           return e;
         }
@@ -756,7 +755,7 @@
     NextToken();
     if (m_pToken->m_type != TOKrbracket) {
       CFX_WideString ws_TempString = m_pToken->m_wstring;
-      Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN,
+      Error(m_pToken->m_uLinenum, kFMErrExpectedToken,
             XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str());
       pExp.reset();
     }
@@ -772,7 +771,7 @@
   s.reset(ParseSimpleExpression());
   if (m_pToken->m_type != TOKrbracket) {
     CFX_WideString ws_TempString = m_pToken->m_wstring;
-    Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN,
+    Error(m_pToken->m_uLinenum, kFMErrExpectedToken,
           XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str());
   } else {
     pExp.reset(
@@ -785,7 +784,7 @@
   Check(TOKlparen);
 
   if (m_pToken->m_type == TOKrparen) {
-    Error(m_pToken->m_uLinenum, FMERR_EXPECTED_NON_EMPTY_EXPRESSION);
+    Error(m_pToken->m_uLinenum, kFMErrExpectedNonEmptyExpression);
     NextToken();
     return nullptr;
   }
@@ -892,7 +891,7 @@
       break;
     default:
       CFX_WideString ws_TempString = m_pToken->m_wstring;
-      Error(m_pToken->m_uLinenum, FMERR_EXPECTED_IFEND, ws_TempString.c_str());
+      Error(m_pToken->m_uLinenum, kFMErrExpectedEndIf, ws_TempString.c_str());
       NextToken();
       break;
   }
@@ -928,7 +927,7 @@
       break;
     default:
       CFX_WideString ws_TempString = m_pToken->m_wstring;
-      Error(m_pToken->m_uLinenum, FMERR_UNEXPECTED_EXPRESSION,
+      Error(m_pToken->m_uLinenum, kFMErrUnexpectedExpression,
             ws_TempString.c_str());
       NextToken();
       break;
@@ -942,7 +941,7 @@
   NextToken();
   if (m_pToken->m_type != TOKidentifier) {
     CFX_WideString ws_TempString = m_pToken->m_wstring;
-    Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN,
+    Error(m_pToken->m_uLinenum, kFMErrExpectedToken,
           XFA_FM_KeywordToString(m_pToken->m_type), ws_TempString.c_str());
   }
   wsVariant = m_pToken->m_wstring;
@@ -953,7 +952,7 @@
     pAssignment.reset(ParseSimpleExpression());
   } else {
     CFX_WideString ws_TempString = m_pToken->m_wstring;
-    Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN,
+    Error(m_pToken->m_uLinenum, kFMErrExpectedToken,
           XFA_FM_KeywordToString(m_pToken->m_type), ws_TempString.c_str());
   }
   int32_t iDirection = 0;
@@ -963,7 +962,7 @@
     iDirection = -1;
   } else {
     CFX_WideString ws_TempString = m_pToken->m_wstring;
-    Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN, L"upto or downto",
+    Error(m_pToken->m_uLinenum, kFMErrExpectedToken, L"upto or downto",
           ws_TempString.c_str());
   }
   NextToken();
@@ -994,7 +993,7 @@
   NextToken();
   if (m_pToken->m_type != TOKidentifier) {
     CFX_WideString ws_TempString = m_pToken->m_wstring;
-    Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN,
+    Error(m_pToken->m_uLinenum, kFMErrExpectedToken,
           XFA_FM_KeywordToString(m_pToken->m_type), ws_TempString.c_str());
   }
   wsIdentifier = m_pToken->m_wstring;
@@ -1003,7 +1002,7 @@
   Check(TOKlparen);
   if (m_pToken->m_type == TOKrparen) {
     CFX_WideString ws_TempString = m_pToken->m_wstring;
-    Error(m_pToken->m_uLinenum, FMERR_UNEXPECTED_EXPRESSION,
+    Error(m_pToken->m_uLinenum, kFMErrUnexpectedExpression,
           ws_TempString.c_str());
     NextToken();
   } else {
diff --git a/xfa/fxfa/fm2js/xfa_fmparse.h b/xfa/fxfa/fm2js/xfa_fmparse.h
index 288ae90..014ecce 100644
--- a/xfa/fxfa/fm2js/xfa_fmparse.h
+++ b/xfa/fxfa/fm2js/xfa_fmparse.h
@@ -18,7 +18,7 @@
   int32_t Init(const CFX_WideStringC& wsFormcalc, CXFA_FMErrorInfo* pErrorInfo);
   void NextToken();
   void Check(XFA_FM_TOKEN op);
-  void Error(uint32_t lineNum, XFA_FM_ERRMSG msg, ...);
+  void Error(uint32_t lineNum, const FX_WCHAR* msg, ...);
   CFX_PtrArray* ParseTopExpression();
   CXFA_FMExpression* ParseFunction();
   CXFA_FMExpression* ParseExpression();
diff --git a/xfa/fxfa/fm2js/xfa_lexer.cpp b/xfa/fxfa/fm2js/xfa_lexer.cpp
index dd3b48f..f048f42 100644
--- a/xfa/fxfa/fm2js/xfa_lexer.cpp
+++ b/xfa/fxfa/fm2js/xfa_lexer.cpp
@@ -177,14 +177,14 @@
   CXFA_FMToken* p = new CXFA_FMToken(m_uCurrentLine);
   if (!XFA_FMDChar::isAvalid(m_ptr)) {
     ch = XFA_FMDChar::get(m_ptr);
-    Error(FMERR_UNSUPPORTED_CHAR, ch);
+    Error(kFMErrUnsupportedChar, ch);
     return p;
   }
   int iRet = 0;
   while (1) {
     if (!XFA_FMDChar::isAvalid(m_ptr)) {
       ch = XFA_FMDChar::get(m_ptr);
-      Error(FMERR_UNSUPPORTED_CHAR, ch);
+      Error(kFMErrUnsupportedChar, ch);
       return p;
     }
     ch = XFA_FMDChar::get(m_ptr);
@@ -227,7 +227,7 @@
         iRet = Number(p, m_ptr, pTemp);
         m_ptr = pTemp;
         if (iRet) {
-          Error(FMERR_BAD_SUFFIX_NUMBER);
+          Error(kFMErrBadSuffixNumber);
           return p;
         }
       }
@@ -246,7 +246,7 @@
           }
         } else {
           ch = XFA_FMDChar::get(m_ptr);
-          Error(FMERR_UNSUPPORTED_CHAR, ch);
+          Error(kFMErrUnsupportedChar, ch);
           return p;
         }
         break;
@@ -268,7 +268,7 @@
           }
         } else {
           ch = XFA_FMDChar::get(m_ptr);
-          Error(FMERR_UNSUPPORTED_CHAR, ch);
+          Error(kFMErrUnsupportedChar, ch);
           return p;
         }
         break;
@@ -286,7 +286,7 @@
           }
         } else {
           ch = XFA_FMDChar::get(m_ptr);
-          Error(FMERR_UNSUPPORTED_CHAR, ch);
+          Error(kFMErrUnsupportedChar, ch);
           return p;
         }
         break;
@@ -345,7 +345,7 @@
           }
         } else {
           ch = XFA_FMDChar::get(m_ptr);
-          Error(FMERR_UNSUPPORTED_CHAR, ch);
+          Error(kFMErrUnsupportedChar, ch);
           return p;
         }
         break;
@@ -372,7 +372,7 @@
             iRet = Number(p, m_ptr, pTemp);
             m_ptr = pTemp;
             if (iRet) {
-              Error(FMERR_BAD_SUFFIX_NUMBER);
+              Error(kFMErrBadSuffixNumber);
             }
             return p;
           } else {
@@ -381,7 +381,7 @@
           }
         } else {
           ch = XFA_FMDChar::get(m_ptr);
-          Error(FMERR_UNSUPPORTED_CHAR, ch);
+          Error(kFMErrUnsupportedChar, ch);
           return p;
         }
       case 0x09:
@@ -430,7 +430,7 @@
       ch = XFA_FMDChar::get(p);
       pEnd = p;
       t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart));
-      Error(FMERR_UNSUPPORTED_CHAR, ch);
+      Error(kFMErrUnsupportedChar, ch);
       return 1;
     }
     if (ch == '"') {
@@ -439,7 +439,7 @@
         ch = XFA_FMDChar::get(p);
         pEnd = p;
         t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart));
-        Error(FMERR_UNSUPPORTED_CHAR, ch);
+        Error(kFMErrUnsupportedChar, ch);
         return 1;
       }
       ch = XFA_FMDChar::get(p);
@@ -468,7 +468,7 @@
   if (!XFA_FMDChar::isAvalid(p)) {
     pEnd = p;
     t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart));
-    Error(FMERR_UNSUPPORTED_CHAR, ch);
+    Error(kFMErrUnsupportedChar, ch);
     return 1;
   }
   ch = XFA_FMDChar::get(p);
@@ -476,7 +476,7 @@
     if (!XFA_FMDChar::isAvalid(p)) {
       pEnd = p;
       t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart));
-      Error(FMERR_UNSUPPORTED_CHAR, ch);
+      Error(kFMErrUnsupportedChar, ch);
       return 1;
     }
     ch = XFA_FMDChar::get(p);
@@ -532,12 +532,11 @@
   return TOKidentifier;
 }
 
-void CXFA_FMLexer::Error(XFA_FM_ERRMSG msg, ...) {
+void CXFA_FMLexer::Error(const FX_WCHAR* msg, ...) {
   m_pErrorInfo->linenum = m_uCurrentLine;
-  const FX_WCHAR* lpMessageInfo = XFA_FM_ErrorMsg(msg);
   va_list ap;
   va_start(ap, msg);
-  m_pErrorInfo->message.FormatV(lpMessageInfo, ap);
+  m_pErrorInfo->message.FormatV(msg, ap);
   va_end(ap);
 }
 
diff --git a/xfa/fxfa/fm2js/xfa_lexer.h b/xfa/fxfa/fm2js/xfa_lexer.h
index fd89dc7..c21c002 100644
--- a/xfa/fxfa/fm2js/xfa_lexer.h
+++ b/xfa/fxfa/fm2js/xfa_lexer.h
@@ -119,7 +119,7 @@
   }
   const FX_WCHAR* SavePos() { return m_ptr; }
   void RestorePos(const FX_WCHAR* pPos) { m_ptr = pPos; }
-  void Error(XFA_FM_ERRMSG msg, ...);
+  void Error(const FX_WCHAR* msg, ...);
   FX_BOOL HasError() const;
 
  protected: