aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libstdc++-v3/include/bits/c++config35
-rw-r--r--libstdc++-v3/include/bits/range_access.h10
-rw-r--r--libstdc++-v3/include/parallel/base.h5
-rw-r--r--libstdc++-v3/include/std/ranges4
4 files changed, 32 insertions, 22 deletions
diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config
index de28ace..badf9d0 100644
--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -477,19 +477,16 @@ namespace std
__builtin_abort();
}
}
-#define __glibcxx_assert_impl(_Condition) \
- do \
- { \
- if (! (_Condition)) \
- std::__replacement_assert(__FILE__, __LINE__, __PRETTY_FUNCTION__, \
- #_Condition); \
- } while (false)
+#define __glibcxx_assert_impl(_Condition) \
+ if (!bool(_Condition)) \
+ std::__replacement_assert(__FILE__, __LINE__, __PRETTY_FUNCTION__, \
+ #_Condition)
#endif
#if defined(_GLIBCXX_ASSERTIONS)
-# define __glibcxx_assert(_Condition) __glibcxx_assert_impl(_Condition)
+# define __glibcxx_assert_2(_Condition) __glibcxx_assert_impl(_Condition)
#else
-# define __glibcxx_assert(_Condition)
+# define __glibcxx_assert_2(_Condition)
#endif
// Macros for race detectors.
@@ -683,6 +680,26 @@ namespace std
# endif
#endif // GCC
+#if _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED
+# define __glibcxx_assert_1(_Condition) \
+ if (__builtin_is_constant_evaluated()) \
+ { \
+ void __failed_assertion(); \
+ if (!bool(_Condition)) \
+ __failed_assertion(); \
+ } \
+ else
+#else
+# define __glibcxx_assert_1(_Condition)
+#endif
+
+# define __glibcxx_assert(_Condition) \
+ do { \
+ __glibcxx_assert_1(_Condition) \
+ { __glibcxx_assert_2(_Condition); } \
+ } while (false)
+
+
// PSTL configuration
#if __cplusplus >= 201703L
diff --git a/libstdc++-v3/include/bits/range_access.h b/libstdc++-v3/include/bits/range_access.h
index bafced3..5c5b2fe 100644
--- a/libstdc++-v3/include/bits/range_access.h
+++ b/libstdc++-v3/include/bits/range_access.h
@@ -987,10 +987,7 @@ namespace ranges
}
else
{
-#ifdef __cpp_lib_is_constant_evaluated
- if (std::is_constant_evaluated() && __n < 0)
- throw "attempt to decrement a non-bidirectional iterator";
-#endif
+ // cannot decrement a non-bidirectional iterator
__glibcxx_assert(__n >= 0);
while (__n-- > 0)
++__it;
@@ -1065,10 +1062,7 @@ namespace ranges
}
else
{
-#ifdef __cpp_lib_is_constant_evaluated
- if (std::is_constant_evaluated() && __n < 0)
- throw "attempt to decrement a non-bidirectional iterator";
-#endif
+ // cannot decrement a non-bidirectional iterator
__glibcxx_assert(__n >= 0);
return __n;
}
diff --git a/libstdc++-v3/include/parallel/base.h b/libstdc++-v3/include/parallel/base.h
index 0d1c264..973a2dc 100644
--- a/libstdc++-v3/include/parallel/base.h
+++ b/libstdc++-v3/include/parallel/base.h
@@ -420,9 +420,10 @@ namespace __gnu_parallel
}
#if _GLIBCXX_PARALLEL_ASSERTIONS && defined(__glibcxx_assert_impl)
-#define _GLIBCXX_PARALLEL_ASSERT(_Condition) __glibcxx_assert_impl(_Condition)
+# define _GLIBCXX_PARALLEL_ASSERT(_Condition) \
+ do { __glibcxx_assert_impl(_Condition); } while (false)
#else
-#define _GLIBCXX_PARALLEL_ASSERT(_Condition)
+# define _GLIBCXX_PARALLEL_ASSERT(_Condition) do { } while (false)
#endif
} //namespace __gnu_parallel
diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges
index 2d0017f..054ffe8 100644
--- a/libstdc++-v3/include/std/ranges
+++ b/libstdc++-v3/include/std/ranges
@@ -860,9 +860,7 @@ namespace ranges
: _M_value(__value), _M_bound(__bound)
{
if constexpr (totally_ordered_with<_Winc, _Bound>)
- {
- __glibcxx_assert( bool(__value <= __bound) );
- }
+ __glibcxx_assert( bool(__value <= __bound) );
}
constexpr _Iterator