aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chromium/chromium/chromium-angle-gcc9.patch44
-rwxr-xr-xchromium/chromium/chromium-ffmpeg-clean.sh1
-rw-r--r--chromium/chromium/chromium-gcc8-cl1503254.patch75
-rw-r--r--chromium/chromium/chromium-gcc8-r641329.patch101
-rw-r--r--chromium/chromium/chromium-gcc8-r641404.patch587
-rw-r--r--chromium/chromium/chromium-gcc8-r642680.patch75
-rw-r--r--chromium/chromium/chromium-gcc8-r647271.patch483
-rw-r--r--chromium/chromium/chromium-gcc8-r647382.patch42
-rw-r--r--chromium/chromium/chromium-gcc9-r654570.patch39
-rw-r--r--chromium/chromium/chromium-gcc9-r666714.patch111
-rw-r--r--chromium/chromium/chromium-gn-revert-bug-77.patch918
-rw-r--r--chromium/chromium/chromium.spec23
12 files changed, 206 insertions, 2293 deletions
diff --git a/chromium/chromium/chromium-angle-gcc9.patch b/chromium/chromium/chromium-angle-gcc9.patch
new file mode 100644
index 0000000..05e5f59
--- /dev/null
+++ b/chromium/chromium/chromium-angle-gcc9.patch
@@ -0,0 +1,44 @@
+From 926f1caa8b5c34a6d2e3a9fa9f10976ca6d51323 Mon Sep 17 00:00:00 2001
+From: Yi Xu <yiyix@chromium.org>
+Date: Wed, 1 May 2019 14:03:05 -0400
+Subject: [PATCH] Add support for GCC Compilers
+
+Add support for GCC Compilers, so it can be build on Ubuntu.
+
+BUG=angleproject:3392
+
+Change-Id: I2f5ac7355a40f52123bd465f86b1e966c59c943d
+Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1592062
+Reviewed-by: Geoff Lang <geofflang@chromium.org>
+Commit-Queue: Yi Xu <yiyix@chromium.org>
+---
+ src/common/debug.h | 4 +-
+ .../GPUTestExpectationsParser_unittest.cpp | 20 +++
+ .../vulkan_command_buffer_utils.cpp | 116 +++++++++---------
+ 3 files changed, 80 insertions(+), 60 deletions(-)
+
+diff --git a/src/common/debug.h b/src/common/debug.h
+index 64783687b..3e687b816 100644
+--- a/third_party/angle/src/common/debug.h
++++ b/third_party/angle/src/common/debug.h
+@@ -248,7 +248,7 @@ std::ostream &FmtHex(std::ostream &os, T value)
+ # define EVENT(message, ...) (void(0))
+ #endif
+
+-#if defined(COMPILER_GCC) || defined(__clang__)
++#if defined(__GNUC__)
+ # define ANGLE_CRASH() __builtin_trap()
+ #else
+ # define ANGLE_CRASH() ((void)(*(volatile char *)0 = 0)), __assume(0)
+@@ -336,7 +336,7 @@ std::ostream &FmtHex(std::ostream &os, T value)
+ # define ANGLE_ENABLE_STRUCT_PADDING_WARNINGS \
+ _Pragma("clang diagnostic push") _Pragma("clang diagnostic error \"-Wpadded\"")
+ # define ANGLE_DISABLE_STRUCT_PADDING_WARNINGS _Pragma("clang diagnostic pop")
+-#elif defined(COMPILER_GCC)
++#elif defined(__GNUC__)
+ # define ANGLE_ENABLE_STRUCT_PADDING_WARNINGS \
+ _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic error \"-Wpadded\"")
+ # define ANGLE_DISABLE_STRUCT_PADDING_WARNINGS _Pragma("GCC diagnostic pop")
+--
+2.21.0
+
diff --git a/chromium/chromium/chromium-ffmpeg-clean.sh b/chromium/chromium/chromium-ffmpeg-clean.sh
index bcfc16d..851cb90 100755
--- a/chromium/chromium/chromium-ffmpeg-clean.sh
+++ b/chromium/chromium/chromium-ffmpeg-clean.sh
@@ -124,6 +124,7 @@ header_files=" libavcodec/x86/inline_asm.h \
libavcodec/mpegvideodsp.h \
libavcodec/mpegvideoencdsp.h \
libavcodec/options_table.h \
+ libavcodec/opusdsp.h \
libavcodec/opus_celt.h \
libavcodec/opus_pvq.h \
libavcodec/opus_rc.h \
diff --git a/chromium/chromium/chromium-gcc8-cl1503254.patch b/chromium/chromium/chromium-gcc8-cl1503254.patch
deleted file mode 100644
index 25f0e6a..0000000
--- a/chromium/chromium/chromium-gcc8-cl1503254.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From 22cd5f5f9f8af1f343e9fa747c03fc79667a60ea Mon Sep 17 00:00:00 2001
-From: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
-Date: Tue, 05 Mar 2019 11:11:51 +0100
-Subject: [PATCH] quic: Make QuicCryptoStream::substreams_ a std::unique_ptr
-
-This works around https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63707, which
-was causing the GCC build to fail since commit 167db3e68 ("Landing Recent
-QUIC changes until 8:59 AM, Feb 26, 2019 UTC-5"):
-
-../../net/third_party/quic/core/quic_crypto_stream.cc: In constructor ‘quic::QuicCryptoStream::QuicCryptoStream(quic::QuicSession*)’:
-../../net/third_party/quic/core/quic_crypto_stream.cc:33:52: error: use of deleted function ‘quic::QuicCryptoStream::CryptoSubstream::CryptoSubstream(quic::QuicCryptoStream::CryptoSubstream&&)’
- {this, ENCRYPTION_FORWARD_SECURE}} {
- ^
-In file included from ../../net/third_party/quic/core/quic_crypto_stream.cc:5:
-../../net/third_party/quic/core/quic_crypto_stream.h:152:10: note: ‘quic::QuicCryptoStream::CryptoSubstream::CryptoSubstream(quic::QuicCryptoStream::CryptoSubstream&&)’ is implicitly deleted because the default definition would be ill-formed:
- struct CryptoSubstream {
- ^~~~~~~~~~~~~~~
-../../net/third_party/quic/core/quic_crypto_stream.h:152:10: error: use of deleted function ‘quic::QuicStreamSendBuffer::QuicStreamSendBuffer(quic::QuicStreamSendBuffer&&)’
-In file included from ../../net/third_party/quic/core/quic_stream.h:27,
- from ../../net/third_party/quic/core/quic_crypto_stream.h:15,
- from ../../net/third_party/quic/core/quic_crypto_stream.cc:5:
-../../net/third_party/quic/core/quic_stream_send_buffer.h:63:3: note: declared here
- QuicStreamSendBuffer(QuicStreamSendBuffer&& other) = delete;
- ^~~~~~~~~~~~~~~~~~~~
-
-The code is actually correct, but that GCC bug causes the initialization to
-fail. Work around it by making |substreams_| a std::unique_ptr so we can
-initialize it via operator new[] instead.
-
-Bug: 819294, 937886
-Change-Id: If56f2a12a733e6f6680ed9c9e6f7688439e9d216
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1503254
----
-
-diff --git a/net/third_party/quic/core/quic_crypto_stream.cc b/net/third_party/quic/core/quic_crypto_stream.cc
-index eb58f53..6ee344e 100644
---- a/net/third_party/quic/core/quic_crypto_stream.cc
-+++ b/net/third_party/quic/core/quic_crypto_stream.cc
-@@ -28,9 +28,10 @@
- session,
- /*is_static=*/true,
- BIDIRECTIONAL),
-- substreams_{{this, ENCRYPTION_NONE},
-- {this, ENCRYPTION_ZERO_RTT},
-- {this, ENCRYPTION_FORWARD_SECURE}} {
-+ substreams_(new CryptoSubstream[NUM_ENCRYPTION_LEVELS]{
-+ {this, ENCRYPTION_NONE},
-+ {this, ENCRYPTION_ZERO_RTT},
-+ {this, ENCRYPTION_FORWARD_SECURE}}) {
- // The crypto stream is exempt from connection level flow control.
- DisableConnectionFlowControlForThisStream();
- }
-diff --git a/net/third_party/quic/core/quic_crypto_stream.h b/net/third_party/quic/core/quic_crypto_stream.h
-index 132751a..b13768c 100644
---- a/net/third_party/quic/core/quic_crypto_stream.h
-+++ b/net/third_party/quic/core/quic_crypto_stream.h
-@@ -6,6 +6,7 @@
- #define NET_THIRD_PARTY_QUIC_CORE_QUIC_CRYPTO_STREAM_H_
-
- #include <cstddef>
-+#include <memory>
-
- #include "base/macros.h"
- #include "net/third_party/quic/core/crypto/crypto_framer.h"
-@@ -169,7 +170,9 @@
-
- // Keeps state for data sent/received in CRYPTO frames at each encryption
- // level.
-- CryptoSubstream substreams_[NUM_ENCRYPTION_LEVELS];
-+ // N.B.: We are using a std::unique_ptr here only due to
-+ // https://crbug.com/937886.
-+ std::unique_ptr<CryptoSubstream[]> substreams_;
- };
-
- } // namespace quic
diff --git a/chromium/chromium/chromium-gcc8-r641329.patch b/chromium/chromium/chromium-gcc8-r641329.patch
deleted file mode 100644
index 49fcf69..0000000
--- a/chromium/chromium/chromium-gcc8-r641329.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-From 0e121588d500217a38d57f5e285aa586676059b2 Mon Sep 17 00:00:00 2001
-From: Sergey Abbakumov <sabbakumov@yandex-team.ru>
-Date: Fri, 15 Mar 2019 22:32:16 +0000
-Subject: [PATCH] base::Value::SetKey/SetPath performance improvements
-
-Use rvalue references to avoid copying sizeof(base::Value).
-
-This commit gives about -20KB of the browser.dll and browser_child.dll
-size. Also it reduces renderer memory consumption by ~200
-KB max.
-
-Bug: 646113
-Change-Id: I8c86594838292a2faf4d134b899a7978dbc214fc
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1520407
-Reviewed-by: danakj <danakj@chromium.org>
-Commit-Queue: danakj <danakj@chromium.org>
-Cr-Commit-Position: refs/heads/master@{#641329}
----
- base/values.cc | 10 +++++-----
- base/values.h | 10 +++++-----
- 2 files changed, 10 insertions(+), 10 deletions(-)
-
-diff --git a/base/values.cc b/base/values.cc
-index 2b0c6c8163d8..0c002551b317 100644
---- a/base/values.cc
-+++ b/base/values.cc
-@@ -353,7 +353,7 @@ bool Value::RemoveKey(StringPiece key) {
- return dict_.erase(key) != 0;
- }
-
--Value* Value::SetKey(StringPiece key, Value value) {
-+Value* Value::SetKey(StringPiece key, Value&& value) {
- CHECK(is_dict());
- // NOTE: We can't use |insert_or_assign| here, as only |try_emplace| does
- // an explicit conversion from StringPiece to std::string if necessary.
-@@ -366,7 +366,7 @@ Value* Value::SetKey(StringPiece key, Value value) {
- return result.first->second.get();
- }
-
--Value* Value::SetKey(std::string&& key, Value value) {
-+Value* Value::SetKey(std::string&& key, Value&& value) {
- CHECK(is_dict());
- return dict_
- .insert_or_assign(std::move(key),
-@@ -374,7 +374,7 @@ Value* Value::SetKey(std::string&& key, Value value) {
- .first->second.get();
- }
-
--Value* Value::SetKey(const char* key, Value value) {
-+Value* Value::SetKey(const char* key, Value&& value) {
- return SetKey(StringPiece(key), std::move(value));
- }
-
-@@ -425,12 +425,12 @@ const Value* Value::FindPathOfType(span<const StringPiece> path,
- return result;
- }
-
--Value* Value::SetPath(std::initializer_list<StringPiece> path, Value value) {
-+Value* Value::SetPath(std::initializer_list<StringPiece> path, Value&& value) {
- DCHECK_GE(path.size(), 2u) << "Use SetKey() for a path of length 1.";
- return SetPath(make_span(path.begin(), path.size()), std::move(value));
- }
-
--Value* Value::SetPath(span<const StringPiece> path, Value value) {
-+Value* Value::SetPath(span<const StringPiece> path, Value&& value) {
- DCHECK(path.begin() != path.end()); // Can't be empty path.
-
- // Walk/construct intermediate dictionaries. The last element requires
-diff --git a/base/values.h b/base/values.h
-index 7546fa53756d..429ef1dfdebd 100644
---- a/base/values.h
-+++ b/base/values.h
-@@ -210,11 +210,11 @@ class BASE_EXPORT Value {
- //
- // Example:
- // SetKey("foo", std::move(myvalue));
-- Value* SetKey(StringPiece key, Value value);
-+ Value* SetKey(StringPiece key, Value&& value);
- // This overload results in a performance improvement for std::string&&.
-- Value* SetKey(std::string&& key, Value value);
-+ Value* SetKey(std::string&& key, Value&& value);
- // This overload is necessary to avoid ambiguity for const char* arguments.
-- Value* SetKey(const char* key, Value value);
-+ Value* SetKey(const char* key, Value&& value);
-
- // This attemps to remove the value associated with |key|. In case of failure,
- // e.g. the key does not exist, |false| is returned and the underlying
-@@ -276,8 +276,8 @@ class BASE_EXPORT Value {
- // value.SetPath(components, std::move(myvalue));
- //
- // Note: If there is only one component in the path, use SetKey() instead.
-- Value* SetPath(std::initializer_list<StringPiece> path, Value value);
-- Value* SetPath(span<const StringPiece> path, Value value);
-+ Value* SetPath(std::initializer_list<StringPiece> path, Value&& value);
-+ Value* SetPath(span<const StringPiece> path, Value&& value);
-
- // Tries to remove a Value at the given path.
- //
---
-2.20.1
-
diff --git a/chromium/chromium/chromium-gcc8-r641404.patch b/chromium/chromium/chromium-gcc8-r641404.patch
deleted file mode 100644
index fe84c7b..0000000
--- a/chromium/chromium/chromium-gcc8-r641404.patch
+++ /dev/null
@@ -1,587 +0,0 @@
-From e1b1f3a5f273c8da533fad495b9de316e2c83c9b Mon Sep 17 00:00:00 2001
-From: jdoerrie <jdoerrie@chromium.org>
-Date: Sat, 16 Mar 2019 04:08:01 +0000
-Subject: [PATCH] [base] Add Dead Type to base::Value
-
-This change adds a temporary DEAD type to base::Value which should help
-to track down use-after-free bugs. Furthermore, this change also removes
-the now unneeded is_alive_ flag.
-
-Bug: 859477, 941404
-Change-Id: I9b7a2f3cbb0b22d7e3ed35b2453537419f3f7e55
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1478897
-Reviewed-by: Pavol Marko <pmarko@chromium.org>
-Reviewed-by: Tao Bai <michaelbai@chromium.org>
-Reviewed-by: Thomas Anderson <thomasanderson@chromium.org>
-Reviewed-by: Mike Pinkerton <pinkerton@chromium.org>
-Reviewed-by: Bill Budge <bbudge@chromium.org>
-Reviewed-by: Ken Rockot <rockot@google.com>
-Reviewed-by: Steven Bennetts <stevenjb@chromium.org>
-Reviewed-by: Daniel Cheng <dcheng@chromium.org>
-Reviewed-by: David Turner <digit@chromium.org>
-Commit-Queue: Thomas Anderson <thomasanderson@chromium.org>
-Cr-Commit-Position: refs/heads/master@{#641404}
----
- base/json/json_writer.cc | 5 ++
- base/values.cc | 68 ++++++++++++-------
- base/values.h | 23 ++-----
- base/values_unittest.cc | 10 ++-
- .../ui/cocoa/applescript/apple_event_util.mm | 10 +++
- chromeos/network/onc/variable_expander.cc | 6 ++
- .../core/browser/android/policy_converter.cc | 11 ++-
- .../core/common/policy_loader_win_unittest.cc | 8 ++-
- .../policy/core/common/policy_test_utils.cc | 5 ++
- .../policy/core/common/registry_dict.cc | 4 ++
- .../gin_java_script_to_java_types_coercion.cc | 8 ++-
- ipc/ipc_message_utils.cc | 11 ++-
- mojo/public/cpp/base/values_mojom_traits.h | 7 +-
- .../ppb_x509_certificate_private_shared.cc | 2 +
- 14 files changed, 127 insertions(+), 51 deletions(-)
-
-diff --git a/base/json/json_writer.cc b/base/json/json_writer.cc
-index 376a459f9a46..cd020e7fa0c0 100644
---- a/base/json/json_writer.cc
-+++ b/base/json/json_writer.cc
-@@ -179,6 +179,11 @@ bool JSONWriter::BuildJSONString(const Value& node, size_t depth) {
- // Successful only if we're allowed to omit it.
- DLOG_IF(ERROR, !omit_binary_values_) << "Cannot serialize binary value.";
- return omit_binary_values_;
-+
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ case Value::Type::DEAD:
-+ CHECK(false);
-+ return false;
- }
-
- // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
-diff --git a/base/values.cc b/base/values.cc
-index 0c002551b317..035aa2350cde 100644
---- a/base/values.cc
-+++ b/base/values.cc
-@@ -90,8 +90,6 @@ std::unique_ptr<Value> CopyWithoutEmptyChildren(const Value& node) {
-
- } // namespace
-
--constexpr uint16_t Value::kMagicIsAlive;
--
- // static
- std::unique_ptr<Value> Value::CreateWithCopiedBuffer(const char* buffer,
- size_t size) {
-@@ -112,9 +110,9 @@ Value::Value(Value&& that) noexcept {
- InternalMoveConstructFrom(std::move(that));
- }
-
--Value::Value() noexcept : type_(Type::NONE), is_alive_(kMagicIsAlive) {}
-+Value::Value() noexcept : type_(Type::NONE) {}
-
--Value::Value(Type type) : type_(type), is_alive_(kMagicIsAlive) {
-+Value::Value(Type type) : type_(type) {
- // Initialize with the default value.
- switch (type_) {
- case Type::NONE:
-@@ -141,22 +139,26 @@ Value::Value(Type type) : type_(type), is_alive_(kMagicIsAlive) {
- case Type::LIST:
- new (&list_) ListStorage();
- return;
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ case Type::DEAD:
-+ CHECK(false);
-+ return;
- }
-+
-+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
-+ CHECK(false);
- }
-
- Value::Value(bool in_bool)
- : bool_type_(Type::BOOLEAN),
-- bool_is_alive_(kMagicIsAlive),
- bool_value_(in_bool) {}
-
- Value::Value(int in_int)
- : int_type_(Type::INTEGER),
-- int_is_alive_(kMagicIsAlive),
- int_value_(in_int) {}
-
- Value::Value(double in_double)
- : double_type_(Type::DOUBLE),
-- double_is_alive_(kMagicIsAlive),
- double_value_(in_double) {
- if (!std::isfinite(double_value_)) {
- NOTREACHED() << "Non-finite (i.e. NaN or positive/negative infinity) "
-@@ -171,7 +173,6 @@ Value::Value(StringPiece in_string) : Value(std::string(in_string)) {}
-
- Value::Value(std::string&& in_string) noexcept
- : string_type_(Type::STRING),
-- string_is_alive_(kMagicIsAlive),
- string_value_(std::move(in_string)) {
- DCHECK(IsStringUTF8(string_value_));
- }
-@@ -182,21 +183,18 @@ Value::Value(StringPiece16 in_string16) : Value(UTF16ToUTF8(in_string16)) {}
-
- Value::Value(const std::vector<char>& in_blob)
- : binary_type_(Type::BINARY),
-- binary_is_alive_(kMagicIsAlive),
- binary_value_(in_blob.begin(), in_blob.end()) {}
-
- Value::Value(base::span<const uint8_t> in_blob)
- : binary_type_(Type::BINARY),
-- binary_is_alive_(kMagicIsAlive),
- binary_value_(in_blob.begin(), in_blob.end()) {}
-
- Value::Value(BlobStorage&& in_blob) noexcept
- : binary_type_(Type::BINARY),
-- binary_is_alive_(kMagicIsAlive),
- binary_value_(std::move(in_blob)) {}
-
- Value::Value(const DictStorage& in_dict)
-- : dict_type_(Type::DICTIONARY), dict_is_alive_(kMagicIsAlive), dict_() {
-+ : dict_type_(Type::DICTIONARY), dict_() {
- dict_.reserve(in_dict.size());
- for (const auto& it : in_dict) {
- dict_.try_emplace(dict_.end(), it.first,
-@@ -206,11 +204,9 @@ Value::Value(const DictStorage& in_dict)
-
- Value::Value(DictStorage&& in_dict) noexcept
- : dict_type_(Type::DICTIONARY),
-- dict_is_alive_(kMagicIsAlive),
- dict_(std::move(in_dict)) {}
-
--Value::Value(const ListStorage& in_list)
-- : list_type_(Type::LIST), list_is_alive_(kMagicIsAlive), list_() {
-+Value::Value(const ListStorage& in_list) : list_type_(Type::LIST), list_() {
- list_.reserve(in_list.size());
- for (const auto& val : in_list)
- list_.emplace_back(val.Clone());
-@@ -218,7 +214,6 @@ Value::Value(const ListStorage& in_list)
-
- Value::Value(ListStorage&& in_list) noexcept
- : list_type_(Type::LIST),
-- list_is_alive_(kMagicIsAlive),
- list_(std::move(in_list)) {}
-
- Value& Value::operator=(Value&& that) noexcept {
-@@ -246,15 +241,21 @@ Value Value::Clone() const {
- return Value(dict_);
- case Type::LIST:
- return Value(list_);
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ case Type::DEAD:
-+ CHECK(false);
-+ return Value();
- }
-
-- NOTREACHED();
-+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
-+ CHECK(false);
- return Value();
- }
-
- Value::~Value() {
- InternalCleanup();
-- is_alive_ = 0;
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ type_ = Type::DEAD;
- }
-
- // static
-@@ -654,9 +655,14 @@ bool operator==(const Value& lhs, const Value& rhs) {
- });
- case Value::Type::LIST:
- return lhs.list_ == rhs.list_;
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ case Value::Type::DEAD:
-+ CHECK(false);
-+ return false;
- }
-
-- NOTREACHED();
-+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
-+ CHECK(false);
- return false;
- }
-
-@@ -693,9 +699,14 @@ bool operator<(const Value& lhs, const Value& rhs) {
- });
- case Value::Type::LIST:
- return lhs.list_ < rhs.list_;
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ case Value::Type::DEAD:
-+ CHECK(false);
-+ return false;
- }
-
-- NOTREACHED();
-+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
-+ CHECK(false);
- return false;
- }
-
-@@ -733,7 +744,6 @@ size_t Value::EstimateMemoryUsage() const {
-
- void Value::InternalMoveConstructFrom(Value&& that) {
- type_ = that.type_;
-- is_alive_ = that.is_alive_;
-
- switch (type_) {
- case Type::NONE:
-@@ -759,12 +769,17 @@ void Value::InternalMoveConstructFrom(Value&& that) {
- case Type::LIST:
- new (&list_) ListStorage(std::move(that.list_));
- return;
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ case Type::DEAD:
-+ CHECK(false);
-+ return;
- }
-+
-+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
-+ CHECK(false);
- }
-
- void Value::InternalCleanup() {
-- CHECK_EQ(is_alive_, kMagicIsAlive);
--
- switch (type_) {
- case Type::NONE:
- case Type::BOOLEAN:
-@@ -785,7 +800,14 @@ void Value::InternalCleanup() {
- case Type::LIST:
- list_.~ListStorage();
- return;
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ case Type::DEAD:
-+ CHECK(false);
-+ return;
- }
-+
-+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
-+ CHECK(false);
- }
-
- ///////////////////// DictionaryValue ////////////////////
-diff --git a/base/values.h b/base/values.h
-index 429ef1dfdebd..e31cadd83102 100644
---- a/base/values.h
-+++ b/base/values.h
-@@ -92,7 +92,9 @@ class BASE_EXPORT Value {
- STRING,
- BINARY,
- DICTIONARY,
-- LIST
-+ LIST,
-+ // TODO(crbug.com/859477): Remove once root cause is found.
-+ DEAD
- // Note: Do not add more types. See the file-level comment above for why.
- };
-
-@@ -375,10 +377,6 @@ class BASE_EXPORT Value {
- size_t EstimateMemoryUsage() const;
-
- protected:
-- // Magic IsAlive signature to debug double frees.
-- // TODO(crbug.com/859477): Remove once root cause is found.
-- static constexpr uint16_t kMagicIsAlive = 0x2f19;
--
- // Technical note:
- // The naive way to implement a tagged union leads to wasted bytes
- // in the object on CPUs like ARM ones, which impose an 8-byte alignment
-@@ -408,8 +406,8 @@ class BASE_EXPORT Value {
- // that |double_value_| below is always located at an offset that is a
- // multiple of 8, relative to the start of the overall data structure.
- //
-- // Each struct must declare its own |type_| and |is_alive_| field, which
-- // must have a different name, to appease the C++ compiler.
-+ // Each struct must declare its own |type_| field, which must have a different
-+ // name, to appease the C++ compiler.
- //
- // Using this technique sizeof(base::Value) == 16 on 32-bit ARM instead
- // of 24, without losing any information. Results are unchanged for x86,
-@@ -419,24 +417,17 @@ class BASE_EXPORT Value {
- // TODO(crbug.com/646113): Make these private once DictionaryValue and
- // ListValue are properly inlined.
- Type type_ : 8;
--
-- // IsAlive member to debug double frees.
-- // TODO(crbug.com/859477): Remove once root cause is found.
-- uint16_t is_alive_ = kMagicIsAlive;
- };
- struct {
- Type bool_type_ : 8;
-- uint16_t bool_is_alive_;
- bool bool_value_;
- };
- struct {
- Type int_type_ : 8;
-- uint16_t int_is_alive_;
- int int_value_;
- };
- struct {
- Type double_type_ : 8;
-- uint16_t double_is_alive_;
- // Subtle: On architectures that require it, the compiler will ensure
- // that |double_value_|'s offset is a multiple of 8 (e.g. 32-bit ARM).
- // See technical note above to understand why it is important.
-@@ -444,22 +435,18 @@ class BASE_EXPORT Value {
- };
- struct {
- Type string_type_ : 8;
-- uint16_t string_is_alive_;
- std::string string_value_;
- };
- struct {
- Type binary_type_ : 8;
-- uint16_t binary_is_alive_;
- BlobStorage binary_value_;
- };
- struct {
- Type dict_type_ : 8;
-- uint16_t dict_is_alive_;
- DictStorage dict_;
- };
- struct {
- Type list_type_ : 8;
-- uint16_t list_is_alive_;
- ListStorage list_;
- };
- };
-diff --git a/base/values_unittest.cc b/base/values_unittest.cc
-index 0a641bcc7ef4..b23fd8332491 100644
---- a/base/values_unittest.cc
-+++ b/base/values_unittest.cc
-@@ -20,17 +20,20 @@
- #include "base/strings/string16.h"
- #include "base/strings/string_piece.h"
- #include "base/strings/utf_string_conversions.h"
-+#include "build/build_config.h"
- #include "testing/gmock/include/gmock/gmock.h"
- #include "testing/gtest/include/gtest/gtest.h"
-
- namespace base {
-
-+// Test is currently incorrect on Windows x86.
-+#if !defined(OS_WIN) || !defined(ARCH_CPU_X86)
- TEST(ValuesTest, SizeOfValue) {
- // Ensure that base::Value is as small as possible, i.e. that there is
- // no wasted space after the inner value due to alignment constraints.
-- // Distinguish between the 'header' that includes |type_| and |is_alive_|
-- // and the inner value that follows it, which can be a bool, int, double,
-- // string, blob, list or dict.
-+ // Distinguish between the 'header' that includes |type_| and and the inner
-+ // value that follows it, which can be a bool, int, double, string, blob, list
-+ // or dict.
- #define INNER_TYPES_LIST(X) \
- X(bool, bool_value_) \
- X(int, int_value_) \
-@@ -61,6 +64,7 @@ TEST(ValuesTest, SizeOfValue) {
- LOG(INFO) << "max_inner_struct_limit=" << max_inner_struct_limit;
- }
- }
-+#endif
-
- TEST(ValuesTest, TestNothrow) {
- static_assert(std::is_nothrow_move_constructible<Value>::value,
-diff --git a/chrome/browser/ui/cocoa/applescript/apple_event_util.mm b/chrome/browser/ui/cocoa/applescript/apple_event_util.mm
-index 16d685607ced..25a59338ee73 100644
---- a/chrome/browser/ui/cocoa/applescript/apple_event_util.mm
-+++ b/chrome/browser/ui/cocoa/applescript/apple_event_util.mm
-@@ -96,6 +96,16 @@ NSAppleEventDescriptor* ValueToAppleEventDescriptor(const base::Value* value) {
- }
- break;
- }
-+
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ case base::Value::Type::DEAD:
-+ CHECK(false);
-+ break;
-+
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ default:
-+ CHECK(false);
-+ break;
- }
-
- return descriptor;
-diff --git a/chromeos/network/onc/variable_expander.cc b/chromeos/network/onc/variable_expander.cc
-index fd72752c2aa6..cd5bbb238eb3 100644
---- a/chromeos/network/onc/variable_expander.cc
-+++ b/chromeos/network/onc/variable_expander.cc
-@@ -145,6 +145,12 @@ bool VariableExpander::ExpandValue(base::Value* value) const {
- // Nothing to do here.
- break;
- }
-+
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ case base::Value::Type::DEAD: {
-+ CHECK(false);
-+ break;
-+ }
- }
- return no_error;
- }
-diff --git a/components/policy/core/browser/android/policy_converter.cc b/components/policy/core/browser/android/policy_converter.cc
-index b711a64febc9..9d41ad0d1507 100644
---- a/components/policy/core/browser/android/policy_converter.cc
-+++ b/components/policy/core/browser/android/policy_converter.cc
-@@ -175,10 +175,17 @@ std::unique_ptr<base::Value> PolicyConverter::ConvertValueToSchema(
- }
- return value;
- }
-+
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ case base::Value::Type::DEAD: {
-+ CHECK(false);
-+ return nullptr;
-+ }
- }
-
-- NOTREACHED();
-- return std::unique_ptr<base::Value>();
-+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
-+ CHECK(false);
-+ return nullptr;
- }
-
- void PolicyConverter::SetPolicyValue(const std::string& key,
-diff --git a/components/policy/core/common/policy_loader_win_unittest.cc b/components/policy/core/common/policy_loader_win_unittest.cc
-index 311e7fb122fc..0377307c5e28 100644
---- a/components/policy/core/common/policy_loader_win_unittest.cc
-+++ b/components/policy/core/common/policy_loader_win_unittest.cc
-@@ -133,8 +133,14 @@ bool InstallValue(const base::Value& value,
-
- case base::Value::Type::BINARY:
- return false;
-+
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ case base::Value::Type::DEAD:
-+ CHECK(false);
-+ return false;
- }
-- NOTREACHED();
-+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
-+ CHECK(false);
- return false;
- }
-
-diff --git a/components/policy/core/common/policy_test_utils.cc b/components/policy/core/common/policy_test_utils.cc
-index 5af98b47275c..919f004153ec 100644
---- a/components/policy/core/common/policy_test_utils.cc
-+++ b/components/policy/core/common/policy_test_utils.cc
-@@ -137,6 +137,11 @@ CFPropertyListRef ValueToProperty(const base::Value& value) {
- // because there's no equivalent JSON type, and policy values can only
- // take valid JSON values.
- break;
-+
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ case base::Value::Type::DEAD:
-+ CHECK(false);
-+ break;
- }
-
- return NULL;
-diff --git a/components/policy/core/common/registry_dict.cc b/components/policy/core/common/registry_dict.cc
-index f3ed372bdcb3..696ba7e04abe 100644
---- a/components/policy/core/common/registry_dict.cc
-+++ b/components/policy/core/common/registry_dict.cc
-@@ -135,6 +135,10 @@ std::unique_ptr<base::Value> ConvertRegistryValue(const base::Value& value,
- case base::Value::Type::BINARY:
- // No conversion possible.
- break;
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ case base::Value::Type::DEAD:
-+ CHECK(false);
-+ return nullptr;
- }
-
- LOG(WARNING) << "Failed to convert " << value.type() << " to "
-diff --git a/content/browser/android/java/gin_java_script_to_java_types_coercion.cc b/content/browser/android/java/gin_java_script_to_java_types_coercion.cc
-index dabd66ba8c72..84fd5489a414 100644
---- a/content/browser/android/java/gin_java_script_to_java_types_coercion.cc
-+++ b/content/browser/android/java/gin_java_script_to_java_types_coercion.cc
-@@ -722,8 +722,14 @@ jvalue CoerceJavaScriptValueToJavaValue(JNIEnv* env,
- case base::Value::Type::BINARY:
- return CoerceGinJavaBridgeValueToJavaValue(
- env, value, target_type, coerce_to_string, object_refs, error);
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ case base::Value::Type::DEAD:
-+ CHECK(false);
-+ return jvalue();
- }
-- NOTREACHED();
-+
-+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
-+ CHECK(false);
- return jvalue();
- }
-
-diff --git a/ipc/ipc_message_utils.cc b/ipc/ipc_message_utils.cc
-index ec04c77c6c18..df6ec39bd663 100644
---- a/ipc/ipc_message_utils.cc
-+++ b/ipc/ipc_message_utils.cc
-@@ -92,7 +92,7 @@ void WriteValue(base::Pickle* m, const base::Value* value, int recursion) {
-
- switch (value->type()) {
- case base::Value::Type::NONE:
-- break;
-+ break;
- case base::Value::Type::BOOLEAN: {
- bool val;
- result = value->GetAsBoolean(&val);
-@@ -147,6 +147,11 @@ void WriteValue(base::Pickle* m, const base::Value* value, int recursion) {
- }
- break;
- }
-+
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ default:
-+ CHECK(false);
-+ break;
- }
- }
-
-@@ -260,7 +265,9 @@ bool ReadValue(const base::Pickle* m,
- break;
- }
- default:
-- return false;
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ CHECK(false);
-+ return false;
- }
-
- return true;
-diff --git a/mojo/public/cpp/base/values_mojom_traits.h b/mojo/public/cpp/base/values_mojom_traits.h
-index cdb9bbbd94df..66752b7c90d8 100644
---- a/mojo/public/cpp/base/values_mojom_traits.h
-+++ b/mojo/public/cpp/base/values_mojom_traits.h
-@@ -86,8 +86,13 @@ struct COMPONENT_EXPORT(MOJO_BASE_SHARED_TRAITS)
- return mojo_base::mojom::ValueDataView::Tag::DICTIONARY_VALUE;
- case base::Value::Type::LIST:
- return mojo_base::mojom::ValueDataView::Tag::LIST_VALUE;
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ case base::Value::Type::DEAD:
-+ CHECK(false);
-+ return mojo_base::mojom::ValueDataView::Tag::NULL_VALUE;
- }
-- NOTREACHED();
-+ // TODO(crbug.com/859477): Revert to NOTREACHED() after root cause is found.
-+ CHECK(false);
- return mojo_base::mojom::ValueDataView::Tag::NULL_VALUE;
- }
-
-diff --git a/ppapi/shared_impl/private/ppb_x509_certificate_private_shared.cc b/ppapi/shared_impl/private/ppb_x509_certificate_private_shared.cc
-index 6ffff36337e0..7f392d50f718 100644
---- a/ppapi/shared_impl/private/ppb_x509_certificate_private_shared.cc
-+++ b/ppapi/shared_impl/private/ppb_x509_certificate_private_shared.cc
-@@ -73,6 +73,8 @@ PP_Var PPB_X509Certificate_Fields::GetFieldAsPPVar(
- }
- case base::Value::Type::DICTIONARY:
- case base::Value::Type::LIST:
-+ // TODO(crbug.com/859477): Remove after root cause is found.
-+ case base::Value::Type::DEAD:
- // Not handled.
- break;
- }
---
-2.20.1
-
diff --git a/chromium/chromium/chromium-gcc8-r642680.patch b/chromium/chromium/chromium-gcc8-r642680.patch
deleted file mode 100644
index c81a758..0000000
--- a/chromium/chromium/chromium-gcc8-r642680.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From c2c467f69fc00d353879d7add5f2c04a6acabbb1 Mon Sep 17 00:00:00 2001
-From: David 'Digit' Turner <digit@google.com>
-Date: Wed, 20 Mar 2019 21:41:09 +0000
-Subject: [PATCH] base: Value::FindDoubleKey() converts integers to doubles
-
-Ensure that FindDoubleKey() can return the value of an
-INTEGER key as a double. This is consistent with the behaviour
-of Value::GetDouble() which will auto-convert INTEGER values
-to doubles.
-
-BUG=646113
-R=dcheng@chromium.org,jdoerrie@chromium.org,sdefresne@chromium.org,hidehiko@chromium.org
-
-Change-Id: I2c08cb91b6cfd5db268a182ffffe16682d848008
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1529017
-Reviewed-by: Sylvain Defresne <sdefresne@chromium.org>
-Reviewed-by: Daniel Cheng <dcheng@chromium.org>
-Commit-Queue: David Turner <digit@chromium.org>
-Cr-Commit-Position: refs/heads/master@{#642680}
----
- base/values.cc | 10 ++++++++--
- base/values.h | 2 ++
- base/values_unittest.cc | 2 +-
- 3 files changed, 11 insertions(+), 3 deletions(-)
-
-diff --git a/base/values.cc b/base/values.cc
-index 035aa2350cde..69d66ff8ab00 100644
---- a/base/values.cc
-+++ b/base/values.cc
-@@ -339,8 +339,14 @@ base::Optional<int> Value::FindIntKey(StringPiece key) const {
- }
-
- base::Optional<double> Value::FindDoubleKey(StringPiece key) const {
-- const Value* result = FindKeyOfType(key, Type::DOUBLE);
-- return result ? base::make_optional(result->double_value_) : base::nullopt;
-+ const Value* result = FindKey(key);
-+ if (result) {
-+ if (result->is_int())
-+ return base::make_optional(static_cast<double>(result->int_value_));
-+ if (result->is_double())
-+ return base::make_optional(result->double_value_);
-+ }
-+ return base::nullopt;
- }
-
- const std::string* Value::FindStringKey(StringPiece key) const {
-diff --git a/base/values.h b/base/values.h
-index e31cadd83102..6f2cd3cc3d79 100644
---- a/base/values.h
-+++ b/base/values.h
-@@ -200,6 +200,8 @@ class BASE_EXPORT Value {
- // function's name.
- base::Optional<bool> FindBoolKey(StringPiece key) const;
- base::Optional<int> FindIntKey(StringPiece key) const;
-+ // Note FindDoubleKey() will auto-convert INTEGER keys to their double
-+ // value, for consistency with GetDouble().
- base::Optional<double> FindDoubleKey(StringPiece key) const;
-
- // |FindStringKey| returns |nullptr| if value is not found or not a string.
-diff --git a/base/values_unittest.cc b/base/values_unittest.cc
-index b23fd8332491..7c545c09d947 100644
---- a/base/values_unittest.cc
-+++ b/base/values_unittest.cc
-@@ -674,7 +674,7 @@ TEST(ValuesTest, FindDoubleKey) {
- const Value dict(std::move(storage));
- EXPECT_EQ(base::nullopt, dict.FindDoubleKey("null"));
- EXPECT_EQ(base::nullopt, dict.FindDoubleKey("bool"));
-- EXPECT_EQ(base::nullopt, dict.FindDoubleKey("int"));
-+ EXPECT_NE(base::nullopt, dict.FindDoubleKey("int"));
- EXPECT_NE(base::nullopt, dict.FindDoubleKey("double"));
- EXPECT_EQ(base::nullopt, dict.FindDoubleKey("string"));
- EXPECT_EQ(base::nullopt, dict.FindDoubleKey("blob"));
---
-2.20.1
-
diff --git a/chromium/chromium/chromium-gcc8-r647271.patch b/chromium/chromium/chromium-gcc8-r647271.patch
deleted file mode 100644
index 9a53050..0000000
--- a/chromium/chromium/chromium-gcc8-r647271.patch
+++ /dev/null
@@ -1,483 +0,0 @@
-From 2f28731c17b246bd70075f828dcafcd23547da5d Mon Sep 17 00:00:00 2001
-From: David 'Digit' Turner <digit@google.com>
-Date: Wed, 3 Apr 2019 14:32:09 +0000
-Subject: [PATCH] base: Fix Value layout for GCC
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-It turns out that the previous changes to the base::Value
-layout broke GCC compilation (see [1] for details).
-
-This CL fixes the situation by using a new DoubleStorage
-type that will store double values in a 4-byte aligned
-struct, with bit_cast<> being used to convert between
-double and DoubleStorage values in the implementation.
-
-This ensures that base::Value remains as small as possible
-in all cases. The small penalty is that loading/storing
-double values on 32-bit ARM is slightly slower due to
-the fact that the value is no longer 8-byte aligned.
-
-+ Fix the ValuesTest.SizeOfValue test to work correctly,
- and disable it for debug builds, so it doesn't fail
- because debug versions of the internal containers
- are larger on certain systems.
-
-[1] https://chromium-review.googlesource.com/c/chromium/src/+/1472716
-
-BUG=646113
-R=dcheng@chromium.org, pasko@chromium.org, lizeb@chromium.org, jdoerrie@chromium.org, jose.dapena@lge.com
-
-Change-Id: I9a365407dc064ba1bdc19859706f4154a495921e
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1550363
-Commit-Queue: David Turner <digit@chromium.org>
-Reviewed-by: Jan Wilken Dörrie <jdoerrie@chromium.org>
-Cr-Commit-Position: refs/heads/master@{#647271}
----
- base/values.cc | 67 +++++++++++++---------------
- base/values.h | 94 ++++++++++------------------------------
- base/values_unittest.cc | 96 ++++++++++++++++++++++++++++++-----------
- 3 files changed, 124 insertions(+), 133 deletions(-)
-
-diff --git a/base/values.cc b/base/values.cc
-index 9fed5b52d60e..16d686b0bee5 100644
---- a/base/values.cc
-+++ b/base/values.cc
-@@ -12,6 +12,7 @@
- #include <ostream>
- #include <utility>
-
-+#include "base/bit_cast.h"
- #include "base/json/json_writer.h"
- #include "base/logging.h"
- #include "base/memory/ptr_util.h"
-@@ -36,6 +37,9 @@ static_assert(std::is_standard_layout<Value>::value,
- "base::Value should be a standard-layout C++ class in order "
- "to avoid undefined behaviour in its implementation!");
-
-+static_assert(sizeof(Value::DoubleStorage) == sizeof(double),
-+ "The double and DoubleStorage types should have the same size");
-+
- namespace {
-
- const char* const kTypeNames[] = {"null", "boolean", "integer", "double",
-@@ -110,8 +114,6 @@ Value::Value(Value&& that) noexcept {
- InternalMoveConstructFrom(std::move(that));
- }
-
--Value::Value() noexcept : type_(Type::NONE) {}
--
- Value::Value(Type type) : type_(type) {
- // Initialize with the default value.
- switch (type_) {
-@@ -125,7 +127,7 @@ Value::Value(Type type) : type_(type) {
- int_value_ = 0;
- return;
- case Type::DOUBLE:
-- double_value_ = 0.0;
-+ double_value_ = bit_cast<DoubleStorage>(0.0);
- return;
- case Type::STRING:
- new (&string_value_) std::string();
-@@ -149,21 +151,16 @@ Value::Value(Type type) : type_(type) {
- CHECK(false);
- }
-
--Value::Value(bool in_bool)
-- : bool_type_(Type::BOOLEAN),
-- bool_value_(in_bool) {}
-+Value::Value(bool in_bool) : type_(Type::BOOLEAN), bool_value_(in_bool) {}
-
--Value::Value(int in_int)
-- : int_type_(Type::INTEGER),
-- int_value_(in_int) {}
-+Value::Value(int in_int) : type_(Type::INTEGER), int_value_(in_int) {}
-
- Value::Value(double in_double)
-- : double_type_(Type::DOUBLE),
-- double_value_(in_double) {
-- if (!std::isfinite(double_value_)) {
-+ : type_(Type::DOUBLE), double_value_(bit_cast<DoubleStorage>(in_double)) {
-+ if (!std::isfinite(in_double)) {
- NOTREACHED() << "Non-finite (i.e. NaN or positive/negative infinity) "
- << "values cannot be represented in JSON";
-- double_value_ = 0.0;
-+ double_value_ = bit_cast<DoubleStorage>(0.0);
- }
- }
-
-@@ -172,8 +169,7 @@ Value::Value(const char* in_string) : Value(std::string(in_string)) {}
- Value::Value(StringPiece in_string) : Value(std::string(in_string)) {}
-
- Value::Value(std::string&& in_string) noexcept
-- : string_type_(Type::STRING),
-- string_value_(std::move(in_string)) {
-+ : type_(Type::STRING), string_value_(std::move(in_string)) {
- DCHECK(IsStringUTF8(string_value_));
- }
-
-@@ -182,19 +178,15 @@ Value::Value(const char16* in_string16) : Value(StringPiece16(in_string16)) {}
- Value::Value(StringPiece16 in_string16) : Value(UTF16ToUTF8(in_string16)) {}
-
- Value::Value(const std::vector<char>& in_blob)
-- : binary_type_(Type::BINARY),
-- binary_value_(in_blob.begin(), in_blob.end()) {}
-+ : type_(Type::BINARY), binary_value_(in_blob.begin(), in_blob.end()) {}
-
- Value::Value(base::span<const uint8_t> in_blob)
-- : binary_type_(Type::BINARY),
-- binary_value_(in_blob.begin(), in_blob.end()) {}
-+ : type_(Type::BINARY), binary_value_(in_blob.begin(), in_blob.end()) {}
-
- Value::Value(BlobStorage&& in_blob) noexcept
-- : binary_type_(Type::BINARY),
-- binary_value_(std::move(in_blob)) {}
-+ : type_(Type::BINARY), binary_value_(std::move(in_blob)) {}
-
--Value::Value(const DictStorage& in_dict)
-- : dict_type_(Type::DICTIONARY), dict_() {
-+Value::Value(const DictStorage& in_dict) : type_(Type::DICTIONARY), dict_() {
- dict_.reserve(in_dict.size());
- for (const auto& it : in_dict) {
- dict_.try_emplace(dict_.end(), it.first,
-@@ -203,18 +195,16 @@ Value::Value(const DictStorage& in_dict)
- }
-
- Value::Value(DictStorage&& in_dict) noexcept
-- : dict_type_(Type::DICTIONARY),
-- dict_(std::move(in_dict)) {}
-+ : type_(Type::DICTIONARY), dict_(std::move(in_dict)) {}
-
--Value::Value(const ListStorage& in_list) : list_type_(Type::LIST), list_() {
-+Value::Value(const ListStorage& in_list) : type_(Type::LIST), list_() {
- list_.reserve(in_list.size());
- for (const auto& val : in_list)
- list_.emplace_back(val.Clone());
- }
-
- Value::Value(ListStorage&& in_list) noexcept
-- : list_type_(Type::LIST),
-- list_(std::move(in_list)) {}
-+ : type_(Type::LIST), list_(std::move(in_list)) {}
-
- Value& Value::operator=(Value&& that) noexcept {
- InternalCleanup();
-@@ -223,6 +213,10 @@ Value& Value::operator=(Value&& that) noexcept {
- return *this;
- }
-
-+double Value::AsDoubleInternal() const {
-+ return bit_cast<double>(double_value_);
-+}
-+
- Value Value::Clone() const {
- switch (type_) {
- case Type::NONE:
-@@ -232,7 +226,7 @@ Value Value::Clone() const {
- case Type::INTEGER:
- return Value(int_value_);
- case Type::DOUBLE:
-- return Value(double_value_);
-+ return Value(AsDoubleInternal());
- case Type::STRING:
- return Value(string_value_);
- case Type::BINARY:
-@@ -277,7 +271,7 @@ int Value::GetInt() const {
-
- double Value::GetDouble() const {
- if (is_double())
-- return double_value_;
-+ return AsDoubleInternal();
- if (is_int())
- return int_value_;
- CHECK(false);
-@@ -342,9 +336,10 @@ base::Optional<double> Value::FindDoubleKey(StringPiece key) const {
- const Value* result = FindKey(key);
- if (result) {
- if (result->is_int())
-- return base::make_optional(static_cast<double>(result->int_value_));
-- if (result->is_double())
-- return base::make_optional(result->double_value_);
-+ return static_cast<double>(result->int_value_);
-+ if (result->is_double()) {
-+ return result->AsDoubleInternal();
-+ }
- }
- return base::nullopt;
- }
-@@ -601,7 +596,7 @@ bool Value::GetAsInteger(int* out_value) const {
-
- bool Value::GetAsDouble(double* out_value) const {
- if (out_value && is_double()) {
-- *out_value = double_value_;
-+ *out_value = AsDoubleInternal();
- return true;
- }
- if (out_value && is_int()) {
-@@ -696,7 +691,7 @@ bool operator==(const Value& lhs, const Value& rhs) {
- case Value::Type::INTEGER:
- return lhs.int_value_ == rhs.int_value_;
- case Value::Type::DOUBLE:
-- return lhs.double_value_ == rhs.double_value_;
-+ return lhs.AsDoubleInternal() == rhs.AsDoubleInternal();
- case Value::Type::STRING:
- return lhs.string_value_ == rhs.string_value_;
- case Value::Type::BINARY:
-@@ -741,7 +736,7 @@ bool operator<(const Value& lhs, const Value& rhs) {
- case Value::Type::INTEGER:
- return lhs.int_value_ < rhs.int_value_;
- case Value::Type::DOUBLE:
-- return lhs.double_value_ < rhs.double_value_;
-+ return lhs.AsDoubleInternal() < rhs.AsDoubleInternal();
- case Value::Type::STRING:
- return lhs.string_value_ < rhs.string_value_;
- case Value::Type::BINARY:
-diff --git a/base/values.h b/base/values.h
-index 486fe7ff3976..c455936d4961 100644
---- a/base/values.h
-+++ b/base/values.h
-@@ -83,6 +83,8 @@ class BASE_EXPORT Value {
- using BlobStorage = std::vector<uint8_t>;
- using DictStorage = flat_map<std::string, std::unique_ptr<Value>>;
- using ListStorage = std::vector<Value>;
-+ // See technical note below explaining why this is used.
-+ using DoubleStorage = struct { alignas(4) char v[sizeof(double)]; };
-
- enum class Type {
- NONE = 0,
-@@ -111,7 +113,10 @@ class BASE_EXPORT Value {
- static std::unique_ptr<Value> ToUniquePtrValue(Value val);
-
- Value(Value&& that) noexcept;
-- Value() noexcept; // A null value.
-+ Value() noexcept {} // A null value
-+ // Fun fact: using '= default' above instead of '{}' does not work because
-+ // the compiler complains that the default constructor was deleted since
-+ // the inner union contains fields with non-default constructors.
-
- // Value's copy constructor and copy assignment operator are deleted. Use this
- // to obtain a deep copy explicitly.
-@@ -405,82 +410,29 @@ class BASE_EXPORT Value {
- size_t EstimateMemoryUsage() const;
-
- protected:
-- // Technical note:
-- // The naive way to implement a tagged union leads to wasted bytes
-- // in the object on CPUs like ARM ones, which impose an 8-byte alignment
-- // for double values. I.e. if one does something like:
-+ // Special case for doubles, which are aligned to 8 bytes on some
-+ // 32-bit architectures. In this case, a simple declaration as a
-+ // double member would make the whole union 8 byte-aligned, which
-+ // would also force 4 bytes of wasted padding space before it in
-+ // the Value layout.
- //
-- // struct TaggedValue {
-- // int type_; // size = 1, align = 4
-- // union {
-- // bool bool_value_; // size = 1, align = 1
-- // int int_value_; // size = 4, align = 4
-- // double double_value_; // size = 8, align = 8
-- // std::string string_value_; // size = 12, align = 4 (32-bit)
-- // };
-- // };
-- //
-- // The end result is that the union will have an alignment of 8, and a size
-- // of 16, due to 4 extra padding bytes following |string_value_| to respect
-- // the alignment requirement.
-- //
-- // As a consequence, the struct TaggedValue will have a size of 24 bytes,
-- // due to the size of the union (16), the size of |type_| (4) and 4 bytes
-- // of padding between |type_| and the union to respect its alignment.
-- //
-- // This means 8 bytes of unused memory per instance on 32-bit ARM!
-- //
-- // To reclaim these, a union of structs is used instead, in order to ensure
-- // that |double_value_| below is always located at an offset that is a
-- // multiple of 8, relative to the start of the overall data structure.
-- //
-- // Each struct must declare its own |type_| field, which must have a different
-- // name, to appease the C++ compiler.
-- //
-- // Using this technique sizeof(base::Value) == 16 on 32-bit ARM instead
-- // of 24, without losing any information. Results are unchanged for x86,
-- // x86_64 and arm64 (16, 32 and 32 bytes respectively).
-+ // To override this, store the value as an array of 32-bit integers, and
-+ // perform the appropriate bit casts when reading / writing to it.
-+ Type type_ = Type::NONE;
-+
- union {
-- struct {
-- // TODO(crbug.com/646113): Make these private once DictionaryValue and
-- // ListValue are properly inlined.
-- Type type_ : 8;
-- };
-- struct {
-- Type bool_type_ : 8;
-- bool bool_value_;
-- };
-- struct {
-- Type int_type_ : 8;
-- int int_value_;
-- };
-- struct {
-- Type double_type_ : 8;
-- // Subtle: On architectures that require it, the compiler will ensure
-- // that |double_value_|'s offset is a multiple of 8 (e.g. 32-bit ARM).
-- // See technical note above to understand why it is important.
-- double double_value_;
-- };
-- struct {
-- Type string_type_ : 8;
-- std::string string_value_;
-- };
-- struct {
-- Type binary_type_ : 8;
-- BlobStorage binary_value_;
-- };
-- struct {
-- Type dict_type_ : 8;
-- DictStorage dict_;
-- };
-- struct {
-- Type list_type_ : 8;
-- ListStorage list_;
-- };
-+ bool bool_value_;
-+ int int_value_;
-+ DoubleStorage double_value_;
-+ std::string string_value_;
-+ BlobStorage binary_value_;
-+ DictStorage dict_;
-+ ListStorage list_;
- };
-
- private:
- friend class ValuesTest_SizeOfValue_Test;
-+ double AsDoubleInternal() const;
- void InternalMoveConstructFrom(Value&& that);
- void InternalCleanup();
-
-diff --git a/base/values_unittest.cc b/base/values_unittest.cc
-index 2dd1c76afaa9..f3536a8612b1 100644
---- a/base/values_unittest.cc
-+++ b/base/values_unittest.cc
-@@ -26,45 +26,89 @@
-
- namespace base {
-
--// Test is currently incorrect on Windows x86.
--#if !defined(OS_WIN) || !defined(ARCH_CPU_X86)
-+// Ensure that base::Value is as small as possible, i.e. that there is
-+// no wasted space after the inner value due to alignment constraints.
-+// Distinguish between the 'header' that includes |type_| and and the inner
-+// value that follows it, which can be a bool, int, double, string, blob, list
-+// or dict.
-+//
-+// This test is only enabled when NDEBUG is defined. This way the test will not
-+// fail in debug builds that sometimes contain larger versions of the standard
-+// containers used inside base::Value.
-+#if defined(NDEBUG)
-+
-+static size_t AlignSizeTo(size_t size, size_t alignment) {
-+ EXPECT_TRUE((alignment & (alignment - 1)) == 0)
-+ << "Alignment " << alignment << " is not a power of 2!";
-+ return (size + (alignment - 1u)) & ~(alignment - 1u);
-+}
-+
- TEST(ValuesTest, SizeOfValue) {
-- // Ensure that base::Value is as small as possible, i.e. that there is
-- // no wasted space after the inner value due to alignment constraints.
-- // Distinguish between the 'header' that includes |type_| and and the inner
-- // value that follows it, which can be a bool, int, double, string, blob, list
-- // or dict.
--#define INNER_TYPES_LIST(X) \
-- X(bool, bool_value_) \
-- X(int, int_value_) \
-- X(double, double_value_) \
-- X(std::string, string_value_) \
-- X(Value::BlobStorage, binary_value_) \
-- X(Value::ListStorage, list_) \
-+#define INNER_TYPES_LIST(X) \
-+ X(bool, bool_value_) \
-+ X(int, int_value_) \
-+ X(Value::DoubleStorage, double_value_) \
-+ X(std::string, string_value_) \
-+ X(Value::BlobStorage, binary_value_) \
-+ X(Value::ListStorage, list_) \
- X(Value::DictStorage, dict_)
-
--#define INNER_STRUCT_LIMIT(type, value) offsetof(Value, value) + sizeof(type),
-+#define INNER_FIELD_ALIGNMENT(type, value) alignof(type),
-+
-+ // The maximum alignment of each inner struct value field inside base::Value
-+ size_t max_inner_value_alignment =
-+ std::max({INNER_TYPES_LIST(INNER_FIELD_ALIGNMENT)});
-+
-+ // Check that base::Value has the smallest alignment possible. This would
-+ // fail if the header would contain something that has a larger alignment
-+ // than necessary.
-+ EXPECT_EQ(max_inner_value_alignment, alignof(Value));
-+
-+ // Find the offset of each inner value. Which should normally not be
-+ // larger than 4. Note that we use std::max(4, ...) because bool_value_
-+ // could be stored just after the |bool_type_| field, with an offset of
-+ // 1, and that would be ok.
-+#define INNER_VALUE_START_OFFSET(type, value) offsetof(Value, value),
-+
-+ size_t min_inner_value_offset =
-+ std::min({INNER_TYPES_LIST(INNER_VALUE_START_OFFSET)});
-
-- // Return the maximum size in bytes of each inner struct inside base::Value
-- size_t max_inner_struct_limit =
-- std::max({INNER_TYPES_LIST(INNER_STRUCT_LIMIT)});
-+ // Inner fields may contain pointers, which have an alignment of 8
-+ // on most 64-bit platforms.
-+ size_t expected_min_offset = alignof(void*);
-+
-+ EXPECT_EQ(expected_min_offset, min_inner_value_offset);
-
- // Ensure that base::Value is not larger than necessary, i.e. that there is
-- // no un-necessary padding afte the structs due to alignment constraints of
-+ // no un-necessary padding after the structs due to alignment constraints of
- // one of the inner fields.
-- EXPECT_EQ(max_inner_struct_limit, sizeof(Value));
-- if (max_inner_struct_limit != sizeof(Value)) {
-+#define INNER_STRUCT_END_OFFSET(type, value) \
-+ offsetof(Value, value) + sizeof(type),
-+
-+ // The maximum size in bytes of each inner struct inside base::Value,
-+ size_t max_inner_struct_end_offset =
-+ std::max({INNER_TYPES_LIST(INNER_STRUCT_END_OFFSET)});
-+
-+ // The expected value size.
-+ size_t expected_value_size =
-+ AlignSizeTo(max_inner_struct_end_offset, alignof(Value));
-+
-+ EXPECT_EQ(expected_value_size, sizeof(Value));
-+ if (min_inner_value_offset != expected_min_offset ||
-+ expected_value_size != sizeof(Value)) {
- // The following are useful to understand what's wrong when the EXPECT_EQ()
-- // above actually fails.
--#define PRINT_INNER_FIELD_INFO(x, y) \
-- LOG(INFO) << #y " type=" #x " size=" << sizeof(x) << " align=" << alignof(x);
-+ // above actually fail.
-+#define PRINT_INNER_FIELD_INFO(x, y) \
-+ LOG(INFO) << #y " type=" #x " offset=" << offsetof(Value, y) \
-+ << " size=" << sizeof(x) << " align=" << alignof(x);
-
- LOG(INFO) << "Value size=" << sizeof(Value) << " align=" << alignof(Value);
- INNER_TYPES_LIST(PRINT_INNER_FIELD_INFO)
-- LOG(INFO) << "max_inner_struct_limit=" << max_inner_struct_limit;
-+ LOG(INFO) << "max_inner_struct_end_offset=" << max_inner_struct_end_offset;
- }
- }
--#endif
-+
-+#endif // NDEBUG
-
- TEST(ValuesTest, TestNothrow) {
- static_assert(std::is_nothrow_move_constructible<Value>::value,
---
-2.20.1
-
diff --git a/chromium/chromium/chromium-gcc8-r647382.patch b/chromium/chromium/chromium-gcc8-r647382.patch
deleted file mode 100644
index 62efd00..0000000
--- a/chromium/chromium/chromium-gcc8-r647382.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 7685422a90e1da829cb32d685a4b970d30738098 Mon Sep 17 00:00:00 2001
-From: Jose Dapena Paz <jose.dapena@lge.com>
-Date: Wed, 3 Apr 2019 18:35:04 +0000
-Subject: [PATCH] base: Value::Type enum class size should be 8-bit.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-GCC is complaining because, when base::Type is used to declare the different
-variants of Type in its union, they are forced to take 8-bit, that is smaller
-than the enum class default size (same as int).
-
-So this change sets explicitely the enum class underlying type to be unsigned
-char.
-
-BUG=chromium:819294
-
-Change-Id: I1765e2503e2c3d3675c73ecb0f7f5bc33456e6f0
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1550366
-Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
-Reviewed-by: Jan Wilken Dörrie <jdoerrie@chromium.org>
-Cr-Commit-Position: refs/heads/master@{#647382}
----
- base/values.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/base/values.h b/base/values.h
-index c455936d4961..14b76acec02f 100644
---- a/base/values.h
-+++ b/base/values.h
-@@ -86,7 +86,7 @@ class BASE_EXPORT Value {
- // See technical note below explaining why this is used.
- using DoubleStorage = struct { alignas(4) char v[sizeof(double)]; };
-
-- enum class Type {
-+ enum class Type : unsigned char {
- NONE = 0,
- BOOLEAN,
- INTEGER,
---
-2.20.1
-
diff --git a/chromium/chromium/chromium-gcc9-r654570.patch b/chromium/chromium/chromium-gcc9-r654570.patch
new file mode 100644
index 0000000..6302b0c
--- /dev/null
+++ b/chromium/chromium/chromium-gcc9-r654570.patch
@@ -0,0 +1,39 @@
+From aeed4d1f15ce84a17ea0bc219e258dc4982b2368 Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Fri, 26 Apr 2019 20:07:05 +0000
+Subject: [PATCH] libstdc++: do not assume unique_ptr has ostream operator
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+CompositorFrameReportingController is using DCHECK_NE to compare
+several unique_ptr. This is valid in libc++, but on libstdc++ unique_ptr
+does not have an ostream operator.
+
+Change-Id: I9f23ef17f02b9e107694ba493f6f8f3caf5cac4d
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1584292
+Reviewed-by: Sunny Sachanandani <sunnyps@chromium.org>
+Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
+Cr-Commit-Position: refs/heads/master@{#654570}
+---
+ cc/scheduler/compositor_frame_reporting_controller.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cc/scheduler/compositor_frame_reporting_controller.cc b/cc/scheduler/compositor_frame_reporting_controller.cc
+index f1587ed158d4..1b17021fd229 100644
+--- a/cc/scheduler/compositor_frame_reporting_controller.cc
++++ b/cc/scheduler/compositor_frame_reporting_controller.cc
+@@ -31,8 +31,8 @@ void CompositorFrameReportingController::WillBeginImplFrame() {
+
+ void CompositorFrameReportingController::WillBeginMainFrame() {
+ DCHECK(reporters_[PipelineStage::kBeginImplFrame]);
+- DCHECK_NE(reporters_[PipelineStage::kBeginMainFrame],
+- reporters_[PipelineStage::kBeginImplFrame]);
++ DCHECK(reporters_[PipelineStage::kBeginMainFrame] !=
++ reporters_[PipelineStage::kBeginImplFrame]);
+ reporters_[PipelineStage::kBeginImplFrame]->StartStage(
+ "SendBeginMainFrameToCommit");
+ AdvanceReporterStage(PipelineStage::kBeginImplFrame,
+--
+2.21.0
+
diff --git a/chromium/chromium/chromium-gcc9-r666714.patch b/chromium/chromium/chromium-gcc9-r666714.patch
new file mode 100644
index 0000000..77f71dd
--- /dev/null
+++ b/chromium/chromium/chromium-gcc9-r666714.patch
@@ -0,0 +1,111 @@
+From 41d954dec0669c9a85730c0bde7df7ba7a0ff43e Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Thu, 6 Jun 2019 15:30:49 +0000
+Subject: [PATCH] Fix AutocompleteMatch move constructor/assign operator
+ noexcept
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+For AutocompleteMatch to declare noexcept them, all the contained
+properties need to be noexcept too. This is required at least
+for SuggestionAnswer, because base::string16 will make default
+calculated signature of the move operator noexcept(false).
+
+To avoid this issue we explicitely declare them on SuggestionAnswer,
+and its member classes TextField and ImageLine.
+
+Bug: 819294
+Change-Id: I8714f2c6352a3292bdebdc3aed9790270e49c580
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1554669
+Reviewed-by: Kevin Bailey <krb@chromium.org>
+Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
+Cr-Commit-Position: refs/heads/master@{#666714}
+---
+ components/omnibox/browser/suggestion_answer.cc | 14 ++++++++++++++
+ components/omnibox/browser/suggestion_answer.h | 8 ++++++++
+ 2 files changed, 22 insertions(+)
+
+diff --git a/components/omnibox/browser/suggestion_answer.cc b/components/omnibox/browser/suggestion_answer.cc
+index 151e55f7dd58..a0c9049afedb 100644
+--- a/components/omnibox/browser/suggestion_answer.cc
++++ b/components/omnibox/browser/suggestion_answer.cc
+@@ -55,6 +55,12 @@ void AppendWithSpace(const SuggestionAnswer::TextField* text,
+
+ SuggestionAnswer::TextField::TextField() = default;
+ SuggestionAnswer::TextField::~TextField() = default;
++SuggestionAnswer::TextField::TextField(const TextField&) = default;
++SuggestionAnswer::TextField::TextField(TextField&&) noexcept = default;
++SuggestionAnswer::TextField& SuggestionAnswer::TextField::operator=(
++ const TextField&) = default;
++SuggestionAnswer::TextField& SuggestionAnswer::TextField::operator=(
++ TextField&&) noexcept = default;
+
+ // static
+ bool SuggestionAnswer::TextField::ParseTextField(const base::Value& field_json,
+@@ -93,9 +99,12 @@ size_t SuggestionAnswer::TextField::EstimateMemoryUsage() const {
+ SuggestionAnswer::ImageLine::ImageLine()
+ : num_text_lines_(1) {}
+ SuggestionAnswer::ImageLine::ImageLine(const ImageLine& line) = default;
++SuggestionAnswer::ImageLine::ImageLine(ImageLine&&) noexcept = default;
+
+ SuggestionAnswer::ImageLine& SuggestionAnswer::ImageLine::operator=(
+ const ImageLine& line) = default;
++SuggestionAnswer::ImageLine& SuggestionAnswer::ImageLine::operator=(
++ ImageLine&&) noexcept = default;
+
+ SuggestionAnswer::ImageLine::~ImageLine() {}
+
+@@ -251,9 +260,14 @@ SuggestionAnswer::SuggestionAnswer() = default;
+
+ SuggestionAnswer::SuggestionAnswer(const SuggestionAnswer& answer) = default;
+
++SuggestionAnswer::SuggestionAnswer(SuggestionAnswer&&) noexcept = default;
++
+ SuggestionAnswer& SuggestionAnswer::operator=(const SuggestionAnswer& answer) =
+ default;
+
++SuggestionAnswer& SuggestionAnswer::operator=(SuggestionAnswer&&) noexcept =
++ default;
++
+ SuggestionAnswer::~SuggestionAnswer() = default;
+
+ // static
+diff --git a/components/omnibox/browser/suggestion_answer.h b/components/omnibox/browser/suggestion_answer.h
+index 31be937ccbed..2840ace1c117 100644
+--- a/components/omnibox/browser/suggestion_answer.h
++++ b/components/omnibox/browser/suggestion_answer.h
+@@ -125,6 +125,10 @@ class SuggestionAnswer {
+ public:
+ TextField();
+ ~TextField();
++ TextField(const TextField&);
++ TextField(TextField&&) noexcept;
++ TextField& operator=(const TextField&);
++ TextField& operator=(TextField&&) noexcept;
+
+ // Parses |field_json| dictionary and populates |text_field| with the
+ // contents. If any of the required elements is missing, returns false and
+@@ -162,7 +166,9 @@ class SuggestionAnswer {
+ public:
+ ImageLine();
+ explicit ImageLine(const ImageLine& line);
++ ImageLine(ImageLine&&) noexcept;
+ ImageLine& operator=(const ImageLine& line);
++ ImageLine& operator=(ImageLine&&) noexcept;
+ ~ImageLine();
+
+ // Parses dictionary |line_json| and populates |image_line| with the
+@@ -213,7 +219,9 @@ class SuggestionAnswer {
+
+ SuggestionAnswer();
+ SuggestionAnswer(const SuggestionAnswer& answer);
++ SuggestionAnswer(SuggestionAnswer&&) noexcept;
+ SuggestionAnswer& operator=(const SuggestionAnswer& answer);
++ SuggestionAnswer& operator=(SuggestionAnswer&&) noexcept;
+ ~SuggestionAnswer();
+
+ // Parses dictionary |answer_json| and fills a SuggestionAnswer containing the
+--
+2.21.0
+
diff --git a/chromium/chromium/chromium-gn-revert-bug-77.patch b/chromium/chromium/chromium-gn-revert-bug-77.patch
deleted file mode 100644
index 6ff5fde..0000000
--- a/chromium/chromium/chromium-gn-revert-bug-77.patch
+++ /dev/null
@@ -1,918 +0,0 @@
-From 8730b0feb6b991fa47368566501ab9ccfb453c92 Mon Sep 17 00:00:00 2001
-From: Tom Anderson <thomasanderson@chromium.org>
-Date: Thu, 16 May 2019 11:00:40 -0700
-Subject: [PATCH] Disallow non-buildable sources in binary targets
-
-When adding a file that's not a source, header, or object file to a source_set,
-loadable_module, shared_library, executable, or static_library, gn will now
-generate an error like the following:
-
-ERROR at //third_party/protobuf/proto_library.gni:369:15: Only source, header,
-and object files belong in the sources of a
-source_set. //out/Test/pyproto/google_apis/gcm/protocol/mcs_pb2.py is not one of
-the valid types.
- sources = get_target_outputs(":$action_name")
- ^---------------------------------
-See //google_apis/gcm/BUILD.gn:78:1: whence it was called.
-proto_library("proto") {
-^-----------------------
-See //BUILD.gn:89:7: which caused the file to be included.
- "//google_apis/gcm:gcm_unit_tests",
- ^---------------------------------
-
-BUG=77
-R=brettw
-
-Change-Id: I4ed8da10c48e3e5d74f79e51d8222c998a7b883a
-Reviewed-on: https://gn-review.googlesource.com/c/gn/+/4980
-Commit-Queue: Brett Wilson <brettw@google.com>
-Reviewed-by: Brett Wilson <brettw@google.com>
----
- tools/gn/binary_target_generator.cc | 32 +++++++++++++++++++++++++++++
- tools/gn/binary_target_generator.h | 1 +
- tools/gn/source_dir.cc | 6 +++---
- tools/gn/source_file.cc | 12 ++++++++---
- tools/gn/source_file.h | 7 ++++++-
- tools/gn/target_generator.h | 2 +-
- 6 files changed, 52 insertions(+), 8 deletions(-)
-
-diff --git b/tools/gn/binary_target_generator.cc a/tools/gn/binary_target_generator.cc
-index 6d8cec92..60af2423 100644
---- b/tools/gn/tools/gn/binary_target_generator.cc
-+++ a/tools/gn/tools/gn/binary_target_generator.cc
-@@ -68,38 +68,6 @@ void BinaryTargetGenerator::DoRun() {
- return;
- }
-
--bool BinaryTargetGenerator::FillSources() {
-- bool ret = TargetGenerator::FillSources();
-- for (std::size_t i = 0; i < target_->sources().size(); ++i) {
-- const auto& source = target_->sources()[i];
-- switch (source.type()) {
-- case SourceFile::SOURCE_CPP:
-- case SourceFile::SOURCE_H:
-- case SourceFile::SOURCE_C:
-- case SourceFile::SOURCE_M:
-- case SourceFile::SOURCE_MM:
-- case SourceFile::SOURCE_S:
-- case SourceFile::SOURCE_ASM:
-- case SourceFile::SOURCE_O:
-- // These are allowed.
-- break;
-- case SourceFile::SOURCE_RC:
-- case SourceFile::SOURCE_DEF:
-- case SourceFile::SOURCE_RS:
-- case SourceFile::SOURCE_GO:
-- case SourceFile::SOURCE_UNKNOWN:
-- case SourceFile::SOURCE_NUMTYPES:
-- *err_ =
-- Err(scope_->GetValue(variables::kSources, true)->list_value()[i],
-- std::string("Only source, header, and object files belong in "
-- "the sources of a ") +
-- Target::GetStringForOutputType(target_->output_type()) +
-- ". " + source.value() + " is not one of the valid types.");
-- }
-- }
-- return ret;
--}
--
- bool BinaryTargetGenerator::FillCompleteStaticLib() {
- if (target_->output_type() == Target::STATIC_LIBRARY) {
- const Value* value = scope_->GetValue(variables::kCompleteStaticLib, true);
-diff --git b/tools/gn/binary_target_generator.h a/tools/gn/binary_target_generator.h
-index 6cbd11ea..40fc3141 100644
---- b/tools/gn/tools/gn/binary_target_generator.h
-+++ a/tools/gn/tools/gn/binary_target_generator.h
-@@ -22,7 +22,6 @@ class BinaryTargetGenerator : public TargetGenerator {
-
- protected:
- void DoRun() override;
-- bool FillSources() override;
-
- private:
- bool FillCompleteStaticLib();
-diff --git b/tools/gn/source_dir.cc a/tools/gn/source_dir.cc
-index 50b45175..0fd5c75a 100644
---- b/tools/gn/tools/gn/source_dir.cc
-+++ a/tools/gn/tools/gn/source_dir.cc
-@@ -98,10 +98,10 @@ SourceFile SourceDir::ResolveRelativeFile(
- return ret;
-
- const std::string& input_string = p.string_value();
-- if (!ValidateResolveInput<std::string>(true, p, input_string, err))
-+ if (!ValidateResolveInput<std::string>(true, p, input_string, err)) {
- return ret;
--
-- ret.SetValue(ResolveRelative(input_string, value_, true, source_root));
-+ }
-+ ret.value_ = ResolveRelative(input_string, value_, true, source_root);
- return ret;
- }
-
-diff --git b/tools/gn/source_file.cc a/tools/gn/source_file.cc
-index 29232274..7c860d43 100644
---- b/tools/gn/tools/gn/source_file.cc
-+++ a/tools/gn/tools/gn/source_file.cc
-@@ -55,19 +55,18 @@ SourceFile::Type GetSourceFileType(const std::string& file) {
- SourceFile::SourceFile() : type_(SOURCE_UNKNOWN) {}
-
- SourceFile::SourceFile(const base::StringPiece& p)
-- : value_(p.data(), p.size()) {
-+ : value_(p.data(), p.size()), type_(GetSourceFileType(value_)) {
- DCHECK(!value_.empty());
- AssertValueSourceFileString(value_);
- NormalizePath(&value_);
-- type_ = GetSourceFileType(value_);
- }
-
--SourceFile::SourceFile(SwapIn, std::string* value) {
-+SourceFile::SourceFile(SwapIn, std::string* value)
-+ : type_(GetSourceFileType(*value)) {
- value_.swap(*value);
- DCHECK(!value_.empty());
- AssertValueSourceFileString(value_);
- NormalizePath(&value_);
-- type_ = GetSourceFileType(value_);
- }
-
- SourceFile::~SourceFile() = default;
-@@ -93,8 +92,3 @@ SourceDir SourceFile::GetDir() const {
- base::FilePath SourceFile::Resolve(const base::FilePath& source_root) const {
- return ResolvePath(value_, true, source_root);
- }
--
--void SourceFile::SetValue(const std::string& value) {
-- value_ = value;
-- type_ = GetSourceFileType(value_);
--}
-diff --git b/tools/gn/source_file.h a/tools/gn/source_file.h
-index d42063d6..bcf5f422 100644
---- b/tools/gn/tools/gn/source_file.h
-+++ a/tools/gn/tools/gn/source_file.h
-@@ -97,16 +97,11 @@ class SourceFile {
- return value_ < other.value_;
- }
-
-- void swap(SourceFile& other) {
-- value_.swap(other.value_);
-- std::swap(type_, other.type_);
-- }
-+ void swap(SourceFile& other) { value_.swap(other.value_); }
-
- private:
- friend class SourceDir;
-
-- void SetValue(const std::string& value);
--
- std::string value_;
- Type type_;
-
-diff --git b/tools/gn/target_generator.h a/tools/gn/target_generator.h
-index 8795cbf9..627505da 100644
---- b/tools/gn/tools/gn/target_generator.h
-+++ a/tools/gn/tools/gn/target_generator.h
-@@ -47,7 +47,7 @@ class TargetGenerator {
-
- const BuildSettings* GetBuildSettings() const;
-
-- virtual bool FillSources();
-+ bool FillSources();
- bool FillPublic();
- bool FillConfigs();
- bool FillOutputs(bool allow_substitutions);
---
-2.21.0
-
-From 0d038c2e0a32a528713d3dfaf1f1e0cdfe87fd46 Mon Sep 17 00:00:00 2001
-From: Tom Anderson <thomasanderson@chromium.org>
-Date: Wed, 15 May 2019 13:00:20 -0700
-Subject: [PATCH] Cache source file type in SourceFile
-
-This is in preparation for fixing bug 77. Reduces the number of calls to
-GetSourceFileType() from ~2 million to ~500 thousand when generating Chromium's
-build files.
-
-BUG=77
-R=brettw
-
-Change-Id: I044e5b5ebf41ce70769ae3818ea5989206f44453
-Reviewed-on: https://gn-review.googlesource.com/c/gn/+/4960
-Reviewed-by: Brett Wilson <brettw@google.com>
-Commit-Queue: Brett Wilson <brettw@google.com>
----
- build/gen.py | 1 -
- tools/gn/c_tool.h | 1 -
- tools/gn/compile_commands_writer.cc | 20 ++++++-----
- tools/gn/general_tool.h | 1 -
- tools/gn/header_checker.cc | 8 ++---
- tools/gn/ninja_binary_target_writer.cc | 15 ++++-----
- tools/gn/ninja_binary_target_writer.h | 9 ++---
- tools/gn/ninja_c_binary_target_writer.cc | 42 +++++++++++++-----------
- tools/gn/source_file.cc | 36 ++++++++++++++++++--
- tools/gn/source_file.h | 24 ++++++++++++++
- tools/gn/source_file_type.cc | 37 ---------------------
- tools/gn/source_file_type.h | 34 -------------------
- tools/gn/target.cc | 7 ++--
- tools/gn/tool.cc | 28 ++++++++--------
- tools/gn/tool.h | 4 +--
- tools/gn/toolchain.cc | 6 ++--
- tools/gn/toolchain.h | 7 ++--
- tools/gn/visual_studio_writer.cc | 1 -
- 18 files changed, 130 insertions(+), 151 deletions(-)
- delete mode 100644 tools/gn/source_file_type.cc
- delete mode 100644 tools/gn/source_file_type.h
-
-diff --git b/build/gen.py a/build/gen.py
-index 97e5adb7..874ecbaa 100755
---- b/tools/gn/build/gen.py
-+++ a/tools/gn/build/gen.py
-@@ -520,6 +520,7 @@ def WriteGNNinja(path, platform, host, options):
- 'tools/gn/setup.cc',
- 'tools/gn/source_dir.cc',
- 'tools/gn/source_file.cc',
-+ 'tools/gn/source_file_type.cc',
- 'tools/gn/standard_out.cc',
- 'tools/gn/string_utils.cc',
- 'tools/gn/substitution_list.cc',
-diff --git b/tools/gn/c_tool.h a/tools/gn/c_tool.h
-index 07dfcbe2..129a7332 100644
---- b/tools/gn/tools/gn/c_tool.h
-+++ a/tools/gn/tools/gn/c_tool.h
-@@ -12,6 +12,7 @@
- #include "tools/gn/label.h"
- #include "tools/gn/label_ptr.h"
- #include "tools/gn/scope.h"
-+#include "tools/gn/source_file_type.h"
- #include "tools/gn/substitution_list.h"
- #include "tools/gn/substitution_pattern.h"
- #include "tools/gn/tool.h"
-diff --git b/tools/gn/compile_commands_writer.cc a/tools/gn/compile_commands_writer.cc
-index 208952d2..e4a1a191 100644
---- b/tools/gn/tools/gn/compile_commands_writer.cc
-+++ a/tools/gn/tools/gn/compile_commands_writer.cc
-@@ -122,7 +122,7 @@ void WriteCommand(const Target* target,
- const CompileFlags& flags,
- std::vector<OutputFile>& tool_outputs,
- PathOutput& path_output,
-- SourceFile::Type source_type,
-+ SourceFileType source_type,
- const char* tool_name,
- EscapeOptions opts,
- std::string* compile_commands) {
-@@ -144,16 +144,16 @@ void WriteCommand(const Target* target,
- } else if (range.type == &CSubstitutionCFlags) {
- command_out << flags.cflags;
- } else if (range.type == &CSubstitutionCFlagsC) {
-- if (source_type == SourceFile::SOURCE_C)
-+ if (source_type == SOURCE_C)
- command_out << flags.cflags_c;
- } else if (range.type == &CSubstitutionCFlagsCc) {
-- if (source_type == SourceFile::SOURCE_CPP)
-+ if (source_type == SOURCE_CPP)
- command_out << flags.cflags_cc;
- } else if (range.type == &CSubstitutionCFlagsObjC) {
-- if (source_type == SourceFile::SOURCE_M)
-+ if (source_type == SOURCE_M)
- command_out << flags.cflags_objc;
- } else if (range.type == &CSubstitutionCFlagsObjCc) {
-- if (source_type == SourceFile::SOURCE_MM)
-+ if (source_type == SOURCE_MM)
- command_out << flags.cflags_objcc;
- } else if (range.type == &SubstitutionLabel ||
- range.type == &SubstitutionLabelName ||
-@@ -222,11 +222,9 @@ void CompileCommandsWriter::RenderJSON(const BuildSettings* build_settings,
- for (const auto& source : target->sources()) {
- // If this source is not a C/C++/ObjC/ObjC++ source (not header) file,
- // continue as it does not belong in the compilation database.
-- SourceFile::Type source_type = source.type();
-- if (source_type != SourceFile::SOURCE_CPP &&
-- source_type != SourceFile::SOURCE_C &&
-- source_type != SourceFile::SOURCE_M &&
-- source_type != SourceFile::SOURCE_MM)
-+ SourceFileType source_type = GetSourceFileType(source);
-+ if (source_type != SOURCE_CPP && source_type != SOURCE_C &&
-+ source_type != SOURCE_M && source_type != SOURCE_MM)
- continue;
-
- const char* tool_name = Tool::kToolNone;
-@@ -324,4 +322,4 @@ void CompileCommandsWriter::VisitDeps(const Target* target,
- VisitDeps(pair.ptr, visited);
- }
- }
--}
-+}
-\ No newline at end of file
-diff --git b/tools/gn/general_tool.h a/tools/gn/general_tool.h
-index 827a48dc..b6e1af0c 100644
---- b/tools/gn/tools/gn/general_tool.h
-+++ a/tools/gn/tools/gn/general_tool.h
-@@ -11,6 +11,7 @@
- #include "base/macros.h"
- #include "tools/gn/label.h"
- #include "tools/gn/label_ptr.h"
-+#include "tools/gn/source_file_type.h"
- #include "tools/gn/substitution_list.h"
- #include "tools/gn/substitution_pattern.h"
- #include "tools/gn/tool.h"
-diff --git b/tools/gn/header_checker.cc a/tools/gn/header_checker.cc
-index dca7302d..8407bd0f 100644
---- b/tools/gn/tools/gn/header_checker.cc
-+++ a/tools/gn/tools/gn/header_checker.cc
-@@ -18,6 +18,7 @@
- #include "tools/gn/err.h"
- #include "tools/gn/filesystem_utils.h"
- #include "tools/gn/scheduler.h"
-+#include "tools/gn/source_file_type.h"
- #include "tools/gn/target.h"
- #include "tools/gn/trace.h"
- #include "util/worker_pool.h"
-@@ -151,10 +152,9 @@ void HeaderChecker::RunCheckOverFiles(const FileMap& files, bool force_check) {
-
- for (const auto& file : files) {
- // Only check C-like source files (RC files also have includes).
-- SourceFile::Type type = file.first.type();
-- if (type != SourceFile::SOURCE_CPP && type != SourceFile::SOURCE_H &&
-- type != SourceFile::SOURCE_C && type != SourceFile::SOURCE_M &&
-- type != SourceFile::SOURCE_MM && type != SourceFile::SOURCE_RC)
-+ SourceFileType type = GetSourceFileType(file.first);
-+ if (type != SOURCE_CPP && type != SOURCE_H && type != SOURCE_C &&
-+ type != SOURCE_M && type != SOURCE_MM && type != SOURCE_RC)
- continue;
-
- if (!check_generated_) {
-diff --git b/tools/gn/ninja_binary_target_writer.cc a/tools/gn/ninja_binary_target_writer.cc
-index bf3ee355..aca3a247 100644
---- b/tools/gn/tools/gn/ninja_binary_target_writer.cc
-+++ a/tools/gn/tools/gn/ninja_binary_target_writer.cc
-@@ -23,23 +23,22 @@
- #include "tools/gn/ninja_utils.h"
- #include "tools/gn/scheduler.h"
- #include "tools/gn/settings.h"
-+#include "tools/gn/source_file_type.h"
- #include "tools/gn/string_utils.h"
- #include "tools/gn/substitution_writer.h"
- #include "tools/gn/target.h"
-
- bool NinjaBinaryTargetWriter::SourceFileTypeSet::CSourceUsed() {
-- return Get(SourceFile::SOURCE_CPP) || Get(SourceFile::SOURCE_H) ||
-- Get(SourceFile::SOURCE_C) || Get(SourceFile::SOURCE_M) ||
-- Get(SourceFile::SOURCE_MM) || Get(SourceFile::SOURCE_RC) ||
-- Get(SourceFile::SOURCE_S);
-+ return Get(SOURCE_CPP) || Get(SOURCE_H) || Get(SOURCE_C) || Get(SOURCE_M) ||
-+ Get(SOURCE_MM) || Get(SOURCE_RC) || Get(SOURCE_S);
- }
-
- bool NinjaBinaryTargetWriter::SourceFileTypeSet::RustSourceUsed() {
-- return Get(SourceFile::SOURCE_RS);
-+ return Get(SOURCE_RS);
- }
-
- bool NinjaBinaryTargetWriter::SourceFileTypeSet::GoSourceUsed() {
-- return Get(SourceFile::SOURCE_GO);
-+ return Get(SOURCE_GO);
- }
-
- NinjaBinaryTargetWriter::NinjaBinaryTargetWriter(const Target* target,
-@@ -50,6 +49,10 @@ NinjaBinaryTargetWriter::NinjaBinaryTargetWriter(const Target* target,
- NinjaBinaryTargetWriter::~NinjaBinaryTargetWriter() = default;
-
- void NinjaBinaryTargetWriter::Run() {
-+ SourceFileTypeSet used_types;
-+ for (const auto& source : target_->sources())
-+ used_types.Set(GetSourceFileType(source));
-+
- NinjaCBinaryTargetWriter writer(target_, out_);
- writer.Run();
- }
-diff --git b/tools/gn/ninja_binary_target_writer.h a/tools/gn/ninja_binary_target_writer.h
-index 24d7ef19..1db9d81f 100644
---- b/tools/gn/tools/gn/ninja_binary_target_writer.h
-+++ a/tools/gn/tools/gn/ninja_binary_target_writer.h
-@@ -23,12 +23,11 @@ class NinjaBinaryTargetWriter : public NinjaTargetWriter {
- class SourceFileTypeSet {
- public:
- SourceFileTypeSet() {
-- memset(flags_, 0,
-- sizeof(bool) * static_cast<int>(SourceFile::SOURCE_NUMTYPES));
-+ memset(flags_, 0, sizeof(bool) * static_cast<int>(SOURCE_NUMTYPES));
- }
-
-- void Set(SourceFile::Type type) { flags_[static_cast<int>(type)] = true; }
-- bool Get(SourceFile::Type type) const {
-+ void Set(SourceFileType type) { flags_[static_cast<int>(type)] = true; }
-+ bool Get(SourceFileType type) const {
- return flags_[static_cast<int>(type)];
- }
-
-@@ -37,7 +36,7 @@ class NinjaBinaryTargetWriter : public NinjaTargetWriter {
- bool GoSourceUsed();
-
- private:
-- bool flags_[static_cast<int>(SourceFile::SOURCE_NUMTYPES)];
-+ bool flags_[static_cast<int>(SOURCE_NUMTYPES)];
- };
-
- NinjaBinaryTargetWriter(const Target* target, std::ostream& out);
-diff --git b/tools/gn/ninja_c_binary_target_writer.cc a/tools/gn/ninja_c_binary_target_writer.cc
-index 4e8217b5..f6ffd150 100644
---- b/tools/gn/tools/gn/ninja_c_binary_target_writer.cc
-+++ a/tools/gn/tools/gn/ninja_c_binary_target_writer.cc
-@@ -24,6 +24,7 @@
- #include "tools/gn/ninja_utils.h"
- #include "tools/gn/scheduler.h"
- #include "tools/gn/settings.h"
-+#include "tools/gn/source_file_type.h"
- #include "tools/gn/string_utils.h"
- #include "tools/gn/substitution_writer.h"
- #include "tools/gn/target.h"
-@@ -66,27 +67,27 @@ void AddSourceSetObjectFiles(const Target* source_set,
- if (source_set->GetOutputFilesForSource(source, &tool_name, &tool_outputs))
- obj_files->push_back(tool_outputs[0]);
-
-- used_types.Set(source.type());
-+ used_types.Set(GetSourceFileType(source));
- }
-
- // Add MSVC precompiled header object files. GCC .gch files are not object
- // files so they are omitted.
- if (source_set->config_values().has_precompiled_headers()) {
-- if (used_types.Get(SourceFile::SOURCE_C)) {
-+ if (used_types.Get(SOURCE_C)) {
- const CTool* tool = source_set->toolchain()->GetToolAsC(CTool::kCToolCc);
- if (tool && tool->precompiled_header_type() == CTool::PCH_MSVC) {
- GetPCHOutputFiles(source_set, CTool::kCToolCc, &tool_outputs);
- obj_files->Append(tool_outputs.begin(), tool_outputs.end());
- }
- }
-- if (used_types.Get(SourceFile::SOURCE_CPP)) {
-+ if (used_types.Get(SOURCE_CPP)) {
- const CTool* tool = source_set->toolchain()->GetToolAsC(CTool::kCToolCxx);
- if (tool && tool->precompiled_header_type() == CTool::PCH_MSVC) {
- GetPCHOutputFiles(source_set, CTool::kCToolCxx, &tool_outputs);
- obj_files->Append(tool_outputs.begin(), tool_outputs.end());
- }
- }
-- if (used_types.Get(SourceFile::SOURCE_M)) {
-+ if (used_types.Get(SOURCE_M)) {
- const CTool* tool =
- source_set->toolchain()->GetToolAsC(CTool::kCToolObjC);
- if (tool && tool->precompiled_header_type() == CTool::PCH_MSVC) {
-@@ -94,7 +95,7 @@ void AddSourceSetObjectFiles(const Target* source_set,
- obj_files->Append(tool_outputs.begin(), tool_outputs.end());
- }
- }
-- if (used_types.Get(SourceFile::SOURCE_MM)) {
-+ if (used_types.Get(SOURCE_MM)) {
- const CTool* tool =
- source_set->toolchain()->GetToolAsC(CTool::kCToolObjCxx);
- if (tool && tool->precompiled_header_type() == CTool::PCH_MSVC) {
-@@ -118,7 +119,7 @@ void NinjaCBinaryTargetWriter::Run() {
- // Figure out what source types are needed.
- SourceFileTypeSet used_types;
- for (const auto& source : target_->sources())
-- used_types.Set(source.type());
-+ used_types.Set(GetSourceFileType(source));
-
- WriteCompilerVars(used_types);
-
-@@ -234,34 +235,31 @@ void NinjaCBinaryTargetWriter::WriteCompilerVars(
- target_->config_values().has_precompiled_headers();
-
- EscapeOptions opts = GetFlagOptions();
-- if (used_types.Get(SourceFile::SOURCE_S) ||
-- used_types.Get(SourceFile::SOURCE_ASM)) {
-+ if (used_types.Get(SOURCE_S) || used_types.Get(SOURCE_ASM)) {
- WriteOneFlag(target_, &CSubstitutionAsmFlags, false, Tool::kToolNone,
- &ConfigValues::asmflags, opts, path_output_, out_);
- }
-- if (used_types.Get(SourceFile::SOURCE_C) ||
-- used_types.Get(SourceFile::SOURCE_CPP) ||
-- used_types.Get(SourceFile::SOURCE_M) ||
-- used_types.Get(SourceFile::SOURCE_MM)) {
-+ if (used_types.Get(SOURCE_C) || used_types.Get(SOURCE_CPP) ||
-+ used_types.Get(SOURCE_M) || used_types.Get(SOURCE_MM)) {
- WriteOneFlag(target_, &CSubstitutionCFlags, false, Tool::kToolNone,
- &ConfigValues::cflags, opts, path_output_, out_);
- }
-- if (used_types.Get(SourceFile::SOURCE_C)) {
-+ if (used_types.Get(SOURCE_C)) {
- WriteOneFlag(target_, &CSubstitutionCFlagsC, has_precompiled_headers,
- CTool::kCToolCc, &ConfigValues::cflags_c, opts, path_output_,
- out_);
- }
-- if (used_types.Get(SourceFile::SOURCE_CPP)) {
-+ if (used_types.Get(SOURCE_CPP)) {
- WriteOneFlag(target_, &CSubstitutionCFlagsCc, has_precompiled_headers,
- CTool::kCToolCxx, &ConfigValues::cflags_cc, opts, path_output_,
- out_);
- }
-- if (used_types.Get(SourceFile::SOURCE_M)) {
-+ if (used_types.Get(SOURCE_M)) {
- WriteOneFlag(target_, &CSubstitutionCFlagsObjC, has_precompiled_headers,
- CTool::kCToolObjC, &ConfigValues::cflags_objc, opts,
- path_output_, out_);
- }
-- if (used_types.Get(SourceFile::SOURCE_MM)) {
-+ if (used_types.Get(SOURCE_MM)) {
- WriteOneFlag(target_, &CSubstitutionCFlagsObjCc, has_precompiled_headers,
- CTool::kCToolObjCxx, &ConfigValues::cflags_objcc, opts,
- path_output_, out_);
-@@ -321,14 +319,14 @@ void NinjaCBinaryTargetWriter::WritePCHCommands(
-
- const CTool* tool_c = target_->toolchain()->GetToolAsC(CTool::kCToolCc);
- if (tool_c && tool_c->precompiled_header_type() != CTool::PCH_NONE &&
-- used_types.Get(SourceFile::SOURCE_C)) {
-+ used_types.Get(SOURCE_C)) {
- WritePCHCommand(&CSubstitutionCFlagsC, CTool::kCToolCc,
- tool_c->precompiled_header_type(), input_dep,
- order_only_deps, object_files, other_files);
- }
- const CTool* tool_cxx = target_->toolchain()->GetToolAsC(CTool::kCToolCxx);
- if (tool_cxx && tool_cxx->precompiled_header_type() != CTool::PCH_NONE &&
-- used_types.Get(SourceFile::SOURCE_CPP)) {
-+ used_types.Get(SOURCE_CPP)) {
- WritePCHCommand(&CSubstitutionCFlagsCc, CTool::kCToolCxx,
- tool_cxx->precompiled_header_type(), input_dep,
- order_only_deps, object_files, other_files);
-@@ -336,7 +334,7 @@ void NinjaCBinaryTargetWriter::WritePCHCommands(
-
- const CTool* tool_objc = target_->toolchain()->GetToolAsC(CTool::kCToolObjC);
- if (tool_objc && tool_objc->precompiled_header_type() == CTool::PCH_GCC &&
-- used_types.Get(SourceFile::SOURCE_M)) {
-+ used_types.Get(SOURCE_M)) {
- WritePCHCommand(&CSubstitutionCFlagsObjC, CTool::kCToolObjC,
- tool_objc->precompiled_header_type(), input_dep,
- order_only_deps, object_files, other_files);
-@@ -345,7 +343,7 @@ void NinjaCBinaryTargetWriter::WritePCHCommands(
- const CTool* tool_objcxx =
- target_->toolchain()->GetToolAsC(CTool::kCToolObjCxx);
- if (tool_objcxx && tool_objcxx->precompiled_header_type() == CTool::PCH_GCC &&
-- used_types.Get(SourceFile::SOURCE_MM)) {
-+ used_types.Get(SOURCE_MM)) {
- WritePCHCommand(&CSubstitutionCFlagsObjCc, CTool::kCToolObjCxx,
- tool_objcxx->precompiled_header_type(), input_dep,
- order_only_deps, object_files, other_files);
-@@ -478,7 +476,7 @@ void NinjaCBinaryTargetWriter::WriteSources(
- deps.resize(0);
- const char* tool_name = Tool::kToolNone;
- if (!target_->GetOutputFilesForSource(source, &tool_name, &tool_outputs)) {
-- if (source.type() == SourceFile::SOURCE_DEF)
-+ if (GetSourceFileType(source) == SOURCE_DEF)
- other_files->push_back(source);
- continue; // No output for this source.
- }
-@@ -599,7 +597,7 @@ void NinjaCBinaryTargetWriter::WriteLinkerStuff(
- const SourceFile* optional_def_file = nullptr;
- if (!other_files.empty()) {
- for (const SourceFile& src_file : other_files) {
-- if (src_file.type() == SourceFile::SOURCE_DEF) {
-+ if (GetSourceFileType(src_file) == SOURCE_DEF) {
- optional_def_file = &src_file;
- implicit_deps.push_back(
- OutputFile(settings_->build_settings(), src_file));
-diff --git b/tools/gn/source_file.cc a/tools/gn/source_file.cc
-index 7c860d43..79c6eb03 100644
---- b/tools/gn/tools/gn/source_file.cc
-+++ a/tools/gn/tools/gn/source_file.cc
-@@ -21,48 +21,18 @@ void AssertValueSourceFileString(const std::string& s) {
- DCHECK(!EndsWithSlash(s)) << s;
- }
-
--SourceFile::Type GetSourceFileType(const std::string& file) {
-- base::StringPiece extension = FindExtension(&file);
-- if (extension == "cc" || extension == "cpp" || extension == "cxx")
-- return SourceFile::SOURCE_CPP;
-- if (extension == "h" || extension == "hpp" || extension == "hxx" ||
-- extension == "hh" || extension == "inc")
-- return SourceFile::SOURCE_H;
-- if (extension == "c")
-- return SourceFile::SOURCE_C;
-- if (extension == "m")
-- return SourceFile::SOURCE_M;
-- if (extension == "mm")
-- return SourceFile::SOURCE_MM;
-- if (extension == "rc")
-- return SourceFile::SOURCE_RC;
-- if (extension == "S" || extension == "s" || extension == "asm")
-- return SourceFile::SOURCE_S;
-- if (extension == "o" || extension == "obj")
-- return SourceFile::SOURCE_O;
-- if (extension == "def")
-- return SourceFile::SOURCE_DEF;
-- if (extension == "rs")
-- return SourceFile::SOURCE_RS;
-- if (extension == "go")
-- return SourceFile::SOURCE_GO;
--
-- return SourceFile::SOURCE_UNKNOWN;
--}
--
- } // namespace
-
--SourceFile::SourceFile() : type_(SOURCE_UNKNOWN) {}
-+SourceFile::SourceFile() = default;
-
- SourceFile::SourceFile(const base::StringPiece& p)
-- : value_(p.data(), p.size()), type_(GetSourceFileType(value_)) {
-+ : value_(p.data(), p.size()) {
- DCHECK(!value_.empty());
- AssertValueSourceFileString(value_);
- NormalizePath(&value_);
- }
-
--SourceFile::SourceFile(SwapIn, std::string* value)
-- : type_(GetSourceFileType(*value)) {
-+SourceFile::SourceFile(SwapIn, std::string* value) {
- value_.swap(*value);
- DCHECK(!value_.empty());
- AssertValueSourceFileString(value_);
-diff --git b/tools/gn/source_file.h a/tools/gn/source_file.h
-index bcf5f422..f0339875 100644
---- b/tools/gn/tools/gn/source_file.h
-+++ a/tools/gn/tools/gn/source_file.h
-@@ -20,28 +20,6 @@ class SourceDir;
- // ends in one.
- class SourceFile {
- public:
-- // This should be sequential integers starting from 0 so they can be used as
-- // array indices.
-- enum Type {
-- SOURCE_UNKNOWN = 0,
-- SOURCE_ASM,
-- SOURCE_C,
-- SOURCE_CPP,
-- SOURCE_H,
-- SOURCE_M,
-- SOURCE_MM,
-- SOURCE_S,
-- SOURCE_RC,
-- SOURCE_O, // Object files can be inputs, too. Also counts .obj.
-- SOURCE_DEF,
--
-- SOURCE_RS,
-- SOURCE_GO,
--
-- // Must be last.
-- SOURCE_NUMTYPES,
-- };
--
- enum SwapIn { SWAP_IN };
-
- SourceFile();
-@@ -58,7 +36,6 @@ class SourceFile {
-
- bool is_null() const { return value_.empty(); }
- const std::string& value() const { return value_; }
-- Type type() const { return type_; }
-
- // Returns everything after the last slash.
- std::string GetName() const;
-@@ -103,7 +80,6 @@ class SourceFile {
- friend class SourceDir;
-
- std::string value_;
-- Type type_;
-
- // Copy & assign supported.
- };
-diff --git b/tools/gn/source_file_type.cc a/tools/gn/source_file_type.cc
-new file mode 100644
-index 00000000..fde1ccaf
---- b/tools/gn/tools/gn/source_file_type.cc
-+++ a/tools/gn/tools/gn/source_file_type.cc
-@@ -0,0 +1,37 @@
-+// Copyright 2014 The Chromium Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style license that can be
-+// found in the LICENSE file.
-+
-+#include "tools/gn/source_file_type.h"
-+
-+#include "tools/gn/filesystem_utils.h"
-+#include "tools/gn/source_file.h"
-+
-+SourceFileType GetSourceFileType(const SourceFile& file) {
-+ base::StringPiece extension = FindExtension(&file.value());
-+ if (extension == "cc" || extension == "cpp" || extension == "cxx")
-+ return SOURCE_CPP;
-+ if (extension == "h" || extension == "hpp" || extension == "hxx" ||
-+ extension == "hh")
-+ return SOURCE_H;
-+ if (extension == "c")
-+ return SOURCE_C;
-+ if (extension == "m")
-+ return SOURCE_M;
-+ if (extension == "mm")
-+ return SOURCE_MM;
-+ if (extension == "rc")
-+ return SOURCE_RC;
-+ if (extension == "S" || extension == "s" || extension == "asm")
-+ return SOURCE_S;
-+ if (extension == "o" || extension == "obj")
-+ return SOURCE_O;
-+ if (extension == "def")
-+ return SOURCE_DEF;
-+ if (extension == "rs")
-+ return SOURCE_RS;
-+ if (extension == "go")
-+ return SOURCE_GO;
-+
-+ return SOURCE_UNKNOWN;
-+}
-diff --git b/tools/gn/source_file_type.h a/tools/gn/source_file_type.h
-new file mode 100644
-index 00000000..d4054978
---- b/tools/gn/tools/gn/source_file_type.h
-+++ a/tools/gn/tools/gn/source_file_type.h
-@@ -0,0 +1,34 @@
-+// Copyright 2014 The Chromium Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style license that can be
-+// found in the LICENSE file.
-+
-+#ifndef TOOLS_GN_SOURCE_FILE_TYPE_H_
-+#define TOOLS_GN_SOURCE_FILE_TYPE_H_
-+
-+class SourceFile;
-+
-+// This should be sequential integers starting from 0 so they can be used as
-+// array indices.
-+enum SourceFileType {
-+ SOURCE_UNKNOWN = 0,
-+ SOURCE_ASM,
-+ SOURCE_C,
-+ SOURCE_CPP,
-+ SOURCE_H,
-+ SOURCE_M,
-+ SOURCE_MM,
-+ SOURCE_S,
-+ SOURCE_RC,
-+ SOURCE_O, // Object files can be inputs, too. Also counts .obj.
-+ SOURCE_DEF,
-+
-+ SOURCE_RS,
-+ SOURCE_GO,
-+
-+ // Must be last.
-+ SOURCE_NUMTYPES,
-+};
-+
-+SourceFileType GetSourceFileType(const SourceFile& file);
-+
-+#endif // TOOLS_GN_SOURCE_FILE_TYPE_H_
-diff --git b/tools/gn/target.cc a/tools/gn/target.cc
-index 1afd22be..6272b44a 100644
---- b/tools/gn/tools/gn/target.cc
-+++ a/tools/gn/tools/gn/target.cc
-@@ -16,6 +16,7 @@
- #include "tools/gn/filesystem_utils.h"
- #include "tools/gn/functions.h"
- #include "tools/gn/scheduler.h"
-+#include "tools/gn/source_file_type.h"
- #include "tools/gn/substitution_writer.h"
- #include "tools/gn/tool.h"
- #include "tools/gn/toolchain.h"
-@@ -486,10 +487,10 @@ bool Target::GetOutputFilesForSource(const SourceFile& source,
- outputs->clear();
- *computed_tool_type = Tool::kToolNone;
-
-- SourceFile::Type file_type = source.type();
-- if (file_type == SourceFile::SOURCE_UNKNOWN)
-+ SourceFileType file_type = GetSourceFileType(source);
-+ if (file_type == SOURCE_UNKNOWN)
- return false;
-- if (file_type == SourceFile::SOURCE_O) {
-+ if (file_type == SOURCE_O) {
- // Object files just get passed to the output and not compiled.
- outputs->push_back(OutputFile(settings()->build_settings(), source));
- return true;
-diff --git b/tools/gn/tool.cc a/tools/gn/tool.cc
-index b040ac20..7a06b032 100644
---- b/tools/gn/tools/gn/tool.cc
-+++ a/tools/gn/tools/gn/tool.cc
-@@ -261,27 +261,27 @@ std::unique_ptr<Tool> Tool::CreateTool(const std::string& name) {
- }
-
- // static
--const char* Tool::GetToolTypeForSourceType(SourceFile::Type type) {
-+const char* Tool::GetToolTypeForSourceType(SourceFileType type) {
- switch (type) {
-- case SourceFile::SOURCE_C:
-+ case SOURCE_C:
- return CTool::kCToolCc;
-- case SourceFile::SOURCE_CPP:
-+ case SOURCE_CPP:
- return CTool::kCToolCxx;
-- case SourceFile::SOURCE_M:
-+ case SOURCE_M:
- return CTool::kCToolObjC;
-- case SourceFile::SOURCE_MM:
-+ case SOURCE_MM:
- return CTool::kCToolObjCxx;
-- case SourceFile::SOURCE_ASM:
-- case SourceFile::SOURCE_S:
-+ case SOURCE_ASM:
-+ case SOURCE_S:
- return CTool::kCToolAsm;
-- case SourceFile::SOURCE_RC:
-+ case SOURCE_RC:
- return CTool::kCToolRc;
-- case SourceFile::SOURCE_UNKNOWN:
-- case SourceFile::SOURCE_H:
-- case SourceFile::SOURCE_O:
-- case SourceFile::SOURCE_DEF:
-- case SourceFile::SOURCE_GO:
-- case SourceFile::SOURCE_RS:
-+ case SOURCE_UNKNOWN:
-+ case SOURCE_H:
-+ case SOURCE_O:
-+ case SOURCE_DEF:
-+ case SOURCE_GO:
-+ case SOURCE_RS:
- return kToolNone;
- default:
- NOTREACHED();
-diff --git b/tools/gn/tool.h a/tools/gn/tool.h
-index a6f177d6..ec2eb94c 100644
---- b/tools/gn/tools/gn/tool.h
-+++ a/tools/gn/tools/gn/tool.h
-@@ -12,7 +12,7 @@
- #include "tools/gn/label.h"
- #include "tools/gn/label_ptr.h"
- #include "tools/gn/scope.h"
--#include "tools/gn/source_file.h"
-+#include "tools/gn/source_file_type.h"
- #include "tools/gn/substitution_list.h"
- #include "tools/gn/substitution_pattern.h"
-
-@@ -171,7 +171,7 @@ class Tool {
- Toolchain* toolchain,
- Err* err);
-
-- static const char* GetToolTypeForSourceType(SourceFile::Type type);
-+ static const char* GetToolTypeForSourceType(SourceFileType type);
- static const char* GetToolTypeForTargetFinalOutput(const Target* target);
-
- protected:
-diff --git b/tools/gn/toolchain.cc a/tools/gn/toolchain.cc
-index 0d6cbaf4..b718052c 100644
---- b/tools/gn/tools/gn/toolchain.cc
-+++ a/tools/gn/tools/gn/toolchain.cc
-@@ -88,16 +88,16 @@ void Toolchain::ToolchainSetupComplete() {
- setup_complete_ = true;
- }
-
--const Tool* Toolchain::GetToolForSourceType(SourceFile::Type type) const {
-+const Tool* Toolchain::GetToolForSourceType(SourceFileType type) const {
- return GetTool(Tool::GetToolTypeForSourceType(type));
- }
-
--const CTool* Toolchain::GetToolForSourceTypeAsC(SourceFile::Type type) const {
-+const CTool* Toolchain::GetToolForSourceTypeAsC(SourceFileType type) const {
- return GetToolAsC(Tool::GetToolTypeForSourceType(type));
- }
-
- const GeneralTool* Toolchain::GetToolForSourceTypeAsGeneral(
-- SourceFile::Type type) const {
-+ SourceFileType type) const {
- return GetToolAsGeneral(Tool::GetToolTypeForSourceType(type));
- }
-
-diff --git b/tools/gn/toolchain.h a/tools/gn/toolchain.h
-index cc93de54..e36475dd 100644
---- b/tools/gn/tools/gn/toolchain.h
-+++ a/tools/gn/tools/gn/toolchain.h
-@@ -12,6 +12,7 @@
- #include "tools/gn/item.h"
- #include "tools/gn/label_ptr.h"
- #include "tools/gn/scope.h"
-+#include "tools/gn/source_file_type.h"
- #include "tools/gn/substitution_type.h"
- #include "tools/gn/tool.h"
- #include "tools/gn/value.h"
-@@ -87,9 +88,9 @@ class Toolchain : public Item {
- }
-
- // Returns the tool for compiling the given source file type.
-- const Tool* GetToolForSourceType(SourceFile::Type type) const;
-- const CTool* GetToolForSourceTypeAsC(SourceFile::Type type) const;
-- const GeneralTool* GetToolForSourceTypeAsGeneral(SourceFile::Type type) const;
-+ const Tool* GetToolForSourceType(SourceFileType type) const;
-+ const CTool* GetToolForSourceTypeAsC(SourceFileType type) const;
-+ const GeneralTool* GetToolForSourceTypeAsGeneral(SourceFileType type) const;
-
- // Returns the tool that produces the final output for the given target type.
- // This isn't necessarily the tool you would expect. For copy target, this
-diff --git b/tools/gn/visual_studio_writer.cc a/tools/gn/visual_studio_writer.cc
-index 9dbd4b35..f804b444 100644
---- b/tools/gn/tools/gn/visual_studio_writer.cc
-+++ a/tools/gn/tools/gn/visual_studio_writer.cc
-@@ -24,6 +24,7 @@
- #include "tools/gn/label_pattern.h"
- #include "tools/gn/parse_tree.h"
- #include "tools/gn/path_output.h"
-+#include "tools/gn/source_file_type.h"
- #include "tools/gn/standard_out.h"
- #include "tools/gn/target.h"
- #include "tools/gn/variables.h"
---
-2.21.0
-
diff --git a/chromium/chromium/chromium.spec b/chromium/chromium/chromium.spec
index fa9897f..c4448ab 100644
--- a/chromium/chromium/chromium.spec
+++ b/chromium/chromium/chromium.spec
@@ -47,7 +47,7 @@
%bcond_with fedora_compilation_flags
Name: chromium
-Version: 74.0.3729.169
+Version: 75.0.3770.80
Release: 100%{?dist}
Summary: A WebKit (Blink) powered web browser
@@ -94,21 +94,14 @@ Patch50: chromium-nacl-llvm-ar.patch
Patch60: chromium-python2.patch
# Pull upstream patches
-Patch70: chromium-gcc8-r641329.patch
-Patch71: chromium-gcc8-r641404.patch
-Patch72: chromium-gcc8-r642680.patch
-Patch73: chromium-gcc8-r647271.patch
-Patch74: chromium-gcc8-r647382.patch
-Patch75: chromium-gcc8-cl1503254.patch
+Patch70: chromium-angle-gcc9.patch
+Patch71: chromium-gcc9-r654570.patch
+Patch72: chromium-gcc9-r666714.patch
# Pull patches from Fedora
# https://src.fedoraproject.org/rpms/chromium/c/9071ee2d2f996b84
Patch80: chromium-webrtc-cstring.patch
-# Revert upstream patches which cause errors
-# https://crbug.com/gn/77
-Patch90: chromium-gn-revert-bug-77.patch
-
# I don't have time to test whether it work on other architectures
ExclusiveArch: x86_64
@@ -251,6 +244,7 @@ find -type f -exec \
third_party/angle/third_party/vulkan-tools \
third_party/angle/third_party/vulkan-validation-layers \
third_party/apple_apsl \
+ third_party/axe-core \
third_party/boringssl \
third_party/boringssl/src/third_party/fiat \
third_party/blink \
@@ -272,15 +266,16 @@ find -type f -exec \
third_party/cld_3 \
third_party/closure_compiler \
third_party/crashpad \
+ third_party/crashpad/crashpad/third_party/lss \
third_party/crashpad/crashpad/third_party/zlib \
third_party/crc32c \
third_party/cros_system_api \
third_party/dav1d \
+ third_party/dawn \
third_party/devscripts \
third_party/dom_distiller_js \
third_party/emoji-segmenter \
third_party/ffmpeg \
- third_party/fips181 \
third_party/flatbuffers \
third_party/flot \
third_party/freetype \
@@ -347,6 +342,7 @@ find -type f -exec \
third_party/pdfium/third_party/libtiff \
third_party/pdfium/third_party/skia_shared \
third_party/perfetto \
+ third_party/pffft \
%if !%{with system_ply}
third_party/ply \
%endif
@@ -644,6 +640,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%changelog
+* Fri Jun 07 2019 - Ting-Wei Lan <lantw44@gmail.com> - 75.0.3770.80-100
+- Update to 75.0.3770.80
+
* Wed May 22 2019 - Ting-Wei Lan <lantw44@gmail.com> - 74.0.3729.169-100
- Update to 74.0.3729.169