+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>.
#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
# 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__)
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