re PR tree-optimization/37327 (another ice in set_value_range, at tree-vrp.c:397)

2008-09-02  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/37327
	* tree-vrp.c (register_new_assert_for): Make sure to not have
	TREE_OVERFLOW set on the bound.

	* gcc.c-torture/compile/pr37327.c: New testcase.

From-SVN: r139890
This commit is contained in:
Richard Guenther 2008-09-02 13:48:11 +00:00 committed by Richard Biener
parent 7ab5df4871
commit a1b969a0d2
4 changed files with 67 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2008-09-02 Richard Guenther <rguenther@suse.de>
PR tree-optimization/37327
* tree-vrp.c (register_new_assert_for): Make sure to not have
TREE_OVERFLOW set on the bound.
2008-09-02 Alexander Monakov <amonakov@ispras.ru>
Fixed typo in date of the 2008-09-01 MOVE_RATIO commit.

View File

@ -1,3 +1,8 @@
2008-09-02 Richard Guenther <rguenther@suse.de>
PR tree-optimization/37327
* gcc.c-torture/compile/pr37327.c: New testcase.
2008-09-02 Victor Kaplansky <victork@il.ibm.com>
* gcc.dg/fastmath-2.c: New.

View File

@ -0,0 +1,48 @@
typedef signed char int8_t;
typedef short int int16_t;
typedef int int32_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
static inline uint32_t
safe_add_int8_t_s_s (int8_t si1, int16_t si2)
{
if ((si1) && (si2) && (si1 > (1 - si2)) || (si1) && (si2 < 0)
&& (si1 < (-128 - si2)))
return si1;
return si1 + si2;
}
uint32_t g_2;
uint32_t g_113;
uint32_t g_145;
int32_t
func_17 (int32_t p_18, uint32_t p_19, uint32_t p_21)
{
uint32_t l_23 = -1L;
return l_23;
}
uint32_t
func_26 (uint16_t p_27)
{
uint32_t l_424;
if (func_93 (func_59 (safe_add_int8_t_s_s (p_27, 1))),
func_124 (l_424, -7L, 1, g_145, 1, (safe_add_int8_t_s_s (1, 1)), 1), 1,
1, 1)
func_117 (1, 1,
(safe_add_uint64_t_u_u
(1, (safe_add_int8_t_s_s (1, 0xCDF4BE7A1B7E4629LL)))), 1);
uint32_t l_210;
if (func_17
((safe_add_int8_t_s_s (g_2, (0x6C79A83AL | func_17 (1, 1, 1)))),
0x4C9FL, 1))
{
uint32_t l_212;
if (safe_mul_int32_t_s_s
((1, 1, l_212, (1, (safe_add_int8_t_s_s (l_210, 1)), 1, 1)), 1))
if (func_59 (1, (safe_add_int8_t_s_s (g_113, 1))))
{
}
}
}

View File

@ -3785,6 +3785,14 @@ register_new_assert_for (tree name, tree expr,
&& gimple_code (gsi_stmt (si)) != GIMPLE_SWITCH);
#endif
/* Never build an assert comparing against an integer constant with
TREE_OVERFLOW set. This confuses our undefined overflow warning
machinery. */
if (TREE_CODE (val) == INTEGER_CST
&& TREE_OVERFLOW (val))
val = build_int_cst_wide (TREE_TYPE (val),
TREE_INT_CST_LOW (val), TREE_INT_CST_HIGH (val));
/* The new assertion A will be inserted at BB or E. We need to
determine if the new location is dominated by a previously
registered location for A. If we are doing an edge insertion,