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
This commit is contained in:
parent
6a58eee93d
commit
d8a50944dc
|
@ -1,3 +1,8 @@
|
||||||
|
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>
|
2002-04-09 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
* basic-block.h (flow_delete_block_noexpunge): Declare.
|
* basic-block.h (flow_delete_block_noexpunge): Declare.
|
||||||
|
|
12
gcc/expr.c
12
gcc/expr.c
|
@ -6318,9 +6318,19 @@ expand_expr (exp, target, tmode, modifier)
|
||||||
return DECL_RTL (exp);
|
return DECL_RTL (exp);
|
||||||
|
|
||||||
case INTEGER_CST:
|
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);
|
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:
|
case CONST_DECL:
|
||||||
return expand_expr (DECL_INITIAL (exp), target, VOIDmode, 0);
|
return expand_expr (DECL_INITIAL (exp), target, VOIDmode, 0);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
/* PR c/5078 */
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
int f(int i)
|
||||||
|
{
|
||||||
|
i -= 2 * (INT_MAX + 1);
|
||||||
|
return i;
|
||||||
|
}
|
Loading…
Reference in New Issue