From 4176084b61c55045e4ac47c1b8794292f61b44e1 Mon Sep 17 00:00:00 2001 From: Markus Trippelsdorf Date: Tue, 30 Sep 2014 07:07:55 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/data-streamer.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1714cec1844..c5a4a86d5c6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-09-30 Markus Trippelsdorf + + * data-streamer.c (bp_unpack_var_len_int): Avoid signed + integer overflow. + 2014-09-29 Andi Kleen * opts.c (print_filtered_help): Print --param min/max/default diff --git a/gcc/data-streamer.c b/gcc/data-streamer.c index 0e19c72162a..785beb5165f 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; } -- 2.30.2