Commit 87261d26 by Richard Biener Committed by Richard Biener

re PR middle-end/67442 (GCC 5.2.0 on x86_64 creates invalid address on specific…

re PR middle-end/67442 (GCC 5.2.0 on x86_64 creates invalid address on specific array index calculation through pointer)

2015-09-16  Richard Biener  <rguenther@suse.de>

	PR middle-end/67442
	* fold-const.c (extract_muldiv_1): Properly extend multiplication
	result before builting a tree via wide_int_to_tree.

	* gcc.dg/torture/pr67442.c: New testcase.

From-SVN: r227818
parent fcb87c50
2015-09-16 Richard Biener <rguenther@suse.de>
PR middle-end/67442
* fold-const.c (extract_muldiv_1): Properly extend multiplication
result before builting a tree via wide_int_to_tree.
2015-09-16 Mikhail Maltsev <maltsevm@gmail.com>
* Makefile.in: Add memory-block.cc
......
......@@ -6166,8 +6166,12 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type,
&& ((sign == UNSIGNED && tcode != MULT_EXPR) || sign == SIGNED))
overflow_p = true;
if (!overflow_p)
return fold_build2 (tcode, ctype, fold_convert (ctype, op0),
wide_int_to_tree (ctype, mul));
{
mul = wide_int::from (mul, TYPE_PRECISION (ctype),
TYPE_SIGN (TREE_TYPE (op1)));
return fold_build2 (tcode, ctype, fold_convert (ctype, op0),
wide_int_to_tree (ctype, mul));
}
}
/* If these operations "cancel" each other, we have the main
......
2015-09-16 Richard Biener <rguenther@suse.de>
PR middle-end/67442
* gcc.dg/torture/pr67442.c: New testcase.
2015-09-15 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/array24.adb: New test.
......
/* { dg-do run } */
short foo[100];
int main()
{
short* bar = &foo[50];
short i = 1;
short j = 1;
short value = bar[8 - i * 2 * j];
return value;
}
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