Automated rollback of commit 34e723033bf6e31b196258451c6cdc684804a88d. PiperOrigin-RevId: 903357540 Change-Id: I0c25be897ce7cd5d0e4e82f66f912516b2943400
diff --git a/absl/base/internal/hardening.h b/absl/base/internal/hardening.h index 31638a4..6ea2833 100644 --- a/absl/base/internal/hardening.h +++ b/absl/base/internal/hardening.h
@@ -52,7 +52,7 @@ // Prefer a more specific assertion function over this more general one, // as assertion functions which perform the comparison themselves // can have the cost of the comparison attributed to them. -inline void HardeningAssert(bool cond) { +constexpr void HardeningAssert(bool cond) { ABSL_ASSERT(cond); #if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG) if (ABSL_PREDICT_FALSE(!cond)) { @@ -66,7 +66,7 @@ // // When `NDEBUG` is not defined, `HardeningAssertSlow`'s behavior is identical // to `ABSL_ASSERT`. -inline void HardeningAssertSlow(bool cond) { +constexpr void HardeningAssertSlow(bool cond) { ABSL_ASSERT(cond); #if (ABSL_OPTION_HARDENED == 1) && defined(NDEBUG) if (ABSL_PREDICT_FALSE(!cond)) { @@ -76,7 +76,7 @@ } template <typename T> -inline void HardeningAssertGT(T val1, T val2) { +constexpr void HardeningAssertGT(T val1, T val2) { ABSL_ASSERT(val1 > val2); #if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG) if (!ABSL_PREDICT_TRUE(val1 > val2)) { @@ -86,7 +86,7 @@ } template <typename T> -inline void HardeningAssertGE(T val1, T val2) { +constexpr void HardeningAssertGE(T val1, T val2) { ABSL_ASSERT(val1 >= val2); #if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG) if (!ABSL_PREDICT_TRUE(val1 >= val2)) { @@ -96,7 +96,7 @@ } template <typename T> -inline void HardeningAssertLT(T val1, T val2) { +constexpr void HardeningAssertLT(T val1, T val2) { ABSL_ASSERT(val1 < val2); #if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG) if (!ABSL_PREDICT_TRUE(val1 < val2)) { @@ -106,7 +106,7 @@ } template <typename T> -inline void HardeningAssertLE(T val1, T val2) { +constexpr void HardeningAssertLE(T val1, T val2) { ABSL_ASSERT(val1 <= val2); #if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG) if (!ABSL_PREDICT_TRUE(val1 <= val2)) { @@ -115,12 +115,12 @@ #endif } -inline void HardeningAssertInBounds(size_t index, size_t size) { +constexpr void HardeningAssertInBounds(size_t index, size_t size) { HardeningAssertLT(index, size); } template <typename T> -inline void HardeningAssertNonEmpty(const T& container) { +constexpr void HardeningAssertNonEmpty(const T& container) { ABSL_ASSERT(!container.empty()); #if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG) if (ABSL_PREDICT_FALSE(container.empty())) { @@ -130,7 +130,7 @@ } template <typename T> -inline void HardeningAssertNonNull(T ptr) { +constexpr void HardeningAssertNonNull(T ptr) { ABSL_ASSERT(ptr != nullptr); #if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG) if (ABSL_PREDICT_FALSE(ptr == nullptr)) {
diff --git a/absl/types/BUILD.bazel b/absl/types/BUILD.bazel index 769f830..a3c038a 100644 --- a/absl/types/BUILD.bazel +++ b/absl/types/BUILD.bazel
@@ -93,6 +93,7 @@ "//absl/algorithm", "//absl/base:config", "//absl/base:core_headers", + "//absl/base:hardening", "//absl/base:nullability", "//absl/base:throw_delegate", "//absl/hash:weakly_mixed_integer", @@ -133,6 +134,7 @@ deps = [ "//absl/base:config", "//absl/base:core_headers", + "//absl/base:hardening", "//absl/base:nullability", "//absl/base:raw_logging_internal", "//absl/base:throw_delegate", @@ -258,6 +260,7 @@ deps = [ "//absl/base:config", "//absl/base:core_headers", + "//absl/base:hardening", ], )
diff --git a/absl/types/CMakeLists.txt b/absl/types/CMakeLists.txt index fd2f92f..f00b574 100644 --- a/absl/types/CMakeLists.txt +++ b/absl/types/CMakeLists.txt
@@ -39,6 +39,7 @@ DEPS absl::config absl::core_headers + absl::hardening absl::nullability absl::raw_logging_internal absl::throw_delegate @@ -78,6 +79,7 @@ absl::algorithm absl::config absl::core_headers + absl::hardening absl::nullability absl::throw_delegate absl::type_traits @@ -231,6 +233,7 @@ DEPS absl::config absl::core_headers + absl::hardening PUBLIC )
diff --git a/absl/types/any_span.h b/absl/types/any_span.h index 98ad4f9..d20f7bf 100644 --- a/absl/types/any_span.h +++ b/absl/types/any_span.h
@@ -213,6 +213,7 @@ #include "absl/base/attributes.h" #include "absl/base/config.h" +#include "absl/base/internal/hardening.h" #include "absl/base/internal/raw_logging.h" #include "absl/base/macros.h" #include "absl/base/nullability.h" @@ -292,7 +293,7 @@ "Iter must be a random access iterator."); Range(Iter begin, Iter end) { - ABSL_HARDENING_ASSERT(begin <= end); + absl::base_internal::HardeningAssertLE(begin, end); begin_ = begin; end_ = end; } @@ -300,7 +301,7 @@ std::size_t size() const { return end_ - begin_; } decltype(std::declval<Iter>()[0]) operator[](std::size_t i) const { - ABSL_HARDENING_ASSERT(i < (end_ - begin_)); + absl::base_internal::HardeningAssertLT(i, size()); return begin_[i]; } @@ -708,19 +709,22 @@ if (len == AnySpan<T>::npos) { len = this_size - pos; } - ABSL_HARDENING_ASSERT(pos <= this_size && len <= this_size - pos); + absl::base_internal::HardeningAssertLE(pos, this_size); + absl::base_internal::HardeningAssertLE(len, + static_cast<size_type>(this_size + - pos)); return AnySpan<T>(getter_.Offset(pos), len); } constexpr AnySpan subspan(size_type pos) const { - ABSL_HARDENING_ASSERT(pos <= size()); + absl::base_internal::HardeningAssertLE(pos, size()); return AnySpan(getter_.Offset(pos), size() - pos); } // Returns a `AnySpan` containing first `len` elements. Parameter `len` // must be non-negative and <= size(). constexpr AnySpan first(size_type len) const { - ABSL_HARDENING_ASSERT(len != AnySpan<T>::npos); + absl::base_internal::HardeningAssert(len != AnySpan<T>::npos); return subspan(0, len); } @@ -734,7 +738,7 @@ // Element access. constexpr reference operator[](size_type index) const { - ABSL_HARDENING_ASSERT(index < size()); + absl::base_internal::HardeningAssertLT(index, size()); return getter_.Get(index); } constexpr reference at(size_type index) const { @@ -744,11 +748,11 @@ return getter_.Get(index); } constexpr reference front() const { - ABSL_HARDENING_ASSERT(size() > 0); + absl::base_internal::HardeningAssertGT(size(), size_type{0}); return (*this)[0]; } constexpr reference back() const { - ABSL_HARDENING_ASSERT(size() > 0); + absl::base_internal::HardeningAssertGT(size(), size_type{0}); return (*this)[size() - 1]; }
diff --git a/absl/types/optional_ref.h b/absl/types/optional_ref.h index fb21333..920fe56 100644 --- a/absl/types/optional_ref.h +++ b/absl/types/optional_ref.h
@@ -67,6 +67,7 @@ #include "absl/base/attributes.h" #include "absl/base/config.h" +#include "absl/base/internal/hardening.h" #include "absl/base/macros.h" #include "absl/base/optimization.h" @@ -162,11 +163,11 @@ // Accesses the underlying `T` value of an `optional_ref`. If the // `optional_ref` is empty, behavior is undefined. constexpr T& operator*() const { - ABSL_HARDENING_ASSERT(ptr_ != nullptr); + absl::base_internal::HardeningAssertNonNull(ptr_); return *ptr_; } constexpr T* operator->() const { - ABSL_HARDENING_ASSERT(ptr_ != nullptr); + absl::base_internal::HardeningAssertNonNull(ptr_); return ptr_; }
diff --git a/absl/types/span.h b/absl/types/span.h index 8c5736c..2327962 100644 --- a/absl/types/span.h +++ b/absl/types/span.h
@@ -64,6 +64,7 @@ #include "absl/base/attributes.h" #include "absl/base/config.h" +#include "absl/base/internal/hardening.h" #include "absl/base/macros.h" #include "absl/base/nullability.h" #include "absl/base/optimization.h" @@ -335,7 +336,7 @@ // // Returns a reference to the i'th element of this span. constexpr reference operator[](size_type i) const noexcept { - ABSL_HARDENING_ASSERT(i < size()); + absl::base_internal::HardeningAssertLT(i, size()); return ptr_[i]; } @@ -354,7 +355,7 @@ // Returns a reference to the first element of this span. The span must not // be empty. constexpr reference front() const noexcept { - ABSL_HARDENING_ASSERT(size() > 0); + absl::base_internal::HardeningAssertGT(size(), static_cast<size_t>(0)); return *data(); } @@ -363,7 +364,7 @@ // Returns a reference to the last element of this span. The span must not // be empty. constexpr reference back() const noexcept { - ABSL_HARDENING_ASSERT(size() > 0); + absl::base_internal::HardeningAssertGT(size(), static_cast<size_t>(0)); return *(data() + size() - 1); } @@ -429,7 +430,7 @@ // // Removes the first `n` elements from the span. void remove_prefix(size_type n) noexcept { - ABSL_HARDENING_ASSERT(size() >= n); + absl::base_internal::HardeningAssertGE(size(), n); ptr_ += n; len_ -= n; } @@ -438,7 +439,7 @@ // // Removes the last `n` elements from the span. void remove_suffix(size_type n) noexcept { - ABSL_HARDENING_ASSERT(size() >= n); + absl::base_internal::HardeningAssertGE(size(), n); len_ -= n; } @@ -737,7 +738,7 @@ template <int&... ExplicitArgumentBarrier, typename T> Span<T> MakeSpan(T* absl_nullable begin ABSL_ATTRIBUTE_LIFETIME_BOUND, T* absl_nullable end) noexcept { - ABSL_HARDENING_ASSERT(begin <= end); + absl::base_internal::HardeningAssertLE(begin, end); return Span<T>(begin, static_cast<size_t>(end - begin)); } @@ -798,7 +799,7 @@ Span<const T> MakeConstSpan(T* absl_nullable begin ABSL_ATTRIBUTE_LIFETIME_BOUND, T* absl_nullable end) noexcept { - ABSL_HARDENING_ASSERT(begin <= end); + absl::base_internal::HardeningAssertLE(begin, end); return Span<const T>(begin, end - begin); }