svn commit: r328973 - in stable/11: include sys/sys
Hans Petter Selasky
hselasky at FreeBSD.org
Wed Feb 7 15:06:55 UTC 2018
Author: hselasky
Date: Wed Feb 7 15:06:54 2018
New Revision: 328973
URL: https://svnweb.freebsd.org/changeset/base/328973
Log:
MFC r328237:
Use the __alloc_size2 attribute where relevant.
This follows the documented use in GCC. It is basically only relevant for
calloc(3), reallocarray(3) and mallocarray(9).
NOTE: Without this change clang 5.0.1 can produce incorrect optimisation
code for static processing of data using the allocated object. For example
this has been seen compiling the mlx4 core module, which allocates a
fixed size array which is then sorted by a fixed order loop. The
optimised result, -O2, is incorrect unless this patch is in place.
Suggested by: Mark Millard
Reference: https://docs.freebsd.org/cgi/mid.cgi?9DE674C6-EAA3-4E8A-906F-446E74D82FC4
Modified:
stable/11/include/stdlib.h
stable/11/sys/sys/malloc.h
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/include/stdlib.h
==============================================================================
--- stable/11/include/stdlib.h Wed Feb 7 14:50:06 2018 (r328972)
+++ stable/11/include/stdlib.h Wed Feb 7 15:06:54 2018 (r328973)
@@ -90,7 +90,7 @@ long atol(const char *);
void *bsearch(const void *, const void *, size_t,
size_t, int (*)(const void * _Nonnull, const void *));
void *calloc(size_t, size_t) __malloc_like __result_use_check
- __alloc_size(1) __alloc_size(2);
+ __alloc_size2(1, 2);
div_t div(int, int) __pure2;
_Noreturn void exit(int);
void free(void *);
@@ -307,8 +307,8 @@ void qsort_r(void *, size_t, size_t, void *,
int (*)(void *, const void *, const void *));
int radixsort(const unsigned char **, int, const unsigned char *,
unsigned);
-void *reallocarray(void *, size_t, size_t) __result_use_check __alloc_size(2)
- __alloc_size(3);
+void *reallocarray(void *, size_t, size_t) __result_use_check
+ __alloc_size2(2, 3);
void *reallocf(void *, size_t) __result_use_check __alloc_size(2);
int rpmatch(const char *);
void setprogname(const char *);
Modified: stable/11/sys/sys/malloc.h
==============================================================================
--- stable/11/sys/sys/malloc.h Wed Feb 7 14:50:06 2018 (r328972)
+++ stable/11/sys/sys/malloc.h Wed Feb 7 15:06:54 2018 (r328973)
@@ -178,7 +178,7 @@ void *malloc(unsigned long size, struct malloc_type *t
__malloc_like __result_use_check __alloc_size(1);
void *mallocarray(size_t nmemb, size_t size, struct malloc_type *type,
int flags) __malloc_like __result_use_check
- __alloc_size(1) __alloc_size(2);
+ __alloc_size2(1, 2);
void malloc_init(void *);
int malloc_last_fail(void);
void malloc_type_allocated(struct malloc_type *type, unsigned long size);
More information about the svn-src-stable
mailing list