Support __func__ in assert, as required by C99.
* libc/stdlib/assert.c (__assert_func): New function. (__assert): Use __assert_func. * libc/include/assert.h (assert) [!NDEBUG]: Use __assert_func when possible.
This commit is contained in:
parent
26e8e4beff
commit
3473e6bd7b
|
@ -1,3 +1,11 @@
|
||||||
|
2007-06-27 Eric Blake <ebb9@byu.net>
|
||||||
|
|
||||||
|
Support __func__ in assert, as required by C99.
|
||||||
|
* libc/stdlib/assert.c (__assert_func): New function.
|
||||||
|
(__assert): Use __assert_func.
|
||||||
|
* libc/include/assert.h (assert) [!NDEBUG]: Use __assert_func when
|
||||||
|
possible.
|
||||||
|
|
||||||
2007-06-20 Patrick Mansfield <patmans@us.ibm.com>
|
2007-06-20 Patrick Mansfield <patmans@us.ibm.com>
|
||||||
|
|
||||||
* libc/machine/spu/perror.c: Pass errno as the second argument to
|
* libc/machine/spu/perror.c: Pass errno as the second argument to
|
||||||
|
@ -11,7 +19,7 @@
|
||||||
2007-06-20 Patrick Mansfield <patmans@us.ibm.com>
|
2007-06-20 Patrick Mansfield <patmans@us.ibm.com>
|
||||||
|
|
||||||
* libc/include/sys/unistd.h[__SPU__]: Make fchdir prototype visible.
|
* libc/include/sys/unistd.h[__SPU__]: Make fchdir prototype visible.
|
||||||
* libc/include/sys/stat.h[__SPU__]: Make mknod and lstat prototypes
|
* libc/include/sys/stat.h[__SPU__]: Make mknod and lstat prototypes
|
||||||
visible.
|
visible.
|
||||||
|
|
||||||
2007-06-15 Patrick Mansfield <patmans@us.ibm.com>
|
2007-06-15 Patrick Mansfield <patmans@us.ibm.com>
|
||||||
|
@ -23,7 +31,7 @@
|
||||||
2007-06-13 Patrick Mansfield <patmans@us.ibm.com>
|
2007-06-13 Patrick Mansfield <patmans@us.ibm.com>
|
||||||
|
|
||||||
* libc/machine/spu/creat.c: New file copied from libc/posix/creat.c,
|
* libc/machine/spu/creat.c: New file copied from libc/posix/creat.c,
|
||||||
it just calls open with appropriate arguments.
|
it just calls open with appropriate arguments.
|
||||||
* libc/machine/spu/Makefile.am: Add creat.c.
|
* libc/machine/spu/Makefile.am: Add creat.c.
|
||||||
* libc/machine/spu/Makefile.in: Regenerate.
|
* libc/machine/spu/Makefile.in: Regenerate.
|
||||||
|
|
||||||
|
@ -77,7 +85,7 @@
|
||||||
|
|
||||||
2007-06-05 Christian Groessler <chris@groessler.org>
|
2007-06-05 Christian Groessler <chris@groessler.org>
|
||||||
|
|
||||||
* libc/argz/argz_insert.c (argz_insert): Move delta variable
|
* libc/argz/argz_insert.c (argz_insert): Move delta variable
|
||||||
declaration to top of function in keeping with C89 standard.
|
declaration to top of function in keeping with C89 standard.
|
||||||
|
|
||||||
2007-06-04 Eric Blake <ebb9@byu.net>
|
2007-06-04 Eric Blake <ebb9@byu.net>
|
||||||
|
|
|
@ -11,18 +11,31 @@ extern "C" {
|
||||||
#undef assert
|
#undef assert
|
||||||
|
|
||||||
#ifdef NDEBUG /* required by ANSI standard */
|
#ifdef NDEBUG /* required by ANSI standard */
|
||||||
#define assert(p) ((void)0)
|
# define assert(__e) ((void)0)
|
||||||
#else
|
#else
|
||||||
|
# define assert(__e) ((__e) ? (void)0 : __assert_func (__FILE__, __LINE__, \
|
||||||
|
__ASSERT_FUNC, #__e))
|
||||||
|
|
||||||
#ifdef __STDC__
|
# ifndef __ASSERT_FUNC
|
||||||
#define assert(e) ((e) ? (void)0 : __assert(__FILE__, __LINE__, #e))
|
/* Use g++'s demangled names in C++. */
|
||||||
#else /* PCC */
|
# if defined __cplusplus && defined __GNUC__
|
||||||
#define assert(e) ((e) ? (void)0 : __assert(__FILE__, __LINE__, "e"))
|
# define __ASSERT_FUNC __PRETTY_FUNCTION__
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* NDEBUG */
|
/* C99 requires the use of __func__, gcc also supports it. */
|
||||||
|
# elif defined __GNUC__ || __STDC_VERSION__ >= 199901L
|
||||||
|
# define __ASSERT_FUNC __func__
|
||||||
|
|
||||||
void _EXFUN(__assert,(const char *, int, const char *));
|
/* 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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,11 +9,6 @@ ANSI_SYNOPSIS
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
void assert(int <[expression]>);
|
void assert(int <[expression]>);
|
||||||
|
|
||||||
TRAD_SYNOPSIS
|
|
||||||
#include <assert.h>
|
|
||||||
assert(<[expression]>)
|
|
||||||
int <[expression]>;
|
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
Use this macro to embed debuggging diagnostic statements in
|
Use this macro to embed debuggging diagnostic statements in
|
||||||
your programs. The argument <[expression]> should be an
|
your programs. The argument <[expression]> should be an
|
||||||
|
@ -24,7 +19,11 @@ DESCRIPTION
|
||||||
calls <<abort>>, after first printing a message showing what
|
calls <<abort>>, after first printing a message showing what
|
||||||
failed and where:
|
failed and where:
|
||||||
|
|
||||||
. Assertion failed: <[expression]>, file <[filename]>, line <[lineno]>
|
. Assertion failed: <[expression]>, file <[filename]>, line <[lineno]>, function: <[func]>
|
||||||
|
|
||||||
|
If the name of the current function is not known (for example,
|
||||||
|
when using a C89 compiler that does not understand __func__),
|
||||||
|
the function location is omitted.
|
||||||
|
|
||||||
The macro is defined to permit you to turn off all uses of
|
The macro is defined to permit you to turn off all uses of
|
||||||
<<assert>> at compile time by defining <<NDEBUG>> as a
|
<<assert>> at compile time by defining <<NDEBUG>> as a
|
||||||
|
@ -48,15 +47,28 @@ Supporting OS subroutines required (only if enabled): <<close>>, <<fstat>>,
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/* func can be NULL, in which case no function information is given. */
|
||||||
|
void
|
||||||
|
_DEFUN (__assert_func, (file, line, func, failedexpr),
|
||||||
|
const char *file _AND
|
||||||
|
int line _AND
|
||||||
|
const char *func _AND
|
||||||
|
const char *failedexpr)
|
||||||
|
{
|
||||||
|
fiprintf(stderr,
|
||||||
|
"assertion \"%s\" failed: file \"%s\", line %d%s%s\n",
|
||||||
|
failedexpr, file, line,
|
||||||
|
func ? ", function: " : "", func ? func : "");
|
||||||
|
abort();
|
||||||
|
/* NOTREACHED */
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_DEFUN (__assert, (file, line, failedexpr),
|
_DEFUN (__assert, (file, line, failedexpr),
|
||||||
const char *file _AND
|
const char *file _AND
|
||||||
int line _AND
|
int line _AND
|
||||||
const char *failedexpr)
|
const char *failedexpr)
|
||||||
{
|
{
|
||||||
(void)fiprintf(stderr,
|
__assert_func (file, line, NULL, failedexpr);
|
||||||
"assertion \"%s\" failed: file \"%s\", line %d\n",
|
|
||||||
failedexpr, file, line);
|
|
||||||
abort();
|
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue