Merge from gnulib
This incorporates: 2015-11-13 xalloc-oversized: improve performance with GCC 5 * lib/xalloc-oversized.h: Copy from gnulib.
This commit is contained in:
parent
04ac097f34
commit
92a501022e
1 changed files with 11 additions and 2 deletions
|
@ -16,9 +16,13 @@
|
|||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef XALLOC_OVERSIZED_H_
|
||||
# define XALLOC_OVERSIZED_H_
|
||||
#define XALLOC_OVERSIZED_H_
|
||||
|
||||
# include <stddef.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#ifndef __has_builtin
|
||||
# define __has_builtin(x) 0
|
||||
#endif
|
||||
|
||||
/* Return 1 if an array of N objects, each of size S, cannot exist due
|
||||
to size arithmetic overflow. S must be positive and N must be
|
||||
|
@ -32,7 +36,12 @@
|
|||
sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for
|
||||
exactly-SIZE_MAX allocations on such hosts; this avoids a test and
|
||||
branch when S is known to be 1. */
|
||||
#if 5 <= __GNUC__ || __has_builtin (__builtin_mul_overflow)
|
||||
# define xalloc_oversized(n, s) \
|
||||
({ size_t __xalloc_size; __builtin_mul_overflow (n, s, &__xalloc_size); })
|
||||
#else
|
||||
# define xalloc_oversized(n, s) \
|
||||
((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n))
|
||||
#endif
|
||||
|
||||
#endif /* !XALLOC_OVERSIZED_H_ */
|
||||
|
|
Loading…
Add table
Reference in a new issue