summaryrefslogtreecommitdiff
path: root/www-client/chromium/files/chromium-79-gcc-permissive.patch
diff options
context:
space:
mode:
Diffstat (limited to 'www-client/chromium/files/chromium-79-gcc-permissive.patch')
-rw-r--r--www-client/chromium/files/chromium-79-gcc-permissive.patch79
1 files changed, 79 insertions, 0 deletions
diff --git a/www-client/chromium/files/chromium-79-gcc-permissive.patch b/www-client/chromium/files/chromium-79-gcc-permissive.patch
new file mode 100644
index 000000000000..c42d56985a68
--- /dev/null
+++ b/www-client/chromium/files/chromium-79-gcc-permissive.patch
@@ -0,0 +1,79 @@
+From 528e9a3e1f25bd264549c4c7779748abfd16bb1c Mon Sep 17 00:00:00 2001
+From: Jan Wilken Dörrie <jdoerrie@chromium.org>
+Date: Fri, 18 Oct 2019 11:45:24 +0000
+Subject: [PATCH] Reland "GCC: Fix base::internal::InvokeFuncImpl"
+
+This is a reland of 9293d5c86eec1c34fc00716645400b44a14e764e
+
+Original change's description:
+> GCC: Fix base::internal::InvokeFuncImpl
+>
+> GCC doesn't like that the Value data member has no out-of-line
+> definition. The problem is triggered specifically only when compiling
+>
+> components/services/leveldb/leveldb_database_impl.cc
+>
+> which has lambda functions returning locally-defined classes.
+>
+> The current code works as-is in C++17 mode which introduces the concept
+> of inline variables, but in C++14 we need either an explicit out-of-line
+> definition or a function member instead of a data member.
+>
+> Use std::integral_constant for defining the value.
+>
+> Bug: 819294
+> Change-Id: I5c68e14ce3fa9d8b4d8a2cb42d7f9b53938aabf3
+> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1862451
+> Reviewed-by: Jan Wilken Dörrie <jdoerrie@chromium.org>
+> Reviewed-by: Daniel Cheng <dcheng@chromium.org>
+> Commit-Queue: Jüri Valdmann <juri.valdmann@qt.io>
+> Cr-Commit-Position: refs/heads/master@{#706384}
+
+Bug: 819294
+Change-Id: I3d5a52ddc6815516e2239f9347c60de06bf765a2
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1865212
+Reviewed-by: Daniel Cheng <dcheng@chromium.org>
+Commit-Queue: Jan Wilken Dörrie <jdoerrie@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#707329}
+---
+
+diff --git a/base/bind.h b/base/bind.h
+index 7a400af..1070ce6 100644
+--- a/base/bind.h
++++ b/base/bind.h
+@@ -187,18 +187,15 @@
+ // well-formed. Using `Invoker::Run` with a OnceCallback triggers a
+ // static_assert, which is why the ternary expression does not compile.
+ // TODO(crbug.com/752720): Remove this indirection once we have `if constexpr`.
+-template <bool is_once, typename Invoker>
+-struct InvokeFuncImpl;
++template <typename Invoker>
++constexpr auto GetInvokeFunc(std::true_type) {
++ return Invoker::RunOnce;
++}
+
+ template <typename Invoker>
+-struct InvokeFuncImpl<true, Invoker> {
+- static constexpr auto Value = &Invoker::RunOnce;
+-};
+-
+-template <typename Invoker>
+-struct InvokeFuncImpl<false, Invoker> {
+- static constexpr auto Value = &Invoker::Run;
+-};
++constexpr auto GetInvokeFunc(std::false_type) {
++ return Invoker::Run;
++}
+
+ template <template <typename> class CallbackT,
+ typename Functor,
+@@ -229,7 +226,8 @@
+ // InvokeFuncStorage, so that we can ensure its type matches to
+ // PolymorphicInvoke, to which CallbackType will cast back.
+ using PolymorphicInvoke = typename CallbackType::PolymorphicInvoke;
+- PolymorphicInvoke invoke_func = InvokeFuncImpl<kIsOnce, Invoker>::Value;
++ PolymorphicInvoke invoke_func =
++ GetInvokeFunc<Invoker>(std::integral_constant<bool, kIsOnce>());
+
+ using InvokeFuncStorage = internal::BindStateBase::InvokeFuncStorage;
+ return CallbackType(BindState::Create(