From 689a1abf0dba1f5353039a5625411c6c41098d3a Mon Sep 17 00:00:00 2001 From: glisse Date: Tue, 29 Oct 2013 13:15:48 +0000 Subject: [PATCH] 2013-10-29 Marc Glisse PR tree-optimization/58689 include/ * ansidecl.h (ATTRIBUTE_RETURNS_NONNULL): New macro. * libiberty.h (basename, lbasename, dos_lbasename, unix_lbasename, concat_copy): Mark with attributes nonnull(1) and returns_nonnull. (concat, reconcat, concat_copy2, choose_temp_base, xstrerror, xmalloc, xrealloc, xcalloc, xstrdup, xstrndup, xmemdup, pex_init): Mark with attribute returns_nonnull. libiberty/ * concat.c: Remove note about xmalloc. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@204159 138bc75d-0d04-0410-961f-82ee72b054a4 --- include/ChangeLog | 10 ++++++++++ include/ansidecl.h | 9 +++++++++ include/libiberty.h | 34 +++++++++++++++++----------------- libiberty/ChangeLog | 5 +++++ libiberty/concat.c | 16 ++-------------- 5 files changed, 43 insertions(+), 31 deletions(-) diff --git a/include/ChangeLog b/include/ChangeLog index 6442c09f25..9008da1acf 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,13 @@ +2013-10-29 Marc Glisse + + PR tree-optimization/58689 + * ansidecl.h (ATTRIBUTE_RETURNS_NONNULL): New macro. + * libiberty.h (basename, lbasename, dos_lbasename, unix_lbasename, + concat_copy): Mark with attributes nonnull(1) and returns_nonnull. + (concat, reconcat, concat_copy2, choose_temp_base, xstrerror, + xmalloc, xrealloc, xcalloc, xstrdup, xstrndup, xmemdup, pex_init): + Mark with attribute returns_nonnull. + 2013-10-22 Sterling Augustine * gdb/gdb-index.h: Merge from gdb tree. diff --git a/include/ansidecl.h b/include/ansidecl.h index 40f4a5fea4..5cd03a7d76 100644 --- a/include/ansidecl.h +++ b/include/ansidecl.h @@ -311,6 +311,15 @@ So instead we use the macro below and test it against specific values. */ # endif /* GNUC >= 3.3 */ #endif /* ATTRIBUTE_NONNULL */ +/* Attribute `returns_nonnull' was valid as of gcc 4.9. */ +#ifndef ATTRIBUTE_RETURNS_NONNULL +# if (GCC_VERSION >= 4009) +# define ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__)) +# else +# define ATTRIBUTE_RETURNS_NONNULL +# endif /* GNUC >= 4.9 */ +#endif /* ATTRIBUTE_RETURNS_NONNULL */ + /* Attribute `pure' was valid as of gcc 3.0. */ #ifndef ATTRIBUTE_PURE # if (GCC_VERSION >= 3000) diff --git a/include/libiberty.h b/include/libiberty.h index cacde800ea..f2cf573d1b 100644 --- a/include/libiberty.h +++ b/include/libiberty.h @@ -107,7 +107,7 @@ extern int countargv (char**); is 1, we found it so don't provide any declaration at all. */ #if !HAVE_DECL_BASENAME #if defined (__GNU_LIBRARY__ ) || defined (__linux__) || defined (__FreeBSD__) || defined (__OpenBSD__) || defined(__NetBSD__) || defined (__CYGWIN__) || defined (__CYGWIN32__) || defined (__MINGW32__) || defined (HAVE_DECL_BASENAME) -extern char *basename (const char *); +extern char *basename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1); #else /* Do not allow basename to be used if there is no prototype seen. We either need to use the above prototype or have one from @@ -118,18 +118,18 @@ extern char *basename (const char *); /* A well-defined basename () that is always compiled in. */ -extern const char *lbasename (const char *); +extern const char *lbasename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1); /* Same, but assumes DOS semantics (drive name, backslash is also a dir separator) regardless of host. */ -extern const char *dos_lbasename (const char *); +extern const char *dos_lbasename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1); /* Same, but assumes Unix semantics (absolute paths always start with a slash, only forward slash is accepted as dir separator) regardless of host. */ -extern const char *unix_lbasename (const char *); +extern const char *unix_lbasename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1); /* A well-defined realpath () that is always compiled in. */ @@ -139,7 +139,7 @@ extern char *lrealpath (const char *); the last argument of this function, to terminate the list of strings. Allocates memory using xmalloc. */ -extern char *concat (const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_SENTINEL; +extern char *concat (const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_SENTINEL; /* Concatenate an arbitrary number of strings. You must pass NULL as the last argument of this function, to terminate the list of @@ -148,7 +148,7 @@ extern char *concat (const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_SENTINEL; pointer to be freed after the new string is created, similar to the way xrealloc works. */ -extern char *reconcat (char *, const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_SENTINEL; +extern char *reconcat (char *, const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_SENTINEL; /* Determine the length of concatenating an arbitrary number of strings. You must pass NULL as the last argument of this function, @@ -161,14 +161,14 @@ extern unsigned long concat_length (const char *, ...) ATTRIBUTE_SENTINEL; to terminate the list of strings. The supplied memory is assumed to be large enough. */ -extern char *concat_copy (char *, const char *, ...) ATTRIBUTE_SENTINEL; +extern char *concat_copy (char *, const char *, ...) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1) ATTRIBUTE_SENTINEL; /* Concatenate an arbitrary number of strings into a GLOBAL area of memory. You must pass NULL as the last argument of this function, to terminate the list of strings. The supplied memory is assumed to be large enough. */ -extern char *concat_copy2 (const char *, ...) ATTRIBUTE_SENTINEL; +extern char *concat_copy2 (const char *, ...) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_SENTINEL; /* This is the global area used by concat_copy2. */ @@ -226,7 +226,7 @@ extern char *make_relative_prefix_ignore_links (const char *, const char *, /* Choose a temporary directory to use for scratch files. */ -extern char *choose_temp_base (void) ATTRIBUTE_MALLOC; +extern char *choose_temp_base (void) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL; /* Return a temporary file name or NULL if unable to create one. */ @@ -256,7 +256,7 @@ extern int strtoerrno (const char *); /* ANSI's strerror(), but more robust. */ -extern char *xstrerror (int); +extern char *xstrerror (int) ATTRIBUTE_RETURNS_NONNULL; /* Return the maximum signal number for which strsignal will return a string. */ @@ -298,30 +298,30 @@ extern void xmalloc_failed (size_t) ATTRIBUTE_NORETURN; message to stderr (using the name set by xmalloc_set_program_name, if any) and then call xexit. */ -extern void *xmalloc (size_t) ATTRIBUTE_MALLOC; +extern void *xmalloc (size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL; /* Reallocate memory without fail. This works like xmalloc. Note, realloc type functions are not suitable for attribute malloc since they may return the same address across multiple calls. */ -extern void *xrealloc (void *, size_t); +extern void *xrealloc (void *, size_t) ATTRIBUTE_RETURNS_NONNULL; /* Allocate memory without fail and set it to zero. This works like xmalloc. */ -extern void *xcalloc (size_t, size_t) ATTRIBUTE_MALLOC; +extern void *xcalloc (size_t, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL; /* Copy a string into a memory buffer without fail. */ -extern char *xstrdup (const char *) ATTRIBUTE_MALLOC; +extern char *xstrdup (const char *) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL; /* Copy at most N characters from string into a buffer without fail. */ -extern char *xstrndup (const char *, size_t) ATTRIBUTE_MALLOC; +extern char *xstrndup (const char *, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL; /* Copy an existing memory buffer to a new memory buffer without fail. */ -extern void *xmemdup (const void *, size_t, size_t) ATTRIBUTE_MALLOC; +extern void *xmemdup (const void *, size_t, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL; /* Physical memory routines. Return values are in BYTES. */ extern double physmem_total (void); @@ -399,7 +399,7 @@ extern void hex_init (void); Returns NULL on error. */ extern struct pex_obj *pex_init (int flags, const char *pname, - const char *tempbase); + const char *tempbase) ATTRIBUTE_RETURNS_NONNULL; /* Flags for pex_run. These are bits to be or'ed together. */ diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index f3b7d1faf1..cda181e106 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,8 @@ +2013-10-29 Marc Glisse + + PR tree-optimization/58689 + * concat.c: Remove note about xmalloc. + 2013-10-27 Gerald Pfeifer * testsuite/test-demangle.c: Include unistd.h. diff --git a/libiberty/concat.c b/libiberty/concat.c index 9779d5663b..4144d8305c 100644 --- a/libiberty/concat.c +++ b/libiberty/concat.c @@ -25,23 +25,11 @@ Boston, MA 02110-1301, USA. */ @dots{}, @code{NULL}) Concatenate zero or more of strings and return the result in freshly -@code{xmalloc}ed memory. Returns @code{NULL} if insufficient memory is -available. The argument list is terminated by the first @code{NULL} -pointer encountered. Pointers to empty strings are ignored. +@code{xmalloc}ed memory. The argument list is terminated by the first +@code{NULL} pointer encountered. Pointers to empty strings are ignored. @end deftypefn -NOTES - - This function uses xmalloc() which is expected to be a front end - function to malloc() that deals with low memory situations. In - typical use, if malloc() returns NULL then xmalloc() diverts to an - error handler routine which never returns, and thus xmalloc will - never return a NULL pointer. If the client application wishes to - deal with low memory situations itself, it should supply an xmalloc - that just directly invokes malloc and blindly returns whatever - malloc returns. - */ -- 2.34.1