Commit 8ddf04c2 by Jakub Jelinek Committed by Jakub Jelinek

re PR middle-end/46019 (x / (0x200000000ULL << y) miscompilation with 32-bit HWI)

	PR middle-end/46019
	* fold-const.c (fold_binary_loc): If integer_pow2p has
	TREE_INT_CST_LOW zero, look at TREE_INT_CST_HIGH.

	* gcc.c-torture/execute/pr46019.c: New test.

From-SVN: r165610
parent 1d32bbcd
2010-10-18 Jakub Jelinek <jakub@redhat.com>
PR middle-end/46019
* fold-const.c (fold_binary_loc): If integer_pow2p has
TREE_INT_CST_LOW zero, look at TREE_INT_CST_HIGH.
2010-10-18 Basile Starynkevitch <basile@starynkevitch.net> 2010-10-18 Basile Starynkevitch <basile@starynkevitch.net>
Jeremie Salvucci <jeremie.salvucci@free.fr> Jeremie Salvucci <jeremie.salvucci@free.fr>
...@@ -11611,7 +11611,13 @@ fold_binary_loc (location_t loc, ...@@ -11611,7 +11611,13 @@ fold_binary_loc (location_t loc,
if (integer_pow2p (sval) && tree_int_cst_sgn (sval) > 0) if (integer_pow2p (sval) && tree_int_cst_sgn (sval) > 0)
{ {
tree sh_cnt = TREE_OPERAND (arg1, 1); tree sh_cnt = TREE_OPERAND (arg1, 1);
unsigned long pow2 = exact_log2 (TREE_INT_CST_LOW (sval)); unsigned long pow2;
if (TREE_INT_CST_LOW (sval))
pow2 = exact_log2 (TREE_INT_CST_LOW (sval));
else
pow2 = exact_log2 (TREE_INT_CST_HIGH (sval))
+ HOST_BITS_PER_WIDE_INT;
if (strict_overflow_p) if (strict_overflow_p)
fold_overflow_warning (("assuming signed overflow does not " fold_overflow_warning (("assuming signed overflow does not "
......
2010-10-18 Jakub Jelinek <jakub@redhat.com>
PR middle-end/46019
* gcc.c-torture/execute/pr46019.c: New test.
2010-10-17 Nicola Pero <nicola.pero@meta-innovation.com> 2010-10-17 Nicola Pero <nicola.pero@meta-innovation.com>
Merge from 'apple/trunk' branch on FSF servers. Merge from 'apple/trunk' branch on FSF servers.
......
/* PR middle-end/46019 */
extern void abort (void);
int
main (void)
{
unsigned long long l = 0x40000000000ULL;
int n;
for (n = 0; n < 8; n++)
if (l / (0x200000000ULL << n) != (0x200 >> n))
abort ();
return 0;
}
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