From: Nick Clifton Date: Mon, 21 Dec 2015 08:23:35 +0000 (+0000) Subject: libiberty: fix warnings about left shifting a negative value. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=13b356b2b5c1857490b7911dbbb48e17a3a92b04;p=binutils-gdb.git libiberty: fix warnings about left shifting a negative value. GCC PR 66827 reports some problems with left shifting a negative value: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66827 Of the problems reported only two remain - in libiberty/regex.c: libiberty/regex.c:6970:11: runtime error: left shift of negative value -1 libiberty/regex.c:7165:4: runtime error: left shift of negative value -1 The patch below fixes these errors by casting the value to be shifted to unsigned before the shift occurs. No regressions were found in the libiberty testsuite or bootstrapping gcc (on an x86_64 target). --- diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 3d2ff5923b4..e8fc96acb5b 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,9 @@ +2015-12-21 Nick Clifton + + PR 66827 + * regex.c (EXTRACT_NUMBER): Cast sign byte to unsigned before left + shifting. + 2015-11-27 Pedro Alves PR other/61321 diff --git a/libiberty/regex.c b/libiberty/regex.c index 16338cb206b..9ffc3f47f00 100644 --- a/libiberty/regex.c +++ b/libiberty/regex.c @@ -685,7 +685,7 @@ typedef enum # define EXTRACT_NUMBER(destination, source) \ do { \ (destination) = *(source) & 0377; \ - (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8; \ + (destination) += ((unsigned) SIGN_EXTEND_CHAR (*((source) + 1))) << 8; \ } while (0) # endif