From 6ab36cdf55a4aa71200853ab75f3532831f1adab Mon Sep 17 00:00:00 2001 From: Tomas Popela Date: Thu, 15 Aug 2019 21:14:35 +0200 Subject: [PATCH] Backport and create more of the GCC fixes --- ...09.100-gcc-accountinfo-move-noexcept.patch | 53 +++++++++++++++++++ ...0.3809.100-gcc-history-move-noexcept.patch | 42 +++++++++++++++ ...0.3809.100-gcc-no-alignas-and-export.patch | 14 +++++ ...0.3809.100-gcc-themeservice-includes.patch | 36 +++++++++++++ chromium.spec | 14 +++++ 5 files changed, 159 insertions(+) create mode 100644 chromium-76.0.3809.100-gcc-accountinfo-move-noexcept.patch create mode 100644 chromium-76.0.3809.100-gcc-history-move-noexcept.patch create mode 100644 chromium-76.0.3809.100-gcc-no-alignas-and-export.patch create mode 100644 chromium-76.0.3809.100-gcc-themeservice-includes.patch diff --git a/chromium-76.0.3809.100-gcc-accountinfo-move-noexcept.patch b/chromium-76.0.3809.100-gcc-accountinfo-move-noexcept.patch new file mode 100644 index 00000000..5f45a8ff --- /dev/null +++ b/chromium-76.0.3809.100-gcc-accountinfo-move-noexcept.patch @@ -0,0 +1,53 @@ +From 719df31ffd4d52b473509cf77acd9c02ec112acb Mon Sep 17 00:00:00 2001 +From: Jose Dapena Paz +Date: Tue, 04 Jun 2019 18:38:12 +0200 +Subject: [PATCH] GCC: fix noexcept from move constructor and assign operators of AccountInfo + +AccountInfo declares them as noexcept and uses default implementation, +so all its members (including AccountId) should be noexcept. But AccountId +is not noexcept. To fix it we just need to make CoreAccountId move +operator/assign operator noexcept. + +Bug: 819294 +Change-Id: Ice38654ab7cf3b9eaa6f54aa36e1fec329264f98 +--- + +diff --git a/google_apis/gaia/core_account_id.cc b/google_apis/gaia/core_account_id.cc +index d808082..12eefe3 100644 +--- a/google_apis/gaia/core_account_id.cc ++++ b/google_apis/gaia/core_account_id.cc +@@ -6,8 +6,16 @@ + + CoreAccountId::CoreAccountId() = default; + ++CoreAccountId::CoreAccountId(const CoreAccountId&) = default; ++ ++CoreAccountId::CoreAccountId(CoreAccountId&&) noexcept = default; ++ + CoreAccountId::~CoreAccountId() = default; + ++CoreAccountId& CoreAccountId::operator=(const CoreAccountId&) = default; ++ ++CoreAccountId& CoreAccountId::operator=(CoreAccountId&&) noexcept = default; ++ + CoreAccountId::CoreAccountId(const char* id) : id(id) {} + + CoreAccountId::CoreAccountId(std::string&& id) : id(std::move(id)) {} +diff --git a/google_apis/gaia/core_account_id.h b/google_apis/gaia/core_account_id.h +index 5ea602a..c2d1911 100644 +--- a/google_apis/gaia/core_account_id.h ++++ b/google_apis/gaia/core_account_id.h +@@ -14,8 +14,13 @@ + // for design and tracking). + struct CoreAccountId { + CoreAccountId(); ++ CoreAccountId(const CoreAccountId&); ++ CoreAccountId(CoreAccountId&&) noexcept; + ~CoreAccountId(); + ++ CoreAccountId& operator=(const CoreAccountId&); ++ CoreAccountId& operator=(CoreAccountId&&) noexcept; ++ + // Those implicit constructor and conversion operator allow to + // progressively migrate the code to use this struct. Removing + // them is tracked by https://crbug.com/959161 diff --git a/chromium-76.0.3809.100-gcc-history-move-noexcept.patch b/chromium-76.0.3809.100-gcc-history-move-noexcept.patch new file mode 100644 index 00000000..2876de43 --- /dev/null +++ b/chromium-76.0.3809.100-gcc-history-move-noexcept.patch @@ -0,0 +1,42 @@ +From abe74a7f0c53a43a9706a42d71b7ff4a5da53380 Mon Sep 17 00:00:00 2001 +From: Jose Dapena Paz +Date: Tue, 11 Jun 2019 10:27:19 +0200 +Subject: [PATCH] GCC: add noexcept move assignment in history::URLRow + +In GCC, build is failing because history::QueryURLResult declares its move +assignment operator as noexcept using default implementation. That requires +its members to provide a move assignment operator that is noexcept too. + +But URLRow was missing noexcept declaration in move assignment operator (even +though it was providing noexcept to its move constructor). + +Bug: 819294 +Change-Id: I726e3cf7a4a50c9206a5d0fba8a561d363483d4f +--- + +diff --git a/components/history/core/browser/url_row.cc b/components/history/core/browser/url_row.cc +index 44c22fd..aec0101 100644 +--- a/components/history/core/browser/url_row.cc ++++ b/components/history/core/browser/url_row.cc +@@ -26,7 +26,7 @@ + } + + URLRow& URLRow::operator=(const URLRow& other) = default; +-URLRow& URLRow::operator=(URLRow&& other) = default; ++URLRow& URLRow::operator=(URLRow&& other) noexcept = default; + + void URLRow::Swap(URLRow* other) { + std::swap(id_, other->id_); +diff --git a/components/history/core/browser/url_row.h b/components/history/core/browser/url_row.h +index 8f6f9cf..31a1ef8 100644 +--- a/components/history/core/browser/url_row.h ++++ b/components/history/core/browser/url_row.h +@@ -35,7 +35,7 @@ + + virtual ~URLRow(); + URLRow& operator=(const URLRow& other); +- URLRow& operator=(URLRow&& other); ++ URLRow& operator=(URLRow&& other) noexcept; + + URLID id() const { return id_; } + diff --git a/chromium-76.0.3809.100-gcc-no-alignas-and-export.patch b/chromium-76.0.3809.100-gcc-no-alignas-and-export.patch new file mode 100644 index 00000000..cc91d1ef --- /dev/null +++ b/chromium-76.0.3809.100-gcc-no-alignas-and-export.patch @@ -0,0 +1,14 @@ +diff -up chromium-76.0.3809.100/third_party/blink/renderer/core/css/css_property_value_set.h.gcc-no-alignas chromium-76.0.3809.100/third_party/blink/renderer/core/css/css_property_value_set.h +--- chromium-76.0.3809.100/third_party/blink/renderer/core/css/css_property_value_set.h.gcc-no-alignas 2019-08-09 16:48:13.000000000 +0200 ++++ chromium-76.0.3809.100/third_party/blink/renderer/core/css/css_property_value_set.h 2019-08-15 21:04:30.231532746 +0200 +@@ -176,8 +176,8 @@ class CSSLazyPropertyParser + DISALLOW_COPY_AND_ASSIGN(CSSLazyPropertyParser); + }; + +-class CORE_EXPORT alignas(Member) alignas( +- CSSPropertyValueMetadata) ImmutableCSSPropertyValueSet ++class CORE_EXPORT ALIGNAS(alignof(Member)) ++ ALIGNAS(alignof(CSSPropertyValueMetadata)) ImmutableCSSPropertyValueSet + : public CSSPropertyValueSet { + public: + ImmutableCSSPropertyValueSet(const CSSPropertyValue*, diff --git a/chromium-76.0.3809.100-gcc-themeservice-includes.patch b/chromium-76.0.3809.100-gcc-themeservice-includes.patch new file mode 100644 index 00000000..ad40bb9e --- /dev/null +++ b/chromium-76.0.3809.100-gcc-themeservice-includes.patch @@ -0,0 +1,36 @@ +From d08ea83acc2f5ff395c1fe54f52687e92fe51c3b Mon Sep 17 00:00:00 2001 +From: Jose Dapena Paz +Date: Tue, 04 Jun 2019 22:01:03 +0200 +Subject: [PATCH] IWYU: ThemeService requires NativeTheme + +As ThemeService referes to NativeTheme through a ScopedObserver, +the full declaration is required. + +Bug: 819294 +Change-Id: I9d5bd2e87cfaa76e87f9b5509daea24848906a63 +--- + +diff --git a/chrome/browser/themes/theme_service.cc b/chrome/browser/themes/theme_service.cc +index d65388e2..23dc86d 100644 +--- a/chrome/browser/themes/theme_service.cc ++++ b/chrome/browser/themes/theme_service.cc +@@ -54,7 +54,6 @@ + #include "ui/gfx/color_palette.h" + #include "ui/gfx/image/image_skia.h" + #include "ui/native_theme/common_theme.h" +-#include "ui/native_theme/native_theme.h" + + #if BUILDFLAG(ENABLE_EXTENSIONS) + #include "base/scoped_observer.h" +diff --git a/chrome/browser/themes/theme_service.h b/chrome/browser/themes/theme_service.h +index 6c79c72..f93dc0d 100644 +--- a/chrome/browser/themes/theme_service.h ++++ b/chrome/browser/themes/theme_service.h +@@ -25,6 +25,7 @@ + #include "extensions/buildflags/buildflags.h" + #include "extensions/common/extension_id.h" + #include "ui/base/theme_provider.h" ++#include "ui/native_theme/native_theme.h" + #include "ui/native_theme/native_theme_observer.h" + + class BrowserThemePack; diff --git a/chromium.spec b/chromium.spec index 64e3243d..de9e05b0 100644 --- a/chromium.spec +++ b/chromium.spec @@ -291,6 +291,16 @@ Patch55: chromium-76.0.3809.100-gcc-hasfraction-constexpr.patch Patch56: chromium-76.0.3809.100-gcc-move-explicit-initialization.patch # https://chromium.googlesource.com/chromium/src.git/+/7dc76c8d9f4cfbce7cf11424120aa6f6094916dc Patch57: chromium-76.0.3809.100-gcc-initialization-order.patch +# https://chromium.googlesource.com/chromium/src.git/+/138904af5d6a4158ef4247fda816a8035e621e59 +Patch58: chromium-76.0.3809.100-gcc-history-move-noexcept.patch +# https://chromium.googlesource.com/chromium/src.git/+/bdc24128b75008743d819e298557a53205706e7c +Patch59: chromium-76.0.3809.100-gcc-accountinfo-move-noexcept.patch +# https://chromium.googlesource.com/chromium/src.git/+/5d7f227fa844e79568df64e495e7ef958c12d7b2 +Patch60: chromium-76.0.3809.100-gcc-themeservice-includes.patch +# TBD - need to submit it +# In GCC one can't use alignas() for exported classes (as described in +# https://cs.chromium.org/chromium/src/base/compiler_specific.h?rcl=a5bcc05a48f6cc6299edfaf0179278aa03653ee4&l=103) +Patch61: chromium-76.0.3809.100-gcc-no-alignas-and-export.patch # Apply these changes to work around EPEL7 compiler issues Patch100: chromium-62.0.3202.62-kmaxskip-constexpr.patch @@ -860,6 +870,10 @@ udev. %patch55 -p1 -b .gcc-hasfraction-constexpr %patch56 -p1 -b .gcc-move-explicit-initialization %patch57 -p1 -b .gcc-initialization-order +%patch58 -p1 -b .gcc-history-move-noexcept +%patch59 -p1 -b .gcc-accountinfo-move-noexcept +%patch60 -p1 -b .gcc-themeservice-includes +%patch61 -p1 -b .gcc-no-alignas-and-export # EPEL specific patches %if 0%{?rhel} == 7