about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2018-02-01T04·34-0800
committerjueminyang <jueminyang@google.com>2018-02-01T15·36-0500
commit0ec11bad6fc18822e851b25344f027491cc85746 (patch)
tree7122b7b3409bd457bc1edb1f1b61cd3a892feeb5
parent8a401394b8f71da745b3ad6e7c783d7f13ef5428 (diff)
Changes imported from Abseil "staging" branch:
  - 06abebb2bdb201c572da209fc7f781d6bd774d6b Documentation fixes for `absl::optional`. by Abseil Team <absl-team@google.com>
  - 42adc4c4daade2e070dc337e94d8851a1fd4bead  Rolling back the previous change because `__has_warning`... by Xiaoyi Zhang <zhangxy@google.com>
  - 02a42cbaa97d82ee7942bc498538359185d75087 Remove literal UTF8 strings in abseil code to avoid file ... by Jon Cohen <cohenjon@google.com>

GitOrigin-RevId: 06abebb2bdb201c572da209fc7f781d6bd774d6b
Change-Id: I4f4659c2e7ca6fc585b6c089bcf20ca61aced75d
-rw-r--r--ABSEIL_ISSUE_TEMPLATE.md2
-rw-r--r--absl/base/internal/inline_variable.h30
-rw-r--r--absl/base/internal/unaligned_access.h2
-rw-r--r--absl/strings/str_split_test.cc15
-rw-r--r--absl/strings/string_view_test.cc7
-rw-r--r--absl/types/any.h4
-rw-r--r--absl/types/optional.h6
7 files changed, 27 insertions, 39 deletions
diff --git a/ABSEIL_ISSUE_TEMPLATE.md b/ABSEIL_ISSUE_TEMPLATE.md
index 9dfd4b8f5c..ed5461f166 100644
--- a/ABSEIL_ISSUE_TEMPLATE.md
+++ b/ABSEIL_ISSUE_TEMPLATE.md
@@ -18,5 +18,5 @@ possible in this section.]
 
 [Please clearly describe the API change(s) being proposed. If multiple changes,
 please keep them clearly distinguished. When possible, **use example code
-snippets to illustrate before–after API usages**. List pros-n-cons. Highlight
+snippets to illustrate before-after API usages**. List pros-n-cons. Highlight
 the main questions that you want to be answered. Given the Abseil project compatibility requirements, describe why the API change is safe.]
diff --git a/absl/base/internal/inline_variable.h b/absl/base/internal/inline_variable.h
index a65fe89354..f7bb8c5652 100644
--- a/absl/base/internal/inline_variable.h
+++ b/absl/base/internal/inline_variable.h
@@ -53,24 +53,7 @@
 //   it will likely be a reference type).
 ////////////////////////////////////////////////////////////////////////////////
 
-// ABSL_INTERNAL_HAS_WARNING()
-//
-// If the compiler supports the `__has_warning` extension for detecting
-// warnings, then this macro is defined to be `__has_warning`.
-//
-// If the compiler does not support `__has_warning`, invocations expand to 0.
-//
-// For clang's documentation of `__has_warning`, see
-// https://clang.llvm.org/docs/LanguageExtensions.html#has-warning
-#if defined(__has_warning)
-#define ABSL_INTERNAL_HAS_WARNING __has_warning
-#else  // Otherwise, be optimistic and assume the warning is not enabled.
-#define ABSL_INTERNAL_HAS_WARNING(warning) 0
-#endif  // defined(__has_warning)
-
-// If the compiler supports inline variables and does not warn when used...
-#if defined(__cpp_inline_variables) && \
-    !ABSL_INTERNAL_HAS_WARNING("-Wc++98-c++11-c++14-compat")
+#ifdef __cpp_inline_variables
 
 // Clang's -Wmissing-variable-declarations option erroneously warned that
 // inline constexpr objects need to be pre-declared. This has now been fixed,
@@ -83,21 +66,19 @@
 //   identity_t is used here so that the const and name are in the
 //   appropriate place for pointer types, reference types, function pointer
 //   types, etc..
-#if defined(__clang__) && \
-    ABSL_INTERNAL_HAS_WARNING("-Wmissing-variable-declarations")
+#if defined(__clang__)
 #define ABSL_INTERNAL_EXTERN_DECL(type, name) \
   extern const ::absl::internal::identity_t<type> name;
 #else  // Otherwise, just define the macro to do nothing.
 #define ABSL_INTERNAL_EXTERN_DECL(type, name)
-#endif  // defined(__clang__) &&
-        // ABSL_INTERNAL_HAS_WARNING("-Wmissing-variable-declarations")
+#endif  // defined(__clang__)
 
 // See above comment at top of file for details.
 #define ABSL_INTERNAL_INLINE_CONSTEXPR(type, name, init) \
   ABSL_INTERNAL_EXTERN_DECL(type, name)                  \
   inline constexpr ::absl::internal::identity_t<type> name = init
 
-#else  // Otherwise, we need to emulate inline variables...
+#else
 
 // See above comment at top of file for details.
 //
@@ -121,7 +102,6 @@
   static_assert(sizeof(void (*)(decltype(name))) != 0,                        \
                 "Silence unused variable warnings.")
 
-#endif  // defined(__cpp_inline_variables) &&
-        // !ABSL_INTERNAL_HAS_WARNING("-Wc++98-c++11-c++14-compat")
+#endif  // __cpp_inline_variables
 
 #endif  // ABSL_BASE_INTERNAL_INLINE_VARIABLE_EMULATION_H_
diff --git a/absl/base/internal/unaligned_access.h b/absl/base/internal/unaligned_access.h
index ea30829b0e..c5724362a4 100644
--- a/absl/base/internal/unaligned_access.h
+++ b/absl/base/internal/unaligned_access.h
@@ -142,7 +142,7 @@ inline void UnalignedStore64(void *p, uint64_t v) {
 // and 32-bit values (not 64-bit); older versions either raise a fatal signal,
 // do an unaligned read and rotate the words around a bit, or do the reads very
 // slowly (trip through kernel mode). There's no simple #define that says just
-// “ARMv7 or higher”, so we have to filter away all ARMv5 and ARMv6
+// "ARMv7 or higher", so we have to filter away all ARMv5 and ARMv6
 // sub-architectures. Newer gcc (>= 4.6) set an __ARM_FEATURE_ALIGNED #define,
 // so in time, maybe we can move on to that.
 //
diff --git a/absl/strings/str_split_test.cc b/absl/strings/str_split_test.cc
index 500f3cbc37..b1db1c5647 100644
--- a/absl/strings/str_split_test.cc
+++ b/absl/strings/str_split_test.cc
@@ -621,23 +621,28 @@ TEST(Split, StringDelimiter) {
 
 TEST(Split, UTF8) {
   // Tests splitting utf8 strings and utf8 delimiters.
+  std::string utf8_string = "\u03BA\u1F79\u03C3\u03BC\u03B5";
   {
     // A utf8 input std::string with an ascii delimiter.
-    std::vector<absl::string_view> v = absl::StrSplit("a,κόσμε", ',');
-    EXPECT_THAT(v, ElementsAre("a", "κόσμε"));
+    std::string to_split = "a," + utf8_string;
+    std::vector<absl::string_view> v = absl::StrSplit(to_split, ',');
+    EXPECT_THAT(v, ElementsAre("a", utf8_string));
   }
 
   {
     // A utf8 input std::string and a utf8 delimiter.
-    std::vector<absl::string_view> v = absl::StrSplit("a,κόσμε,b", ",κόσμε,");
+    std::string to_split = "a," + utf8_string + ",b";
+    std::string unicode_delimiter = "," + utf8_string + ",";
+    std::vector<absl::string_view> v =
+        absl::StrSplit(to_split, unicode_delimiter);
     EXPECT_THAT(v, ElementsAre("a", "b"));
   }
 
   {
     // A utf8 input std::string and ByAnyChar with ascii chars.
     std::vector<absl::string_view> v =
-        absl::StrSplit("Foo hällo th丞re", absl::ByAnyChar(" \t"));
-    EXPECT_THAT(v, ElementsAre("Foo", "hällo", "th丞re"));
+        absl::StrSplit("Foo h\u00E4llo th\u4E1Ere", absl::ByAnyChar(" \t"));
+    EXPECT_THAT(v, ElementsAre("Foo", "h\u00E4llo", "th\u4E1Ere"));
   }
 }
 
diff --git a/absl/strings/string_view_test.cc b/absl/strings/string_view_test.cc
index df307ac7cf..3077d240d1 100644
--- a/absl/strings/string_view_test.cc
+++ b/absl/strings/string_view_test.cc
@@ -684,8 +684,11 @@ TEST(StringViewTest, TruncSubstr) {
 }
 
 TEST(StringViewTest, UTF8) {
-  EXPECT_EQ(strlen("á"), absl::string_view("á á").find_first_of(" "));
-  EXPECT_EQ(strlen("á"), absl::string_view("á á").find_first_of(" \t"));
+  std::string utf8 = "\u00E1";
+  std::string utf8_twice = utf8 + " " + utf8;
+  int utf8_len = strlen(utf8.data());
+  EXPECT_EQ(utf8_len, absl::string_view(utf8_twice).find_first_of(" "));
+  EXPECT_EQ(utf8_len, absl::string_view(utf8_twice).find_first_of(" \t"));
 }
 
 TEST(StringViewTest, FindConformance) {
diff --git a/absl/types/any.h b/absl/types/any.h
index cee9cd324f..760a160e75 100644
--- a/absl/types/any.h
+++ b/absl/types/any.h
@@ -304,7 +304,7 @@ class any {
   // object of type `VT` with the arguments `std::forward<Args>(args)...`, and
   // returning a reference to the new contained value.
   //
-  // Note: If an exception is thrown during the call to `VT`’s constructor,
+  // Note: If an exception is thrown during the call to `VT`'s constructor,
   // `*this` does not contain a value, and any previously contained value has
   // been destroyed.
   template <
@@ -325,7 +325,7 @@ class any {
   // `initilizer_list, std::forward<Args>(args)...`, and returning a reference
   // to the new contained value.
   //
-  // Note: If an exception is thrown during the call to `VT`’s constructor,
+  // Note: If an exception is thrown during the call to `VT`'s constructor,
   // `*this` does not contain a value, and any previously contained value has
   // been destroyed. The function shall not participate in overload resolution
   // unless `is_copy_constructible_v<VT>` is `true` and
diff --git a/absl/types/optional.h b/absl/types/optional.h
index 9858a97497..07e439448d 100644
--- a/absl/types/optional.h
+++ b/absl/types/optional.h
@@ -492,11 +492,11 @@ class optional : private optional_internal::optional_data<T>,
 
   // Constructors
 
-  // Constructs a default-constructed `optional` holding the empty value, NOT a
-  // default constructed `T`.
+  // Constructs an `optional` holding an empty value, NOT a default constructed
+  // `T`.
   constexpr optional() noexcept {}
 
-  // Construct an `optional` initialized with `nullopt` to hold an empty value.
+  // Constructs an `optional` initialized with `nullopt` to hold an empty value.
   constexpr optional(nullopt_t) noexcept {}  // NOLINT(runtime/explicit)
 
   // Copy constructor, standard semantics