summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2021-08-11 13:00:57 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2021-08-11 13:01:51 -0700
commit6a3bdcfda683b4f06ff839f14bf9fc4d32188502 (patch)
tree68bbc231f4189bacfcf8ae3098d07fc6cca8c082
parent1221876a7aec2a59c824a9784f5ff24e96f5545b (diff)
downloadgnulib-6a3bdcfda683b4f06ff839f14bf9fc4d32188502.tar.gz
dynarray: merge from glibc
This also helps document glibc’s direction in using GCC’s memory-allocation checking. * lib/cdefs.h: Omit comments that glibc rejected. (__returns_nonnull, __attr_access_none, __attr_dealloc) (__attr_dealloc_free): New macros. * lib/libc-config.h: Undef the new macros that are defined unconditionally. * lib/malloc/dynarray_at_failure.c [_LIBC]: Do not include stdlib.h. (__libc_dynarray_at_failure) [_LIBC]: Call __libc_fatal, fixing a bad merge previously.
-rw-r--r--ChangeLog14
-rw-r--r--lib/cdefs.h33
-rw-r--r--lib/libc-config.h3
-rw-r--r--lib/malloc/dynarray_at_failure.c3
4 files changed, 47 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 8482276384..037fa7da4f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2021-08-11 Paul Eggert <eggert@cs.ucla.edu>
+
+ dynarray: merge from glibc
+ This also helps document glibc’s direction in using GCC’s
+ memory-allocation checking.
+ * lib/cdefs.h: Omit comments that glibc rejected.
+ (__returns_nonnull, __attr_access_none, __attr_dealloc)
+ (__attr_dealloc_free): New macros.
+ * lib/libc-config.h: Undef the new macros that are defined
+ unconditionally.
+ * lib/malloc/dynarray_at_failure.c [_LIBC]: Do not include stdlib.h.
+ (__libc_dynarray_at_failure) [_LIBC]: Call __libc_fatal,
+ fixing a bad merge previously.
+
2021-08-08 Bruno Haible <bruno@clisp.org>
canonicalize-lgpl: Fix conflict with z/OS <sys/stat.h>.
diff --git a/lib/cdefs.h b/lib/cdefs.h
index b883b25666..4dac9d264d 100644
--- a/lib/cdefs.h
+++ b/lib/cdefs.h
@@ -261,10 +261,6 @@
#if __GNUC_PREREQ (2,7) || __glibc_has_attribute (__unused__)
# define __attribute_maybe_unused__ __attribute__ ((__unused__))
-/* Once the next version of the C standard comes out, we can
- do something like the following here:
- #elif defined __STDC_VERSION__ && 202???L <= __STDC_VERSION__
- # define __attribute_maybe_unused__ [[__maybe_unused__]] */
#else
# define __attribute_maybe_unused__ /* Ignore */
#endif
@@ -336,6 +332,16 @@
# define __nonnull(params) __attribute_nonnull__ (params)
#endif
+/* The returns_nonnull function attribute marks the return type of the function
+ as always being non-null. */
+#ifndef __returns_nonnull
+# if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__returns_nonnull__)
+# define __returns_nonnull __attribute__ ((__returns_nonnull__))
+# else
+# define __returns_nonnull
+# endif
+#endif
+
/* If fortification mode, we warn about unused results of certain
function calls which can lead to problems. */
#if __GNUC_PREREQ (3,4) || __glibc_has_attribute (__warn_unused_result__)
@@ -598,9 +604,26 @@ _Static_assert (0, "IEEE 128-bits long double requires redirection on this platf
array according to access mode, or at least one element when
size-index is not provided:
access (access-mode, <ref-index> [, <size-index>]) */
-#define __attr_access(x) __attribute__ ((__access__ x))
+# define __attr_access(x) __attribute__ ((__access__ x))
+# if __GNUC_PREREQ (11, 0)
+# define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno)))
+# else
+# define __attr_access_none(argno)
+# endif
#else
# define __attr_access(x)
+# define __attr_access_none(argno)
+#endif
+
+#if __GNUC_PREREQ (11, 0)
+/* Designates dealloc as a function to call to deallocate objects
+ allocated by the declared function. */
+# define __attr_dealloc(dealloc, argno) \
+ __attribute__ ((__malloc__ (dealloc, argno)))
+# define __attr_dealloc_free __attr_dealloc (__builtin_free, 1)
+#else
+# define __attr_dealloc(dealloc, argno)
+# define __attr_dealloc_free
#endif
/* Specify that a function such as setjmp or vfork may return
diff --git a/lib/libc-config.h b/lib/libc-config.h
index f68749fc74..886c11f37f 100644
--- a/lib/libc-config.h
+++ b/lib/libc-config.h
@@ -117,6 +117,9 @@
# undef __THROW
# undef __THROWNL
# undef __attr_access
+# undef __attr_access_none
+# undef __attr_dealloc
+# undef __attr_dealloc_free
# undef __attribute__
# undef __attribute_alloc_size__
# undef __attribute_artificial__
diff --git a/lib/malloc/dynarray_at_failure.c b/lib/malloc/dynarray_at_failure.c
index 4f840db7c5..8dd6850787 100644
--- a/lib/malloc/dynarray_at_failure.c
+++ b/lib/malloc/dynarray_at_failure.c
@@ -18,11 +18,11 @@
#ifndef _LIBC
# include <libc-config.h>
+# include <stdlib.h>
#endif
#include <dynarray.h>
#include <stdio.h>
-#include <stdlib.h>
void
__libc_dynarray_at_failure (size_t size, size_t index)
@@ -32,6 +32,7 @@ __libc_dynarray_at_failure (size_t size, size_t index)
__snprintf (buf, sizeof (buf), "Fatal glibc error: "
"array index %zu not less than array length %zu\n",
index, size);
+ __libc_fatal (buf);
#else
abort ();
#endif