Use c++20 in GN build Change-Id: I45d6b140f68e7e0bdd885420952e46e2576e960d Reviewed-on: https://gn-review.googlesource.com/c/gn/+/16200 Reviewed-by: David Turner <digit@google.com> Commit-Queue: Takuto Ikuta <tikuta@google.com>
diff --git a/build/gen.py b/build/gen.py index 232e536..07b699b 100755 --- a/build/gen.py +++ b/build/gen.py
@@ -466,7 +466,7 @@ '-Wextra-semi', '-Wundef', - '-std=c++17' + '-std=c++20' ]) # flags not supported by gcc/g++. @@ -482,7 +482,7 @@ ldflags.append('-static-libstdc++') if platform.is_mingw() or platform.is_msys(): - cflags.remove('-std=c++17') + cflags.remove('-std=c++20') cflags.extend([ '-Wno-deprecated-copy', '-Wno-implicit-fallthrough', @@ -491,7 +491,7 @@ '-Wno-format', # Use of %llx, which is supported by _UCRT, false positive '-Wno-strict-aliasing', # Dereferencing punned pointer '-Wno-cast-function-type', # Casting FARPROC to RegDeleteKeyExPtr - '-std=gnu++17', + '-std=gnu++20', ]) else: # This is needed by libc++. @@ -561,7 +561,7 @@ '/wd4505', '/wd4838', '/wd4996', - '/std:c++17', + '/std:c++20', '/GR-', '/D_HAS_EXCEPTIONS=0', ])
diff --git a/src/base/files/file_path.cc b/src/base/files/file_path.cc index 1959133..3b53abc 100644 --- a/src/base/files/file_path.cc +++ b/src/base/files/file_path.cc
@@ -8,6 +8,7 @@ #include <algorithm> #include <iterator> +#include <string> #include <string_view> #include "base/logging.h" @@ -623,8 +624,9 @@ FilePath FilePath::NormalizePathSeparatorsTo(CharType separator) const { #if defined(FILE_PATH_USES_WIN_SEPARATORS) - DCHECK_NE(kSeparators + kSeparatorsLength, - std::find(kSeparators, kSeparators + kSeparatorsLength, separator)); + DCHECK_NE(static_cast<const void*>(kSeparators + kSeparatorsLength), + static_cast<const void*>(std::find( + kSeparators, kSeparators + kSeparatorsLength, separator))); StringType copy = path_; for (size_t i = 0; i < kSeparatorsLength; ++i) { std::replace(copy.begin(), copy.end(), kSeparators[i], separator);
diff --git a/src/base/strings/string_util.cc b/src/base/strings/string_util.cc index 5af7715..e1b494d 100644 --- a/src/base/strings/string_util.cc +++ b/src/base/strings/string_util.cc
@@ -19,6 +19,7 @@ #include <algorithm> #include <iterator> #include <limits> +#include <string> #include <vector> #include "base/logging.h" @@ -963,7 +964,7 @@ --i; } else { if (*i < '1' || *i > '9') { - DLOG(ERROR) << "Invalid placeholder: $" << *i; + DLOG(ERROR) << "Invalid placeholder: $" << std::to_string(*i); continue; } uintptr_t index = *i - '1';
diff --git a/src/base/value_iterators.cc b/src/base/value_iterators.cc index ba9c730..4765f73 100644 --- a/src/base/value_iterators.cc +++ b/src/base/value_iterators.cc
@@ -4,6 +4,8 @@ #include "base/value_iterators.h" +#include "base/values.h" + namespace base { namespace detail {
diff --git a/src/gn/substitution_type.h b/src/gn/substitution_type.h index d359a30..2d0c3bc 100644 --- a/src/gn/substitution_type.h +++ b/src/gn/substitution_type.h
@@ -15,8 +15,10 @@ // Each pair here represents the string representation of the substitution in GN // and in Ninja. struct Substitution { - const char* name; - const char* ninja_name; + const char* name = nullptr; + const char* ninja_name = nullptr; + Substitution(const char* name, const char* ninja_name) + : name(name), ninja_name(ninja_name) {} Substitution(const Substitution&) = delete; Substitution& operator=(const Substitution&) = delete; };