Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 7 Feb 2018 15:06:54 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r328973 - in stable/11: include sys/sys
Message-ID:  <201802071506.w17F6s5l043163@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201802071506.w17F6s5l043163>