aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarkus Trippelsdorf <markus@trippelsdorf.de>2014-09-30 07:07:55 +0000
committerMarkus Trippelsdorf <trippels@gcc.gnu.org>2014-09-30 07:07:55 +0000
commit4176084b61c55045e4ac47c1b8794292f61b44e1 (patch)
treef7674b307aebc628adf661a398bf3c3a990f9d10 /gcc
parentff5101bf0dd39a12e9d5a40b2bfafee9248307a4 (diff)
downloadgcc-4176084b61c55045e4ac47c1b8794292f61b44e1.zip
gcc-4176084b61c55045e4ac47c1b8794292f61b44e1.tar.gz
gcc-4176084b61c55045e4ac47c1b8794292f61b44e1.tar.bz2
Fix signed integer overflow in data-streamer.c
Running the testsuite with a -fsanitize=undefined instrumented compiler shows: % gcc -O2 -flto -fno-use-linker-plugin -flto-partition=none testsuite/gcc.dg/torture/pr28045.c gcc/data-streamer.c:113:45: runtime error: negation of -9223372036854775808 cannot be represented in type 'long int'; cast to an unsigned type to negate this value to itself The fix is obvious. From-SVN: r215706
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/data-streamer.c2
2 files changed, 6 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1714cec..c5a4a86 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2014-09-30 Markus Trippelsdorf <markus@trippelsdorf.de>
+
+ * data-streamer.c (bp_unpack_var_len_int): Avoid signed
+ integer overflow.
+
2014-09-29 Andi Kleen <ak@linux.intel.com>
* opts.c (print_filtered_help): Print --param min/max/default
diff --git a/gcc/data-streamer.c b/gcc/data-streamer.c
index 0e19c72..785beb5 100644
--- a/gcc/data-streamer.c
+++ b/gcc/data-streamer.c
@@ -110,7 +110,7 @@ bp_unpack_var_len_int (struct bitpack_d *bp)
if ((half_byte & 0x8) == 0)
{
if ((shift < HOST_BITS_PER_WIDE_INT) && (half_byte & 0x4))
- result |= - ((HOST_WIDE_INT)1 << shift);
+ result |= - (HOST_WIDE_INT_1U << shift);
return result;
}