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);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to