Update the "absl c++" dependency from "LTS 2020 Fev 25" to "LTS 2020 Sep; Patch 3" (https://github.com/abseil/abseil-cpp/releases/tag/20200923.3).
PiperOrigin-RevId: 359345876
Change-Id: I71b4aca59dea7ba1ef9f94fa00fec99e5d55e2c9
diff --git a/tensorflow/opensource_only.files b/tensorflow/opensource_only.files
index e473136..502023c 100644
--- a/tensorflow/opensource_only.files
+++ b/tensorflow/opensource_only.files
@@ -40,7 +40,6 @@
tensorflow/stream_executor/build_defs.bzl
tensorflow/third_party/BUILD
tensorflow/third_party/__init__.py
-tensorflow/third_party/absl/com_google_absl.BUILD
tensorflow/third_party/android/BUILD
tensorflow/third_party/android/android.bzl.tpl
tensorflow/third_party/android/android_configure.BUILD.tpl
diff --git a/third_party/absl/com_google_absl.BUILD b/third_party/absl/com_google_absl.BUILD
deleted file mode 100644
index 8fca145..0000000
--- a/third_party/absl/com_google_absl.BUILD
+++ /dev/null
@@ -1,5 +0,0 @@
-package(default_visibility = ["//visibility:public"])
-
-licenses(["notice"]) # Apache
-
-exports_files(["LICENSE"])
diff --git a/third_party/absl/com_google_absl_fix_mac_and_nvcc_build.patch b/third_party/absl/com_google_absl_fix_mac_and_nvcc_build.patch
deleted file mode 100644
index 6301119..0000000
--- a/third_party/absl/com_google_absl_fix_mac_and_nvcc_build.patch
+++ /dev/null
@@ -1,310 +0,0 @@
-diff --git a/absl/container/internal/compressed_tuple.h b/absl/container/internal/compressed_tuple.h
-index 4bfe92f..01db713 100644
---- a/absl/container/internal/compressed_tuple.h
-+++ b/absl/container/internal/compressed_tuple.h
-@@ -32,7 +32,6 @@
- #ifndef ABSL_CONTAINER_INTERNAL_COMPRESSED_TUPLE_H_
- #define ABSL_CONTAINER_INTERNAL_COMPRESSED_TUPLE_H_
-
--#include <initializer_list>
- #include <tuple>
- #include <type_traits>
- #include <utility>
-@@ -77,110 +76,61 @@ constexpr bool IsFinal() {
- #endif
- }
-
--// We can't use EBCO on other CompressedTuples because that would mean that we
--// derive from multiple Storage<> instantiations with the same I parameter,
--// and potentially from multiple identical Storage<> instantiations. So anytime
--// we use type inheritance rather than encapsulation, we mark
--// CompressedTupleImpl, to make this easy to detect.
--struct uses_inheritance {};
--
- template <typename T>
- constexpr bool ShouldUseBase() {
-- return std::is_class<T>::value && std::is_empty<T>::value && !IsFinal<T>() &&
-- !std::is_base_of<uses_inheritance, T>::value;
-+ return std::is_class<T>::value && std::is_empty<T>::value && !IsFinal<T>();
- }
-
- // The storage class provides two specializations:
- // - For empty classes, it stores T as a base class.
- // - For everything else, it stores T as a member.
--template <typename T, size_t I,
--#if defined(_MSC_VER)
-- bool UseBase =
-- ShouldUseBase<typename std::enable_if<true, T>::type>()>
--#else
-- bool UseBase = ShouldUseBase<T>()>
--#endif
-+template <typename D, size_t I, bool = ShouldUseBase<ElemT<D, I>>()>
- struct Storage {
-+ using T = ElemT<D, I>;
- T value;
- constexpr Storage() = default;
-- template <typename V>
-- explicit constexpr Storage(absl::in_place_t, V&& v)
-- : value(absl::forward<V>(v)) {}
-+ explicit constexpr Storage(T&& v) : value(absl::forward<T>(v)) {}
- constexpr const T& get() const& { return value; }
- T& get() & { return value; }
- constexpr const T&& get() const&& { return absl::move(*this).value; }
- T&& get() && { return std::move(*this).value; }
- };
-
--template <typename T, size_t I>
--struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC Storage<T, I, true> : T {
-+template <typename D, size_t I>
-+struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC Storage<D, I, true>
-+ : ElemT<D, I> {
-+ using T = internal_compressed_tuple::ElemT<D, I>;
- constexpr Storage() = default;
--
-- template <typename V>
-- explicit constexpr Storage(absl::in_place_t, V&& v)
-- : T(absl::forward<V>(v)) {}
--
-+ explicit constexpr Storage(T&& v) : T(absl::forward<T>(v)) {}
- constexpr const T& get() const& { return *this; }
- T& get() & { return *this; }
- constexpr const T&& get() const&& { return absl::move(*this); }
- T&& get() && { return std::move(*this); }
- };
-
--template <typename D, typename I, bool ShouldAnyUseBase>
-+template <typename D, typename I>
- struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC CompressedTupleImpl;
-
--template <typename... Ts, size_t... I, bool ShouldAnyUseBase>
--struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC CompressedTupleImpl<
-- CompressedTuple<Ts...>, absl::index_sequence<I...>, ShouldAnyUseBase>
-+template <typename... Ts, size_t... I>
-+struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC
-+ CompressedTupleImpl<CompressedTuple<Ts...>, absl::index_sequence<I...>>
- // We use the dummy identity function through std::integral_constant to
- // convince MSVC of accepting and expanding I in that context. Without it
- // you would get:
- // error C3548: 'I': parameter pack cannot be used in this context
-- : uses_inheritance,
-- Storage<Ts, std::integral_constant<size_t, I>::value>... {
-- constexpr CompressedTupleImpl() = default;
-- template <typename... Vs>
-- explicit constexpr CompressedTupleImpl(absl::in_place_t, Vs&&... args)
-- : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
-- friend CompressedTuple<Ts...>;
--};
--
--template <typename... Ts, size_t... I>
--struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC CompressedTupleImpl<
-- CompressedTuple<Ts...>, absl::index_sequence<I...>, false>
-- // We use the dummy identity function as above...
-- : Storage<Ts, std::integral_constant<size_t, I>::value, false>... {
-+ : Storage<CompressedTuple<Ts...>,
-+ std::integral_constant<size_t, I>::value>... {
- constexpr CompressedTupleImpl() = default;
-- template <typename... Vs>
-- explicit constexpr CompressedTupleImpl(absl::in_place_t, Vs&&... args)
-- : Storage<Ts, I, false>(absl::in_place, absl::forward<Vs>(args))... {}
-- friend CompressedTuple<Ts...>;
-+ explicit constexpr CompressedTupleImpl(Ts&&... args)
-+ : Storage<CompressedTuple<Ts...>, I>(absl::forward<Ts>(args))... {}
- };
-
--std::false_type Or(std::initializer_list<std::false_type>);
--std::true_type Or(std::initializer_list<bool>);
--
--// MSVC requires this to be done separately rather than within the declaration
--// of CompressedTuple below.
--template <typename... Ts>
--constexpr bool ShouldAnyUseBase() {
-- return decltype(
-- Or({std::integral_constant<bool, ShouldUseBase<Ts>()>()...})){};
--}
--
--template <typename T, typename V>
--using TupleMoveConstructible = typename std::conditional<
-- std::is_reference<T>::value, std::is_convertible<V, T>,
-- std::is_constructible<T, V&&>>::type;
--
- } // namespace internal_compressed_tuple
-
- // Helper class to perform the Empty Base Class Optimization.
- // Ts can contain classes and non-classes, empty or not. For the ones that
- // are empty classes, we perform the CompressedTuple. If all types in Ts are
--// empty classes, then CompressedTuple<Ts...> is itself an empty class. (This
--// does not apply when one or more of those empty classes is itself an empty
--// CompressedTuple.)
-+// empty classes, then CompressedTuple<Ts...> is itself an empty class.
- //
- // To access the members, use member .get<N>() function.
- //
-@@ -196,58 +146,36 @@ using TupleMoveConstructible = typename std::conditional<
- template <typename... Ts>
- class ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC CompressedTuple
- : private internal_compressed_tuple::CompressedTupleImpl<
-- CompressedTuple<Ts...>, absl::index_sequence_for<Ts...>,
-- internal_compressed_tuple::ShouldAnyUseBase<Ts...>()> {
-+ CompressedTuple<Ts...>, absl::index_sequence_for<Ts...>> {
- private:
- template <int I>
- using ElemT = internal_compressed_tuple::ElemT<CompressedTuple, I>;
-
-- template <int I>
-- using StorageT = internal_compressed_tuple::Storage<ElemT<I>, I>;
--
- public:
-- // There seems to be a bug in MSVC dealing in which using '=default' here will
-- // cause the compiler to ignore the body of other constructors. The work-
-- // around is to explicitly implement the default constructor.
--#if defined(_MSC_VER)
-- constexpr CompressedTuple() : CompressedTuple::CompressedTupleImpl() {}
--#else
- constexpr CompressedTuple() = default;
--#endif
-- explicit constexpr CompressedTuple(const Ts&... base)
-- : CompressedTuple::CompressedTupleImpl(absl::in_place, base...) {}
--
-- template <typename... Vs,
-- absl::enable_if_t<
-- absl::conjunction<
-- // Ensure we are not hiding default copy/move constructors.
-- absl::negation<std::is_same<void(CompressedTuple),
-- void(absl::decay_t<Vs>...)>>,
-- internal_compressed_tuple::TupleMoveConstructible<
-- Ts, Vs&&>...>::value,
-- bool> = true>
-- explicit constexpr CompressedTuple(Vs&&... base)
-- : CompressedTuple::CompressedTupleImpl(absl::in_place,
-- absl::forward<Vs>(base)...) {}
-+ explicit constexpr CompressedTuple(Ts... base)
-+ : CompressedTuple::CompressedTupleImpl(absl::forward<Ts>(base)...) {}
-
- template <int I>
- ElemT<I>& get() & {
-- return internal_compressed_tuple::Storage<ElemT<I>, I>::get();
-+ return internal_compressed_tuple::Storage<CompressedTuple, I>::get();
- }
-
- template <int I>
- constexpr const ElemT<I>& get() const& {
-- return StorageT<I>::get();
-+ return internal_compressed_tuple::Storage<CompressedTuple, I>::get();
- }
-
- template <int I>
- ElemT<I>&& get() && {
-- return std::move(*this).StorageT<I>::get();
-+ return std::move(*this)
-+ .internal_compressed_tuple::template Storage<CompressedTuple, I>::get();
- }
-
- template <int I>
- constexpr const ElemT<I>&& get() const&& {
-- return absl::move(*this).StorageT<I>::get();
-+ return absl::move(*this)
-+ .internal_compressed_tuple::template Storage<CompressedTuple, I>::get();
- }
- };
-
-diff --git a/absl/strings/string_view.h b/absl/strings/string_view.h
-index 1861ea6..c7a916b 100644
---- a/absl/strings/string_view.h
-+++ b/absl/strings/string_view.h
-@@ -283,7 +283,14 @@ class string_view {
- // Returns the ith element of the `string_view` using the array operator.
- // Note that this operator does not perform any bounds checking.
- constexpr const_reference operator[](size_type i) const {
-+#if defined(__NVCC__) && (__CUDACC_VER_MAJOR__ < 10 || (__CUDACC_VER_MAJOR__ == 10 && __CUDACC_VER_MINOR__ < 2))
-+ // An NVCC bug treats the original return expression as a non-constant,
-+ // which is not allowed in a constexpr function. This will be fixed in the
-+ // CUDA 10.2 release.
-+ return ptr_[i];
-+#else
- return ABSL_ASSERT(i < size()), ptr_[i];
-+#endif
- }
-
- // string_view::at()
-@@ -292,25 +299,46 @@ class string_view {
- // and an exception of type `std::out_of_range` will be thrown on invalid
- // access.
- constexpr const_reference at(size_type i) const {
-+#if defined(__NVCC__) && (__CUDACC_VER_MAJOR__ < 10 || (__CUDACC_VER_MAJOR__ == 10 && __CUDACC_VER_MINOR__ < 2))
-+ // An NVCC bug treats the original return expression as a non-constant,
-+ // which is not allowed in a constexpr function. This will be fixed in the
-+ // CUDA 10.2 release.
-+ return ptr_[i];
-+#else
- return ABSL_PREDICT_TRUE(i < size())
- ? ptr_[i]
- : ((void)base_internal::ThrowStdOutOfRange(
- "absl::string_view::at"),
- ptr_[i]);
-+#endif
- }
-
- // string_view::front()
- //
- // Returns the first element of a `string_view`.
- constexpr const_reference front() const {
-+#if defined(__NVCC__) && (__CUDACC_VER_MAJOR__ < 10 || (__CUDACC_VER_MAJOR__ == 10 && __CUDACC_VER_MINOR__ < 2))
-+ // An NVCC bug treats the original return expression as a non-constant,
-+ // which is not allowed in a constexpr function. This will be fixed in the
-+ // CUDA 10.2 release.
-+ return ptr_[0];
-+#else
- return ABSL_ASSERT(!empty()), ptr_[0];
-+#endif
- }
-
- // string_view::back()
- //
- // Returns the last element of a `string_view`.
- constexpr const_reference back() const {
-+#if defined(__NVCC__) && (__CUDACC_VER_MAJOR__ < 10 || (__CUDACC_VER_MAJOR__ == 10 && __CUDACC_VER_MINOR__ < 2))
-+ // An NVCC bug treats the original return expression as a non-constant,
-+ // which is not allowed in a constexpr function. This will be fixed in the
-+ // CUDA 10.2 release.
-+ return ptr_[size() - 1];
-+#else
- return ABSL_ASSERT(!empty()), ptr_[size() - 1];
-+#endif
- }
-
- // string_view::data()
-@@ -519,7 +547,14 @@ class string_view {
- (std::numeric_limits<difference_type>::max)();
-
- static constexpr size_type CheckLengthInternal(size_type len) {
-+#if defined(__NVCC__) && (__CUDACC_VER_MAJOR__ < 10 || (__CUDACC_VER_MAJOR__ == 10 && __CUDACC_VER_MINOR__ < 2))
-+ // An NVCC bug treats the original return expression as a non-constant,
-+ // which is not allowed in a constexpr function. This will be fixed in the
-+ // CUDA 10.2 release.
-+ return len;
-+#else
- return (void)ABSL_ASSERT(len <= kMaxSize), len;
-+#endif
- }
-
- static constexpr size_type StrlenInternal(const char* str) {
-diff --git a/absl/time/internal/cctz/BUILD.bazel b/absl/time/internal/cctz/BUILD.bazel
-index 7a53c81..159b0f0 100644
---- a/absl/time/internal/cctz/BUILD.bazel
-+++ b/absl/time/internal/cctz/BUILD.bazel
-@@ -74,15 +74,6 @@ cc_library(
- "include/cctz/time_zone.h",
- "include/cctz/zone_info_source.h",
- ],
-- linkopts = select({
-- ":osx": [
-- "-framework Foundation",
-- ],
-- ":ios": [
-- "-framework Foundation",
-- ],
-- "//conditions:default": [],
-- }),
- visibility = ["//visibility:public"],
- deps = [
- ":civil_time",
diff --git a/third_party/absl/workspace.bzl b/third_party/absl/workspace.bzl
index 9676c6d..b6ae936 100644
--- a/third_party/absl/workspace.bzl
+++ b/third_party/absl/workspace.bzl
@@ -1,21 +1,18 @@
"""Provides the repository macro to import absl."""
-load("//third_party:repo.bzl", "third_party_http_archive")
+load("//third_party:repo.bzl", "tf_http_archive")
def repo(name):
"""Imports absl."""
+ # Abseil LTS branch, Sept 2020, Patch 3
# Attention: tools parse and update these lines.
- ABSL_COMMIT = "df3ea785d8c30a9503321a3d35ee7d35808f190d"
- ABSL_SHA256 = "f368a8476f4e2e0eccf8a7318b98dafbe30b2600f4e3cf52636e5eb145aba06a"
+ ABSL_COMMIT = "6f9d96a1f41439ac172ee2ef7ccd8edf0e5d068c"
+ ABSL_SHA256 = "62c27e7a633e965a2f40ff16b487c3b778eae440bab64cad83b34ef1cbe3aa93"
- third_party_http_archive(
+ tf_http_archive(
name = name,
sha256 = ABSL_SHA256,
- build_file = "//third_party/absl:com_google_absl.BUILD",
- # TODO: Remove the patch when https://github.com/abseil/abseil-cpp/issues/326 is resolved
- # and when TensorFlow is build against CUDA 10.2
- patch_file = "//third_party/absl:com_google_absl_fix_mac_and_nvcc_build.patch",
strip_prefix = "abseil-cpp-{commit}".format(commit = ABSL_COMMIT),
urls = [
"https://storage.googleapis.com/mirror.tensorflow.org/github.com/abseil/abseil-cpp/archive/{commit}.tar.gz".format(commit = ABSL_COMMIT),