re PR tree-optimization/80842 (ICE at -O3 on x86_64-linux-gnu in "set_lattice_value")

2017-05-26  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/80842
	* tree-ssa-ccp.c (set_lattice_value): Always meet with the old
	value.

	* gcc.dg/torture/pr80842.c: New testcase.

From-SVN: r248482
This commit is contained in:
Richard Biener 2017-05-26 07:19:00 +00:00 committed by Richard Biener
parent f408a6350f
commit 28e0e05bad
4 changed files with 35 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2017-05-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/80842
* tree-ssa-ccp.c (set_lattice_value): Always meet with the old
value.
2017-05-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/80844

View File

@ -1,3 +1,8 @@
2017-05-26 Richard Biener <rguenther@suse.de>
PR tree-optimization/80842
* gcc.dg/torture/pr80842.c: New testcase.
2017-05-25 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/79652

View File

@ -0,0 +1,23 @@
/* { dg-do compile } */
unsigned a;
short b;
char c, d, e;
void fn1();
void fn2() {
a++;
for (; a;)
fn1(0, 0);
}
void fn3() {
fn2();
l1:;
unsigned char f;
short g;
unsigned char *h = &f;
g += &h ? e ? g = 1 : 0 : 0;
d = g;
c *f;
if (d & (b %= *h) < f * d / (d -= 0))
goto l1;
}

View File

@ -497,9 +497,7 @@ set_lattice_value (tree var, ccp_prop_value_t *new_val)
use the meet operator to retain a conservative value.
Missed optimizations like PR65851 makes this necessary.
It also ensures we converge to a stable lattice solution. */
if (new_val->lattice_val == CONSTANT
&& old_val->lattice_val == CONSTANT
&& TREE_CODE (new_val->value) != SSA_NAME)
if (old_val->lattice_val != UNINITIALIZED)
ccp_lattice_meet (new_val, old_val);
gcc_checking_assert (valid_lattice_transition (*old_val, *new_val));