diff options
| author | John Wiegley | 2015-11-13 14:41:41 -0800 |
|---|---|---|
| committer | John Wiegley | 2015-11-13 14:41:41 -0800 |
| commit | 4d71d2471aaf341791fd728287bf8db62aebb3ba (patch) | |
| tree | 58f251903d68b3b10c41edb03df9e9b72480c1b9 /lib | |
| parent | 51644c33d2e046b681646e2e07a636ba2fb234dc (diff) | |
| parent | 92a501022e0154cd9de41240680b7f003a833c96 (diff) | |
| download | emacs-4d71d2471aaf341791fd728287bf8db62aebb3ba.tar.gz emacs-4d71d2471aaf341791fd728287bf8db62aebb3ba.zip | |
Merge remote-tracking branch 'origin/master' into emacs-25
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/xalloc-oversized.h | 13 |
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_ */ |