Commit d8a50944 by Richard Henderson Committed by Richard Henderson

expr.c (expand_expr): Force overflows into registers.

        * expr.c (expand_expr) [INTEGER_CST]: Force overflows into registers.

	* gcc.c-torture/compile/20020409-1.c: New.

From-SVN: r52104
parent 6a58eee9
2002-04-09 Richard Henderson <rth@redhat.com>
PR c/5078
* expr.c (expand_expr) [INTEGER_CST]: Force overflows into registers.
2002-04-09 Richard Henderson <rth@redhat.com>
* basic-block.h (flow_delete_block_noexpunge): Declare.
(expunge_block_nocompact): Declare.
* cfg.c (expunge_block_nocompact): Split out from ...
......
......@@ -6318,9 +6318,19 @@ expand_expr (exp, target, tmode, modifier)
return DECL_RTL (exp);
case INTEGER_CST:
return immed_double_const (TREE_INT_CST_LOW (exp),
temp = immed_double_const (TREE_INT_CST_LOW (exp),
TREE_INT_CST_HIGH (exp), mode);
/* ??? If overflow is set, fold will have done an incomplete job,
which can result in (plus xx (const_int 0)), which can get
simplified by validate_replace_rtx during virtual register
instantiation, which can result in unrecognizable insns.
Avoid this by forcing all overflows into registers. */
if (TREE_CONSTANT_OVERFLOW (exp))
temp = force_reg (mode, temp);
return temp;
case CONST_DECL:
return expand_expr (DECL_INITIAL (exp), target, VOIDmode, 0);
......
/* PR c/5078 */
#include <limits.h>
int f(int i)
{
i -= 2 * (INT_MAX + 1);
return i;
}
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