re PR tree-optimization/61964 (krb5 database propagation enters infinite loop; reduced test case)
2014-07-31 Richard Biener <rguenther@suse.de> PR tree-optimization/61964 * tree-ssa-tail-merge.c (gimple_equal_p): Handle non-SSA LHS solely by structural equality. * gcc.dg/torture/pr61964.c: New testcase. From-SVN: r213375
This commit is contained in:
parent
5cb7516dca
commit
030e321a73
|
@ -1,3 +1,9 @@
|
||||||
|
2014-07-31 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/61964
|
||||||
|
* tree-ssa-tail-merge.c (gimple_equal_p): Handle non-SSA LHS solely
|
||||||
|
by structural equality.
|
||||||
|
|
||||||
2014-07-31 Yury Gribov <y.gribov@samsung.com>
|
2014-07-31 Yury Gribov <y.gribov@samsung.com>
|
||||||
|
|
||||||
* doc/cpp.texi (__SANITIZE_ADDRESS__): Updated description.
|
* doc/cpp.texi (__SANITIZE_ADDRESS__): Updated description.
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2014-07-31 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/61964
|
||||||
|
* gcc.dg/torture/pr61964.c: New testcase.
|
||||||
|
|
||||||
2014-07-31 Marc Glisse <marc.glisse@inria.fr>
|
2014-07-31 Marc Glisse <marc.glisse@inria.fr>
|
||||||
|
|
||||||
PR c++/60517
|
PR c++/60517
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
/* { dg-do run } */
|
||||||
|
|
||||||
|
extern void abort (void);
|
||||||
|
|
||||||
|
struct node { struct node *next, *prev; } node;
|
||||||
|
struct head { struct node *first; } heads[5];
|
||||||
|
int k = 2;
|
||||||
|
struct head *head = &heads[2];
|
||||||
|
|
||||||
|
static int __attribute__((noinline))
|
||||||
|
foo()
|
||||||
|
{
|
||||||
|
node.prev = (void *)head;
|
||||||
|
head->first = &node;
|
||||||
|
|
||||||
|
struct node *n = head->first;
|
||||||
|
struct head *h = &heads[k];
|
||||||
|
|
||||||
|
if (n->prev == (void *)h)
|
||||||
|
h->first = n->next;
|
||||||
|
else
|
||||||
|
n->prev->next = n->next;
|
||||||
|
|
||||||
|
n->next = h->first;
|
||||||
|
return n->next == &node;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
if (foo ())
|
||||||
|
abort ();
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -1161,17 +1161,9 @@ gimple_equal_p (same_succ same_succ, gimple s1, gimple s2)
|
||||||
lhs2 = gimple_get_lhs (s2);
|
lhs2 = gimple_get_lhs (s2);
|
||||||
if (TREE_CODE (lhs1) != SSA_NAME
|
if (TREE_CODE (lhs1) != SSA_NAME
|
||||||
&& TREE_CODE (lhs2) != SSA_NAME)
|
&& TREE_CODE (lhs2) != SSA_NAME)
|
||||||
{
|
return (operand_equal_p (lhs1, lhs2, 0)
|
||||||
/* If the vdef is the same, it's the same statement. */
|
&& gimple_operand_equal_value_p (gimple_assign_rhs1 (s1),
|
||||||
if (vn_valueize (gimple_vdef (s1))
|
gimple_assign_rhs1 (s2)));
|
||||||
== vn_valueize (gimple_vdef (s2)))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
/* Test for structural equality. */
|
|
||||||
return (operand_equal_p (lhs1, lhs2, 0)
|
|
||||||
&& gimple_operand_equal_value_p (gimple_assign_rhs1 (s1),
|
|
||||||
gimple_assign_rhs1 (s2)));
|
|
||||||
}
|
|
||||||
else if (TREE_CODE (lhs1) == SSA_NAME
|
else if (TREE_CODE (lhs1) == SSA_NAME
|
||||||
&& TREE_CODE (lhs2) == SSA_NAME)
|
&& TREE_CODE (lhs2) == SSA_NAME)
|
||||||
return vn_valueize (lhs1) == vn_valueize (lhs2);
|
return vn_valueize (lhs1) == vn_valueize (lhs2);
|
||||||
|
|
Loading…
Reference in New Issue