summaryrefslogtreecommitdiffstats
path: root/newlib/libc/include/assert.h
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/include/assert.h')
-rw-r--r--newlib/libc/include/assert.h35
1 files changed, 24 insertions, 11 deletions
diff --git a/newlib/libc/include/assert.h b/newlib/libc/include/assert.h
index b681a8518..ed14928ba 100644
--- a/newlib/libc/include/assert.h
+++ b/newlib/libc/include/assert.h
@@ -11,18 +11,31 @@ extern "C" {
#undef assert
#ifdef NDEBUG /* required by ANSI standard */
-#define assert(p) ((void)0)
+# define assert(__e) ((void)0)
#else
-
-#ifdef __STDC__
-#define assert(e) ((e) ? (void)0 : __assert(__FILE__, __LINE__, #e))
-#else /* PCC */
-#define assert(e) ((e) ? (void)0 : __assert(__FILE__, __LINE__, "e"))
-#endif
-
-#endif /* NDEBUG */
-
-void _EXFUN(__assert,(const char *, int, const char *));
+# define assert(__e) ((__e) ? (void)0 : __assert_func (__FILE__, __LINE__, \
+ __ASSERT_FUNC, #__e))
+
+# ifndef __ASSERT_FUNC
+ /* Use g++'s demangled names in C++. */
+# if defined __cplusplus && defined __GNUC__
+# define __ASSERT_FUNC __PRETTY_FUNCTION__
+
+ /* C99 requires the use of __func__, gcc also supports it. */
+# elif defined __GNUC__ || __STDC_VERSION__ >= 199901L
+# define __ASSERT_FUNC __func__
+
+ /* failed to detect __func__ support. */
+# else
+# define __ASSERT_FUNC ((char *) 0)
+# endif
+# endif /* !__ASSERT_FUNC */
+#endif /* !NDEBUG */
+
+void _EXFUN(__assert, (const char *, int, const char *)
+ _ATTRIBUTE ((__noreturn__)));
+void _EXFUN(__assert_func, (const char *, int, const char *, const char *)
+ _ATTRIBUTE ((__noreturn__)));
#ifdef __cplusplus
}