aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2015-12-21 08:23:35 +0000
committerMike Frysinger <vapier@gentoo.org>2016-01-05 14:58:34 -0500
commit13b356b2b5c1857490b7911dbbb48e17a3a92b04 (patch)
tree1aa245456afc6f67313e113d3e6729cf3232028f
parent6675033211e145ecd094b6803ed4a3427b3fd21e (diff)
downloadfsf-binutils-gdb-13b356b2b5c1857490b7911dbbb48e17a3a92b04.zip
fsf-binutils-gdb-13b356b2b5c1857490b7911dbbb48e17a3a92b04.tar.gz
fsf-binutils-gdb-13b356b2b5c1857490b7911dbbb48e17a3a92b04.tar.bz2
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).
-rw-r--r--libiberty/ChangeLog6
-rw-r--r--libiberty/regex.c2
2 files changed, 7 insertions, 1 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 3d2ff59..e8fc96a 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -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
diff --git a/libiberty/regex.c b/libiberty/regex.c
index 16338cb..9ffc3f4 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