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:
