diff options
Diffstat (limited to 'newlib/libc/include/assert.h')
-rw-r--r-- | newlib/libc/include/assert.h | 35 |
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 } |