about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--.ci/abseil-cpp.json7
-rw-r--r--absl/BUILD.bazel4
-rw-r--r--absl/base/BUILD.bazel18
-rw-r--r--absl/base/config.h15
-rw-r--r--absl/container/BUILD.bazel3
-rw-r--r--absl/strings/BUILD.bazel15
-rw-r--r--absl/strings/internal/utf8.h1
-rw-r--r--absl/strings/match.h5
-rw-r--r--absl/strings/numbers.h6
-rw-r--r--absl/synchronization/BUILD.bazel3
-rw-r--r--absl/time/BUILD.bazel3
-rw-r--r--absl/types/any.h39
-rw-r--r--absl/types/optional_test.cc9
-rw-r--r--absl/types/span.h2
14 files changed, 93 insertions, 37 deletions
diff --git a/.ci/abseil-cpp.json b/.ci/abseil-cpp.json
deleted file mode 100644
index b21e68d1c230..000000000000
--- a/.ci/abseil-cpp.json
+++ /dev/null
@@ -1,7 +0,0 @@
-// This is a relaxed JSON format, you can have comments in it.
-// This is a list of configuration for the job that does not specify a configuration.
-[
-    {"node": "linux-x86_64"},
-    {"node": "ubuntu_16.04-x86_64"},
-    {"node": "darwin-x86_64"}
-]
diff --git a/absl/BUILD.bazel b/absl/BUILD.bazel
index 403a35c384ee..439addbfc828 100644
--- a/absl/BUILD.bazel
+++ b/absl/BUILD.bazel
@@ -23,6 +23,7 @@ config_setting(
     values = {
         "compiler": "llvm",
     },
+    visibility = [":__subpackages__"],
 )
 
 # following configs are based on mapping defined in: https://git.io/v5Ijz
@@ -31,6 +32,7 @@ config_setting(
     values = {
         "cpu": "darwin",
     },
+    visibility = [":__subpackages__"],
 )
 
 config_setting(
@@ -38,6 +40,7 @@ config_setting(
     values = {
         "cpu": "x64_windows",
     },
+    visibility = [":__subpackages__"],
 )
 
 config_setting(
@@ -45,4 +48,5 @@ config_setting(
     values = {
         "cpu": "ppc",
     },
+    visibility = [":__subpackages__"],
 )
diff --git a/absl/base/BUILD.bazel b/absl/base/BUILD.bazel
index 23439a090418..d68448daa5d2 100644
--- a/absl/base/BUILD.bazel
+++ b/absl/base/BUILD.bazel
@@ -25,8 +25,6 @@ package(default_visibility = ["//visibility:public"])
 
 licenses(["notice"])  # Apache 2.0
 
-exports_files(["thread_annotations.h"])
-
 cc_library(
     name = "spinlock_wait",
     srcs = [
@@ -39,6 +37,9 @@ cc_library(
         "internal/spinlock_wait.h",
     ],
     copts = ABSL_DEFAULT_COPTS,
+    visibility = [
+        "//absl/base:__pkg__",
+    ],
     deps = [":core_headers"],
 )
 
@@ -83,6 +84,9 @@ cc_library(
         "internal/malloc_extension_c.h",
     ],
     copts = ABSL_DEFAULT_COPTS,
+    visibility = [
+        "//absl:__subpackages__",
+    ],
     deps = [
         ":core_headers",
         ":dynamic_annotations",
@@ -108,6 +112,9 @@ cc_library(
     textual_hdrs = [
         "internal/malloc_hook_invoke.h",
     ],
+    visibility = [
+        "//absl:__subpackages__",
+    ],
     deps = [
         ":base",
         ":config",
@@ -124,6 +131,9 @@ cc_library(
         "internal/invoke.h",
     ],
     copts = ABSL_DEFAULT_COPTS,
+    visibility = [
+        "//absl:__subpackages__",
+    ],
 )
 
 cc_library(
@@ -183,6 +193,9 @@ cc_library(
     features = [
         "-use_header_modules",
     ],
+    visibility = [
+        "//absl:__subpackages__",
+    ],
     deps = [
         ":base",
         ":config",
@@ -205,6 +218,7 @@ cc_library(
     testonly = 1,
     hdrs = ["internal/exception_testing.h"],
     copts = ABSL_TEST_COPTS,
+    visibility = ["//absl:__subpackages__"],
     deps = [
         ":config",
         "@com_google_googletest//:gtest",
diff --git a/absl/base/config.h b/absl/base/config.h
index 5f0dd04c8e66..495811bd88c3 100644
--- a/absl/base/config.h
+++ b/absl/base/config.h
@@ -372,4 +372,19 @@
 #endif
 #endif
 
+// For MSVC, `__has_include` is supported in VS 2017 15.3, which is later than
+// the support for <optional>, <any>, <string_view>. So we use _MSC_VER to check
+// whether we have VS 2017 RTM (when <optional>, <any>, <string_view> is
+// implemented) or higher.
+// Also, `__cplusplus` is not correctly set by MSVC, so we use `_MSVC_LANG` to
+// check the language version.
+// TODO(zhangxy): fix tests before enabling aliasing for `std::any`,
+// `std::string_view`.
+#if defined(_MSC_VER) && _MSC_VER >= 1910 && \
+    ((defined(_MSVC_LANG) && _MSVC_LANG > 201402) || __cplusplus > 201402)
+// #define ABSL_HAVE_STD_ANY 1
+#define ABSL_HAVE_STD_OPTIONAL 1
+// #define ABSL_HAVE_STD_STRING_VIEW 1
+#endif
+
 #endif  // ABSL_BASE_CONFIG_H_
diff --git a/absl/container/BUILD.bazel b/absl/container/BUILD.bazel
index ee017431c88b..7d550cb16c5a 100644
--- a/absl/container/BUILD.bazel
+++ b/absl/container/BUILD.bazel
@@ -112,6 +112,9 @@ cc_library(
     srcs = ["internal/test_instance_tracker.cc"],
     hdrs = ["internal/test_instance_tracker.h"],
     copts = ABSL_DEFAULT_COPTS,
+    visibility = [
+        "//absl:__subpackages__",
+    ],
 )
 
 cc_test(
diff --git a/absl/strings/BUILD.bazel b/absl/strings/BUILD.bazel
index b26106631f03..49f49abd8d78 100644
--- a/absl/strings/BUILD.bazel
+++ b/absl/strings/BUILD.bazel
@@ -103,6 +103,7 @@ cc_test(
     size = "small",
     srcs = ["match_test.cc"],
     copts = ABSL_TEST_COPTS,
+    visibility = ["//visibility:private"],
     deps = [
         ":strings",
         "@com_google_googletest//:gtest_main",
@@ -117,6 +118,7 @@ cc_test(
         "internal/escaping_test_common.inc",
     ],
     copts = ABSL_TEST_COPTS,
+    visibility = ["//visibility:private"],
     deps = [
         ":strings",
         "//absl/base:core_headers",
@@ -130,6 +132,7 @@ cc_test(
     size = "small",
     srcs = ["ascii_test.cc"],
     copts = ABSL_TEST_COPTS,
+    visibility = ["//visibility:private"],
     deps = [
         ":strings",
         "//absl/base:core_headers",
@@ -145,6 +148,7 @@ cc_test(
         "internal/memutil_test.cc",
     ],
     copts = ABSL_TEST_COPTS,
+    visibility = ["//visibility:private"],
     deps = [
         ":strings",
         "//absl/base:core_headers",
@@ -159,6 +163,7 @@ cc_test(
         "internal/utf8_test.cc",
     ],
     copts = ABSL_TEST_COPTS,
+    visibility = ["//visibility:private"],
     deps = [
         ":internal",
         ":strings",
@@ -172,6 +177,7 @@ cc_test(
     size = "small",
     srcs = ["string_view_test.cc"],
     copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
+    visibility = ["//visibility:private"],
     deps = [
         ":strings",
         "//absl/base:config",
@@ -186,6 +192,7 @@ cc_test(
     size = "small",
     srcs = ["substitute_test.cc"],
     copts = ABSL_TEST_COPTS,
+    visibility = ["//visibility:private"],
     deps = [
         ":strings",
         "//absl/base:core_headers",
@@ -198,6 +205,7 @@ cc_test(
     size = "small",
     srcs = ["str_replace_test.cc"],
     copts = ABSL_TEST_COPTS,
+    visibility = ["//visibility:private"],
     deps = [
         ":strings",
         "@com_google_googletest//:gtest_main",
@@ -208,6 +216,7 @@ cc_test(
     name = "str_split_test",
     srcs = ["str_split_test.cc"],
     copts = ABSL_TEST_COPTS,
+    visibility = ["//visibility:private"],
     deps = [
         ":strings",
         "//absl/base:core_headers",
@@ -221,6 +230,7 @@ cc_test(
     size = "small",
     srcs = ["internal/ostringstream_test.cc"],
     copts = ABSL_TEST_COPTS,
+    visibility = ["//visibility:private"],
     deps = [
         ":internal",
         "@com_google_googletest//:gtest_main",
@@ -235,6 +245,7 @@ cc_test(
         "internal/resize_uninitialized_test.cc",
     ],
     copts = ABSL_TEST_COPTS,
+    visibility = ["//visibility:private"],
     deps = [
         "//absl/base:core_headers",
         "//absl/meta:type_traits",
@@ -247,6 +258,7 @@ cc_test(
     size = "small",
     srcs = ["str_join_test.cc"],
     copts = ABSL_TEST_COPTS,
+    visibility = ["//visibility:private"],
     deps = [
         ":strings",
         "//absl/base:core_headers",
@@ -260,6 +272,7 @@ cc_test(
     size = "small",
     srcs = ["str_cat_test.cc"],
     copts = ABSL_TEST_COPTS,
+    visibility = ["//visibility:private"],
     deps = [
         ":strings",
         "//absl/base:core_headers",
@@ -278,6 +291,7 @@ cc_test(
     tags = [
         "no_test_loonix",
     ],
+    visibility = ["//visibility:private"],
     deps = [
         ":strings",
         "//absl/base",
@@ -291,6 +305,7 @@ cc_test(
     size = "small",
     srcs = ["strip_test.cc"],
     copts = ABSL_TEST_COPTS,
+    visibility = ["//visibility:private"],
     deps = [
         ":strings",
         "@com_google_googletest//:gtest_main",
diff --git a/absl/strings/internal/utf8.h b/absl/strings/internal/utf8.h
index 705eea7f16ab..5bd82e8427a6 100644
--- a/absl/strings/internal/utf8.h
+++ b/absl/strings/internal/utf8.h
@@ -25,7 +25,6 @@
 #include <cstddef>
 #include <cstdint>
 
-
 namespace absl {
 namespace strings_internal {
 
diff --git a/absl/strings/match.h b/absl/strings/match.h
index 4ac35f192e00..3d54da81d5f0 100644
--- a/absl/strings/match.h
+++ b/absl/strings/match.h
@@ -53,7 +53,7 @@ inline bool StrContains(absl::string_view haystack, absl::string_view needle) {
 inline bool StartsWith(absl::string_view text, absl::string_view prefix) {
   return prefix.empty() ||
          (text.size() >= prefix.size() &&
-         memcmp(text.data(), prefix.data(), prefix.size()) == 0);
+          memcmp(text.data(), prefix.data(), prefix.size()) == 0);
 }
 
 // EndsWith()
@@ -63,7 +63,8 @@ inline bool EndsWith(absl::string_view text, absl::string_view suffix) {
   return suffix.empty() ||
          (text.size() >= suffix.size() &&
           memcmp(text.data() + (text.size() - suffix.size()), suffix.data(),
-  suffix.size()) == 0);
+                 suffix.size()) == 0
+         );
 }
 
 // StartsWithIgnoreCase()
diff --git a/absl/strings/numbers.h b/absl/strings/numbers.h
index 74aebc8028ea..1f3bbcfae596 100644
--- a/absl/strings/numbers.h
+++ b/absl/strings/numbers.h
@@ -62,9 +62,9 @@ ABSL_MUST_USE_RESULT bool SimpleAtod(absl::string_view str, double* value);
 
 // SimpleAtob()
 //
-// Converts the given std::string into into a boolean, returning `true` if
-// successful. The following case-insensitive strings are interpreted as boolean
-// `true`: "true", "t", "yes", "y", "1". The following case-insensitive strings
+// Converts the given std::string into a boolean, returning `true` if successful.
+// The following case-insensitive strings are interpreted as boolean `true`:
+// "true", "t", "yes", "y", "1". The following case-insensitive strings
 // are interpreted as boolean `false`: "false", "f", "no", "n", "0".
 ABSL_MUST_USE_RESULT bool SimpleAtob(absl::string_view str, bool* value);
 
diff --git a/absl/synchronization/BUILD.bazel b/absl/synchronization/BUILD.bazel
index cc8cecf97991..4faf62de5f5e 100644
--- a/absl/synchronization/BUILD.bazel
+++ b/absl/synchronization/BUILD.bazel
@@ -34,6 +34,9 @@ cc_library(
         "internal/graphcycles.h",
     ],
     copts = ABSL_DEFAULT_COPTS,
+    visibility = [
+        "//absl:__subpackages__",
+    ],
     deps = [
         "//absl/base",
         "//absl/base:core_headers",
diff --git a/absl/time/BUILD.bazel b/absl/time/BUILD.bazel
index c34f52489c0d..3d1d2df563ba 100644
--- a/absl/time/BUILD.bazel
+++ b/absl/time/BUILD.bazel
@@ -57,6 +57,9 @@ cc_library(
     ],
     hdrs = ["internal/test_util.h"],
     copts = ABSL_DEFAULT_COPTS,
+    visibility = [
+        "//absl/time:__pkg__",
+    ],
     deps = [
         ":time",
         "//absl/base",
diff --git a/absl/types/any.h b/absl/types/any.h
index a51dea110d0f..2e7bf21f55f6 100644
--- a/absl/types/any.h
+++ b/absl/types/any.h
@@ -94,23 +94,20 @@ namespace absl {
 
 namespace any_internal {
 
-// FastTypeId<Type>() evaluates at compile/link-time to a unique integer for the
-// passed in type. Their values are neither contiguous nor small, making them
-// unfit for using as an index into a vector, but a good match for keys into
-// maps or straight up comparisons.
-// Note that on 64-bit (unix) systems size_t is 64-bit while int is 32-bit and
-// the compiler will happily and quietly assign such a 64-bit value to a
-// 32-bit integer. While a client should never do that it SHOULD still be safe,
-// assuming the BSS segment doesn't span more than 4GiB.
+template <typename Type>
+struct TypeTag {
+  constexpr static char dummy_var = 0;
+};
+
+template <typename Type>
+constexpr char TypeTag<Type>::dummy_var;
+
+// FastTypeId<Type>() evaluates at compile/link-time to a unique pointer for the
+// passed in type. These are meant to be good match for keys into maps or
+// straight up comparisons.
 template<typename Type>
-inline size_t FastTypeId() {
-  static_assert(sizeof(char*) <= sizeof(size_t),
-                "ptr size too large for size_t");
-
-  // This static variable isn't actually used, only its address, so there are
-  // no concurrency issues.
-  static char dummy_var;
-  return reinterpret_cast<size_t>(&dummy_var);
+constexpr inline const void* FastTypeId() {
+  return &TypeTag<Type>::dummy_var;
 }
 
 }  // namespace any_internal
@@ -382,7 +379,7 @@ class any {
    public:
     virtual ~ObjInterface() = default;
     virtual std::unique_ptr<ObjInterface> Clone() const = 0;
-    virtual size_t type_id() const noexcept = 0;
+    virtual const void* ObjTypeId() const noexcept = 0;
 #if ABSL_ANY_DETAIL_HAS_RTTI
     virtual const std::type_info& Type() const noexcept = 0;
 #endif  // ABSL_ANY_DETAIL_HAS_RTTI
@@ -400,7 +397,7 @@ class any {
       return std::unique_ptr<ObjInterface>(new Obj(in_place, value));
     }
 
-    size_t type_id() const noexcept final { return IdForType<T>(); }
+    const void* ObjTypeId() const noexcept final { return IdForType<T>(); }
 
 #if ABSL_ANY_DETAIL_HAS_RTTI
     const std::type_info& Type() const noexcept final { return typeid(T); }
@@ -415,7 +412,7 @@ class any {
   }
 
   template <typename T>
-  static size_t IdForType() {
+  constexpr static const void* IdForType() {
     // Note: This type dance is to make the behavior consistent with typeid.
     using NormalizedType =
         typename std::remove_cv<typename std::remove_reference<T>::type>::type;
@@ -423,8 +420,8 @@ class any {
     return any_internal::FastTypeId<NormalizedType>();
   }
 
-  size_t GetObjTypeId() const {
-    return obj_ == nullptr ? any_internal::FastTypeId<void>() : obj_->type_id();
+  const void* GetObjTypeId() const {
+    return obj_ ? obj_->ObjTypeId() : any_internal::FastTypeId<void>();
   }
 
   // `absl::any` nonmember functions //
diff --git a/absl/types/optional_test.cc b/absl/types/optional_test.cc
index 645f5b93cf89..5eedfcfd5223 100644
--- a/absl/types/optional_test.cc
+++ b/absl/types/optional_test.cc
@@ -270,8 +270,17 @@ TEST(optionalTest, CopyConstructor) {
     EXPECT_TRUE(absl::is_trivially_copy_constructible<
                 absl::optional<const TrivialCopyable>>::value);
 #endif
+    // When testing with VS 2017 15.3, there seems to be a bug in MSVC
+    // std::optional when T is volatile-qualified. So skipping this test.
+    // Bug report:
+    // https://connect.microsoft.com/VisualStudio/feedback/details/3142534
+#if defined(ABSL_HAVE_STD_OPTIONAL) && defined(_MSC_VER) && _MSC_VER >= 1911
+#define ABSL_MSVC_OPTIONAL_VOLATILE_COPY_BUG 1
+#endif
+#ifndef ABSL_MSVC_OPTIONAL_VOLATILE_COPY_BUG
     EXPECT_FALSE(std::is_copy_constructible<
                  absl::optional<volatile TrivialCopyable>>::value);
+#endif
   }
 }
 
diff --git a/absl/types/span.h b/absl/types/span.h
index e1f006ad9f7e..f4738153116e 100644
--- a/absl/types/span.h
+++ b/absl/types/span.h
@@ -378,7 +378,7 @@ class Span {
   //
   // Returns a reference to the i'th element of this span.
   constexpr reference at(size_type i) const {
-    return ABSL_PREDICT_FALSE(i < size())
+    return ABSL_PREDICT_TRUE(i < size())
                ? ptr_[i]
                : (base_internal::ThrowStdOutOfRange(
                       "Span::at failed bounds check"),