From 55168f5fa7b3b95fbaa2be525b15f6ecd5500c02 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Fri, 18 Dec 2020 13:10:27 +0100 Subject: [PATCH] intprops: Avoid potentially buggy __builtin_add_overflow in GCC 5, 6. Reported by Stefan Liebler in . * lib/intprops.h (_GL_HAS_BUILTIN_ADD_OVERFLOW): Don't define for GCC 5.x and 6.x. * lib/glob.c (size_add_wrapv): Don't use __builtin_add_overflow for GCC 5.x and 6.x. --- ChangeLog | 10 ++++++++++ lib/glob.c | 2 +- lib/intprops.h | 4 +++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2c6fae9103..ae62fd7792 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2020-12-18 Bruno Haible + + intprops: Avoid potentially buggy __builtin_add_overflow in GCC 5, 6. + Reported by Stefan Liebler in + . + * lib/intprops.h (_GL_HAS_BUILTIN_ADD_OVERFLOW): Don't define for + GCC 5.x and 6.x. + * lib/glob.c (size_add_wrapv): Don't use __builtin_add_overflow for + GCC 5.x and 6.x. + 2020-12-17 Bruno Haible free: Fix warning. diff --git a/lib/glob.c b/lib/glob.c index 32e2e115ab..3c444d3b13 100644 --- a/lib/glob.c +++ b/lib/glob.c @@ -227,7 +227,7 @@ glob_lstat (glob_t *pglob, int flags, const char *fullname) static bool size_add_wrapv (size_t a, size_t b, size_t *r) { -#if 5 <= __GNUC__ && !defined __ICC +#if 7 <= __GNUC__ && !defined __ICC return __builtin_add_overflow (a, b, r); #else *r = a + b; diff --git a/lib/intprops.h b/lib/intprops.h index 8cc8138f90..2472962e67 100644 --- a/lib/intprops.h +++ b/lib/intprops.h @@ -226,7 +226,9 @@ /* True if __builtin_add_overflow (A, B, P) and __builtin_sub_overflow (A, B, P) work when P is non-null. */ -#if 5 <= __GNUC__ && !defined __ICC +/* __builtin_{add,sub}_overflow exists but is not reliable in GCC 5.x and 6.x, + see . */ +#if 7 <= __GNUC__ && !defined __ICC # define _GL_HAS_BUILTIN_ADD_OVERFLOW 1 #elif defined __has_builtin # define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow) -- 2.39.5