aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2019-06-10 09:42:22 +0200
committerMartin Liska <marxin@gcc.gnu.org>2019-06-10 07:42:22 +0000
commit3bb0dcb6c02661bed2f8dd00052145fde3bbdecc (patch)
tree3bc1bb2c9b037c135bc71c7e925f270cf1325ad6
parent74ac8f1fe98b5126b291b2693e25d99b52f68c58 (diff)
downloadgcc-3bb0dcb6c02661bed2f8dd00052145fde3bbdecc.zip
gcc-3bb0dcb6c02661bed2f8dd00052145fde3bbdecc.tar.gz
gcc-3bb0dcb6c02661bed2f8dd00052145fde3bbdecc.tar.bz2
Add alloc_size for libiberty memory allocation functions.
2019-06-10 Martin Liska <mliska@suse.cz> * ansidecl.h: (ATTRIBUTE_RESULT_SIZE_1): Define new macro. (ATTRIBUTE_RESULT_SIZE_2): Likewise. (ATTRIBUTE_RESULT_SIZE_1_2): Likewise. * libiberty.h (xmalloc): Add RESULT_SIZE attribute. (xrealloc): Likewise. (xcalloc): Likewise. From-SVN: r272109
-rw-r--r--include/ChangeLog10
-rw-r--r--include/ansidecl.h25
-rw-r--r--include/libiberty.h6
3 files changed, 38 insertions, 3 deletions
diff --git a/include/ChangeLog b/include/ChangeLog
index fe77f86..ad38342 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,13 @@
+2019-06-10 Martin Liska <mliska@suse.cz>
+
+ * ansidecl.h:
+ (ATTRIBUTE_RESULT_SIZE_1): Define new macro.
+ (ATTRIBUTE_RESULT_SIZE_2): Likewise.
+ (ATTRIBUTE_RESULT_SIZE_1_2): Likewise.
+ * libiberty.h (xmalloc): Add RESULT_SIZE attribute.
+ (xrealloc): Likewise.
+ (xcalloc): Likewise.
+
2019-04-26 Michael Forney <mforney@mforney.org>
* libiberty.h (vasprintf): Don't declare if HAVE_DECL_VASPRINTF
diff --git a/include/ansidecl.h b/include/ansidecl.h
index 0395c4d..3035c33 100644
--- a/include/ansidecl.h
+++ b/include/ansidecl.h
@@ -292,6 +292,31 @@ So instead we use the macro below and test it against specific values. */
# endif
#endif
+/* Attribute `alloc_size' was valid as of gcc 4.3. */
+#ifndef ATTRIBUTE_RESULT_SIZE_1
+# if (GCC_VERSION >= 4003)
+# define ATTRIBUTE_RESULT_SIZE_1 __attribute__ ((alloc_size (1)))
+# else
+# define ATTRIBUTE_RESULT_SIZE_1
+#endif
+#endif
+
+#ifndef ATTRIBUTE_RESULT_SIZE_2
+# if (GCC_VERSION >= 4003)
+# define ATTRIBUTE_RESULT_SIZE_2 __attribute__ ((alloc_size (2)))
+# else
+# define ATTRIBUTE_RESULT_SIZE_2
+#endif
+#endif
+
+#ifndef ATTRIBUTE_RESULT_SIZE_1_2
+# if (GCC_VERSION >= 4003)
+# define ATTRIBUTE_RESULT_SIZE_1_2 __attribute__ ((alloc_size (1, 2)))
+# else
+# define ATTRIBUTE_RESULT_SIZE_1_2
+#endif
+#endif
+
/* We use __extension__ in some places to suppress -pedantic warnings
about GCC extensions. This feature didn't work properly before
gcc 2.8. */
diff --git a/include/libiberty.h b/include/libiberty.h
index e11aa97..0870163 100644
--- a/include/libiberty.h
+++ b/include/libiberty.h
@@ -310,18 +310,18 @@ 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 ATTRIBUTE_RETURNS_NONNULL;
+extern void *xmalloc (size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_RESULT_SIZE_1;
/* 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) ATTRIBUTE_RETURNS_NONNULL;
+extern void *xrealloc (void *, size_t) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_RESULT_SIZE_2;
/* Allocate memory without fail and set it to zero. This works like
xmalloc. */
-extern void *xcalloc (size_t, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
+extern void *xcalloc (size_t, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_RESULT_SIZE_1_2;
/* Copy a string into a memory buffer without fail. */