Commit e507a433 by Marek Polacek Committed by Marek Polacek

re PR middle-end/61903 (signed integer overflow in expmed.c store_fixed_bit_filed_1)

	PR middle-end/61903
	* expmed.c (store_fixed_bit_field_1): Shift UHWI 1 instead of HWI 1.
	Change the type of V to unsigned HOST_WIDE_INT.

From-SVN: r214781
parent e3ef4162
2014-09-01 Marek Polacek <polacek@redhat.com>
PR middle-end/61903
* expmed.c (store_fixed_bit_field_1): Shift UHWI 1 instead of HWI 1.
Change the type of V to unsigned HOST_WIDE_INT.
2014-09-01 Thomas Preud'homme <thomas.preudhomme@arm.com> 2014-09-01 Thomas Preud'homme <thomas.preudhomme@arm.com>
* tree-ssa-math-opts.c (struct symbolic_number): Clarify comment about * tree-ssa-math-opts.c (struct symbolic_number): Clarify comment about
...@@ -1057,16 +1057,17 @@ store_fixed_bit_field_1 (rtx op0, unsigned HOST_WIDE_INT bitsize, ...@@ -1057,16 +1057,17 @@ store_fixed_bit_field_1 (rtx op0, unsigned HOST_WIDE_INT bitsize,
if (CONST_INT_P (value)) if (CONST_INT_P (value))
{ {
HOST_WIDE_INT v = INTVAL (value); unsigned HOST_WIDE_INT v = UINTVAL (value);
if (bitsize < HOST_BITS_PER_WIDE_INT) if (bitsize < HOST_BITS_PER_WIDE_INT)
v &= ((HOST_WIDE_INT) 1 << bitsize) - 1; v &= ((unsigned HOST_WIDE_INT) 1 << bitsize) - 1;
if (v == 0) if (v == 0)
all_zero = 1; all_zero = 1;
else if ((bitsize < HOST_BITS_PER_WIDE_INT else if ((bitsize < HOST_BITS_PER_WIDE_INT
&& v == ((HOST_WIDE_INT) 1 << bitsize) - 1) && v == ((unsigned HOST_WIDE_INT) 1 << bitsize) - 1)
|| (bitsize == HOST_BITS_PER_WIDE_INT && v == -1)) || (bitsize == HOST_BITS_PER_WIDE_INT
&& v == (unsigned HOST_WIDE_INT) -1))
all_one = 1; all_one = 1;
value = lshift_value (mode, v, bitnum); value = lshift_value (mode, v, bitnum);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment