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);
 }