Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/newlib
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2007-06-27 16:44:41 +0400
committerEric Blake <eblake@redhat.com>2007-06-27 16:44:41 +0400
commit3473e6bd7b268deb4314659009512d846a75b368 (patch)
tree6ad0d0da98788ea8cab097e3ff0f908233da5161 /newlib
parent26e8e4befff225f93ed71f0f3182647cea975ecc (diff)
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.
Diffstat (limited to 'newlib')
-rw-r--r--newlib/ChangeLog14
-rw-r--r--newlib/libc/include/assert.h35
-rw-r--r--newlib/libc/stdlib/assert.c32
3 files changed, 57 insertions, 24 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index 39bd297ea..7822a6edf 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -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>
* 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>
* 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.
2007-06-15 Patrick Mansfield <patmans@us.ibm.com>
@@ -23,7 +31,7 @@
2007-06-13 Patrick Mansfield <patmans@us.ibm.com>
* 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.in: Regenerate.
@@ -77,7 +85,7 @@
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.
2007-06-04 Eric Blake <ebb9@byu.net>
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
}
diff --git a/newlib/libc/stdlib/assert.c b/newlib/libc/stdlib/assert.c
index c9887da5c..2da329815 100644
--- a/newlib/libc/stdlib/assert.c
+++ b/newlib/libc/stdlib/assert.c
@@ -9,11 +9,6 @@ ANSI_SYNOPSIS
#include <assert.h>
void assert(int <[expression]>);
-TRAD_SYNOPSIS
- #include <assert.h>
- assert(<[expression]>)
- int <[expression]>;
-
DESCRIPTION
Use this macro to embed debuggging diagnostic statements in
your programs. The argument <[expression]> should be an
@@ -24,7 +19,11 @@ DESCRIPTION
calls <<abort>>, after first printing a message showing what
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
<<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 <stdio.h>
+/* func can be NULL, in which case no function information is given. */
void
-_DEFUN (__assert, (file, line, failedexpr),
+_DEFUN (__assert_func, (file, line, func, failedexpr),
const char *file _AND
int line _AND
+ const char *func _AND
const char *failedexpr)
{
- (void)fiprintf(stderr,
- "assertion \"%s\" failed: file \"%s\", line %d\n",
- failedexpr, file, line);
+ fiprintf(stderr,
+ "assertion \"%s\" failed: file \"%s\", line %d%s%s\n",
+ failedexpr, file, line,
+ func ? ", function: " : "", func ? func : "");
abort();
/* NOTREACHED */
}
+
+void
+_DEFUN (__assert, (file, line, failedexpr),
+ const char *file _AND
+ int line _AND
+ const char *failedexpr)
+{
+ __assert_func (file, line, NULL, failedexpr);
+ /* NOTREACHED */
+}