aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorPaul Eggert2015-11-13 12:39:13 -0800
committerPaul Eggert2015-11-13 12:40:52 -0800
commit92a501022e0154cd9de41240680b7f003a833c96 (patch)
treed4cee238be4fd88bd254ebd9f348971e6b749b78 /lib
parent04ac097f34d887e1ae8dea1e884118728e931c7a (diff)
downloademacs-92a501022e0154cd9de41240680b7f003a833c96.tar.gz
emacs-92a501022e0154cd9de41240680b7f003a833c96.zip
Merge from gnulib
This incorporates: 2015-11-13 xalloc-oversized: improve performance with GCC 5 * lib/xalloc-oversized.h: Copy from gnulib.
Diffstat (limited to 'lib')
-rw-r--r--lib/xalloc-oversized.h13
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/xalloc-oversized.h b/lib/xalloc-oversized.h
index f0e9778f738..0e579deb2bb 100644
--- a/lib/xalloc-oversized.h
+++ b/lib/xalloc-oversized.h
@@ -16,9 +16,13 @@
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17 17
18#ifndef XALLOC_OVERSIZED_H_ 18#ifndef XALLOC_OVERSIZED_H_
19# define XALLOC_OVERSIZED_H_ 19#define XALLOC_OVERSIZED_H_
20 20
21# include <stddef.h> 21#include <stddef.h>
22
23#ifndef __has_builtin
24# define __has_builtin(x) 0
25#endif
22 26
23/* Return 1 if an array of N objects, each of size S, cannot exist due 27/* Return 1 if an array of N objects, each of size S, cannot exist due
24 to size arithmetic overflow. S must be positive and N must be 28 to size arithmetic overflow. S must be positive and N must be
@@ -32,7 +36,12 @@
32 sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for 36 sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for
33 exactly-SIZE_MAX allocations on such hosts; this avoids a test and 37 exactly-SIZE_MAX allocations on such hosts; this avoids a test and
34 branch when S is known to be 1. */ 38 branch when S is known to be 1. */
39#if 5 <= __GNUC__ || __has_builtin (__builtin_mul_overflow)
40# define xalloc_oversized(n, s) \
41 ({ size_t __xalloc_size; __builtin_mul_overflow (n, s, &__xalloc_size); })
42#else
35# define xalloc_oversized(n, s) \ 43# define xalloc_oversized(n, s) \
36 ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n)) 44 ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n))
45#endif
37 46
38#endif /* !XALLOC_OVERSIZED_H_ */ 47#endif /* !XALLOC_OVERSIZED_H_ */