+2005-05-31 Paolo Carlini <pcarlini@suse.de>
+
+ PR libstdc++/20534 (contd)
+ * include/debug/macros.h: Add _GLIBCXX_DEBUG_ABORT, using
+ __gnu_debug::__fancy_abort.
+ * src/debug.cc: Define the latter.
+ * include/debug/debug.h: Use _GLIBCXX_DEBUG_ABORT instead of
+ assert.
+ * config/linker-map.gnu (__gnu_debug::__fancy_abort): Add.
+
2005-05-30 Paolo Carlini <pcarlini@suse.de>
* include/std/std_complex.h (log(const complex<_Tp>&)): When
_ZNSt8ios_base17_M_call_callbacksENS_5eventE;
_ZNSt8ios_base20_M_dispose_callbacksEv;
_ZNSt6locale5facet13_S_get_c_nameEv;
+ _ZN11__gnu_debug13__fancy_abortEPKciS1_S1_;
} GLIBCXX_3.4.4;
#ifdef _GLIBCXX_DEBUG
# include <debug/macros.h>
-
-// The debug mode requires assert functionality, but keep this include
-// conditionalized, so that non-debug use doesn't mandate exposure to the
-// assert macro.
-# include <cassert>
-# define _GLIBCXX_DEBUG_ASSERT(_Condition) assert(_Condition)
+# define _GLIBCXX_DEBUG_ASSERT(_Condition) _GLIBCXX_DEBUG_ABORT(_Condition)
# ifdef _GLIBCXX_DEBUG_PEDANTIC
-# define _GLIBCXX_DEBUG_PEDASSERT(_Condition) assert(_Condition)
+# define _GLIBCXX_DEBUG_PEDASSERT(_Condition) _GLIBCXX_DEBUG_ABORT(_Condition)
# else
# define _GLIBCXX_DEBUG_PEDASSERT(_Condition)
# endif
* the user error and where the error is reported.
*
*/
-#define _GLIBCXX_DEBUG_VERIFY(_Condition,_ErrorMessage) \
+namespace __gnu_debug
+{ void __fancy_abort(const char*, int, const char*, const char*); }
+#define _GLIBCXX_DEBUG_ABORT(_Condition) \
+ do { \
+ if (! (_Condition)) \
+ ::__gnu_debug::__fancy_abort(__FILE__, __LINE__, \
+ __PRETTY_FUNCTION__, \
+ #_Condition); \
+ } while (false)
+
+#define _GLIBCXX_DEBUG_VERIFY(_Condition,_ErrorMessage) \
do { \
if (! (_Condition)) \
::__gnu_debug::_Error_formatter::_M_at(__FILE__, __LINE__) \
namespace __gnu_debug
{
+ void
+ __fancy_abort(const char* __file, int __line, const char* __function,
+ const char* __condition)
+ {
+ printf("%s:%d: %s: Assertion '%s' failed.\n", __file, __line,
+ __function, __condition);
+ abort();
+ }
+
const char* _S_debug_messages[] =
{
"function requires a valid iterator range [%1.name;, %2.name;)",