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).
This commit is contained in:
Nick Clifton 2015-12-21 08:23:35 +00:00 committed by Mike Frysinger
parent 6675033211
commit 13b356b2b5
2 changed files with 7 additions and 1 deletions

View file

@ -1,3 +1,9 @@
2015-12-21 Nick Clifton <nickc@redhat.com>
PR 66827
* regex.c (EXTRACT_NUMBER): Cast sign byte to unsigned before left
shifting.
2015-11-27 Pedro Alves <palves@redhat.com>
PR other/61321

View file

@ -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