re PR tree-optimization/51760 (ICE in set_lattice_value, at tree-ssa-ccp.c:456)
2012-01-05 Richard Guenther <rguenther@suse.de> PR tree-optimization/51760 * tree-ssa-ccp.c (likely_value): Drop UNDEFINED to CONSTANT, not VARYING. (bit_value_unop): Handle UNDEFINED operands. (bit_value_binop): Likewise. * gcc.dg/torture/pr51760.c: New testcase. From-SVN: r182909
This commit is contained in:
parent
713b8dfb75
commit
6ad024b4c0
@ -1,3 +1,11 @@
|
||||
2012-01-05 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/51760
|
||||
* tree-ssa-ccp.c (likely_value): Drop UNDEFINED to CONSTANT,
|
||||
not VARYING.
|
||||
(bit_value_unop): Handle UNDEFINED operands.
|
||||
(bit_value_binop): Likewise.
|
||||
|
||||
2012-01-05 Georg-Johann Lay <avr@gjlay.de>
|
||||
|
||||
* config/avr/avr.c (avr_replace_prefix): Remove.
|
||||
|
@ -1,3 +1,8 @@
|
||||
2012-01-05 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/51760
|
||||
* gcc.dg/torture/pr51760.c: New testcase.
|
||||
|
||||
2012-01-05 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
PR middle-end/51472
|
||||
|
19
gcc/testsuite/gcc.dg/torture/pr51760.c
Normal file
19
gcc/testsuite/gcc.dg/torture/pr51760.c
Normal file
@ -0,0 +1,19 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
extern inline __attribute__ ((always_inline)) void *
|
||||
memmove (void *dest, const void *src, __SIZE_TYPE__ len)
|
||||
{
|
||||
return __builtin___memmove_chk (dest, src, len,
|
||||
__builtin_object_size (dest, 0));
|
||||
}
|
||||
|
||||
void
|
||||
foo (void)
|
||||
{
|
||||
char a[64], *b;
|
||||
for (;;)
|
||||
{
|
||||
memmove (a, b, 0);
|
||||
b = a;
|
||||
}
|
||||
}
|
@ -657,9 +657,10 @@ likely_value (gimple stmt)
|
||||
}
|
||||
}
|
||||
/* If there was an UNDEFINED operand but the result may be not UNDEFINED
|
||||
fall back to VARYING even if there were CONSTANT operands. */
|
||||
fall back to CONSTANT. During iteration UNDEFINED may still drop
|
||||
to CONSTANT. */
|
||||
if (has_undefined_operand)
|
||||
return VARYING;
|
||||
return CONSTANT;
|
||||
|
||||
/* We do not consider virtual operands here -- load from read-only
|
||||
memory may have only VARYING virtual operands, but still be
|
||||
@ -1368,6 +1369,10 @@ bit_value_unop (enum tree_code code, tree type, tree rhs)
|
||||
prop_value_t rval = get_value_for_expr (rhs, true);
|
||||
double_int value, mask;
|
||||
prop_value_t val;
|
||||
|
||||
if (rval.lattice_val == UNDEFINED)
|
||||
return rval;
|
||||
|
||||
gcc_assert ((rval.lattice_val == CONSTANT
|
||||
&& TREE_CODE (rval.value) == INTEGER_CST)
|
||||
|| double_int_minus_one_p (rval.mask));
|
||||
@ -1399,6 +1404,16 @@ bit_value_binop (enum tree_code code, tree type, tree rhs1, tree rhs2)
|
||||
prop_value_t r2val = get_value_for_expr (rhs2, true);
|
||||
double_int value, mask;
|
||||
prop_value_t val;
|
||||
|
||||
if (r1val.lattice_val == UNDEFINED
|
||||
|| r2val.lattice_val == UNDEFINED)
|
||||
{
|
||||
val.lattice_val = VARYING;
|
||||
val.value = NULL_TREE;
|
||||
val.mask = double_int_minus_one;
|
||||
return val;
|
||||
}
|
||||
|
||||
gcc_assert ((r1val.lattice_val == CONSTANT
|
||||
&& TREE_CODE (r1val.value) == INTEGER_CST)
|
||||
|| double_int_minus_one_p (r1val.mask));
|
||||
|
Loading…
Reference in New Issue
Block a user