diff --git a/core/fxcrt/bytestring.cpp b/core/fxcrt/bytestring.cpp
index 7563db4..b91e733 100644
--- a/core/fxcrt/bytestring.cpp
+++ b/core/fxcrt/bytestring.cpp
@@ -215,7 +215,7 @@
   return *this;
 }
 
-ByteString& ByteString::operator=(ByteString&& that) {
+ByteString& ByteString::operator=(ByteString&& that) noexcept {
   if (m_pData != that.m_pData)
     m_pData = std::move(that.m_pData);
 
diff --git a/core/fxcrt/bytestring.h b/core/fxcrt/bytestring.h
index 7c7f2ee..ec927b1 100644
--- a/core/fxcrt/bytestring.h
+++ b/core/fxcrt/bytestring.h
@@ -134,7 +134,7 @@
   ByteString& operator=(const ByteString& that);
 
   // Move-assign a ByteString. After assignment, |that| is empty.
-  ByteString& operator=(ByteString&& that);
+  ByteString& operator=(ByteString&& that) noexcept;
 
   ByteString& operator+=(char ch);
   ByteString& operator+=(const char* str);
diff --git a/core/fxcrt/maybe_owned.h b/core/fxcrt/maybe_owned.h
index bbdcd40..4e46864 100644
--- a/core/fxcrt/maybe_owned.h
+++ b/core/fxcrt/maybe_owned.h
@@ -63,7 +63,7 @@
   }
 
   MaybeOwned& operator=(const MaybeOwned& that) = delete;
-  MaybeOwned& operator=(MaybeOwned&& that) {
+  MaybeOwned& operator=(MaybeOwned&& that) noexcept {
     m_pObj = that.m_pObj;
     m_pOwnedObj = std::move(that.m_pOwnedObj);
     that.m_pObj = nullptr;
diff --git a/core/fxcrt/retain_ptr.h b/core/fxcrt/retain_ptr.h
index d58cbf0..b9fd495 100644
--- a/core/fxcrt/retain_ptr.h
+++ b/core/fxcrt/retain_ptr.h
@@ -69,7 +69,7 @@
   }
 
   // Move-assign a RetainPtr. After assignment, |that| will be NULL.
-  RetainPtr& operator=(RetainPtr&& that) {
+  RetainPtr& operator=(RetainPtr&& that) noexcept {
     m_pObj.reset(that.Leak());
     return *this;
   }
diff --git a/core/fxcrt/widestring.cpp b/core/fxcrt/widestring.cpp
index b51ed68..813f2b8 100644
--- a/core/fxcrt/widestring.cpp
+++ b/core/fxcrt/widestring.cpp
@@ -410,7 +410,7 @@
   return *this;
 }
 
-WideString& WideString::operator=(WideString&& that) {
+WideString& WideString::operator=(WideString&& that) noexcept {
   if (m_pData != that.m_pData)
     m_pData = std::move(that.m_pData);
 
diff --git a/core/fxcrt/widestring.h b/core/fxcrt/widestring.h
index ff53684..b455184 100644
--- a/core/fxcrt/widestring.h
+++ b/core/fxcrt/widestring.h
@@ -117,7 +117,7 @@
   WideString& operator=(const WideString& that);
 
   // Move-assign a WideString. After assignment, |that| is empty.
-  WideString& operator=(WideString&& that);
+  WideString& operator=(WideString&& that) noexcept;
 
   WideString& operator+=(const wchar_t* str);
   WideString& operator+=(wchar_t ch);
diff --git a/core/fxge/cfx_graphstatedata.cpp b/core/fxge/cfx_graphstatedata.cpp
index 43f6254..65ca19f 100644
--- a/core/fxge/cfx_graphstatedata.cpp
+++ b/core/fxge/cfx_graphstatedata.cpp
@@ -10,15 +10,16 @@
 
 CFX_GraphStateData::CFX_GraphStateData(const CFX_GraphStateData& src) = default;
 
-CFX_GraphStateData::CFX_GraphStateData(CFX_GraphStateData&& src) = default;
+CFX_GraphStateData::CFX_GraphStateData(CFX_GraphStateData&& src) noexcept =
+    default;
 
 CFX_GraphStateData::~CFX_GraphStateData() = default;
 
 CFX_GraphStateData& CFX_GraphStateData::operator=(
     const CFX_GraphStateData& that) = default;
 
-CFX_GraphStateData& CFX_GraphStateData::operator=(CFX_GraphStateData&& that) =
-    default;
+CFX_GraphStateData& CFX_GraphStateData::operator=(
+    CFX_GraphStateData&& that) noexcept = default;
 
 CFX_RetainableGraphStateData::CFX_RetainableGraphStateData() = default;
 
diff --git a/core/fxge/cfx_graphstatedata.h b/core/fxge/cfx_graphstatedata.h
index 005b299..d8f1251 100644
--- a/core/fxge/cfx_graphstatedata.h
+++ b/core/fxge/cfx_graphstatedata.h
@@ -28,11 +28,11 @@
 
   CFX_GraphStateData();
   CFX_GraphStateData(const CFX_GraphStateData& src);
-  CFX_GraphStateData(CFX_GraphStateData&& src);
+  CFX_GraphStateData(CFX_GraphStateData&& src) noexcept;
   ~CFX_GraphStateData();
 
   CFX_GraphStateData& operator=(const CFX_GraphStateData& that);
-  CFX_GraphStateData& operator=(CFX_GraphStateData&& that);
+  CFX_GraphStateData& operator=(CFX_GraphStateData&& that) noexcept;
 
   LineCap m_LineCap = LineCapButt;
   LineJoin m_LineJoin = LineJoinMiter;
diff --git a/core/fxge/cfx_pathdata.cpp b/core/fxge/cfx_pathdata.cpp
index 97b8716..d1ac1fb 100644
--- a/core/fxge/cfx_pathdata.cpp
+++ b/core/fxge/cfx_pathdata.cpp
@@ -189,7 +189,7 @@
 
 CFX_PathData::CFX_PathData(const CFX_PathData& src) = default;
 
-CFX_PathData::CFX_PathData(CFX_PathData&& src) = default;
+CFX_PathData::CFX_PathData(CFX_PathData&& src) noexcept = default;
 
 CFX_PathData::~CFX_PathData() = default;
 
diff --git a/core/fxge/cfx_pathdata.h b/core/fxge/cfx_pathdata.h
index e1c8589..8a2c53a 100644
--- a/core/fxge/cfx_pathdata.h
+++ b/core/fxge/cfx_pathdata.h
@@ -36,7 +36,7 @@
  public:
   CFX_PathData();
   CFX_PathData(const CFX_PathData& src);
-  CFX_PathData(CFX_PathData&& src);
+  CFX_PathData(CFX_PathData&& src) noexcept;
   ~CFX_PathData();
 
   void Clear();
diff --git a/xfa/fxfa/cxfa_eventparam.cpp b/xfa/fxfa/cxfa_eventparam.cpp
index 8e88b62..ae5f392 100644
--- a/xfa/fxfa/cxfa_eventparam.cpp
+++ b/xfa/fxfa/cxfa_eventparam.cpp
@@ -18,7 +18,8 @@
 CXFA_EventParam& CXFA_EventParam::operator=(const CXFA_EventParam& other) =
     default;
 
-CXFA_EventParam& CXFA_EventParam::operator=(CXFA_EventParam&& other) = default;
+CXFA_EventParam& CXFA_EventParam::operator=(CXFA_EventParam&& other) noexcept =
+    default;
 
 WideString CXFA_EventParam::GetNewText() const {
   return m_wsPrevText.First(m_iSelStart) + m_wsChange +
diff --git a/xfa/fxfa/cxfa_eventparam.h b/xfa/fxfa/cxfa_eventparam.h
index 3900de9..6159d37 100644
--- a/xfa/fxfa/cxfa_eventparam.h
+++ b/xfa/fxfa/cxfa_eventparam.h
@@ -57,7 +57,7 @@
   ~CXFA_EventParam();
 
   CXFA_EventParam& operator=(const CXFA_EventParam& other);
-  CXFA_EventParam& operator=(CXFA_EventParam&& other);
+  CXFA_EventParam& operator=(CXFA_EventParam&& other) noexcept;
 
   WideString GetNewText() const;
 
