+2009-02-05 Daniel Berlin <dberlin@dberlin.org>
+ Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/39100
+ * tree-ssa-structalias.c (do_ds_constraint): Actually do what the
+ comment says and add edges.
+
2009-02-05 Joseph Myers <joseph@codesourcery.com>
PR c/35435
+2009-02-05 Daniel Berlin <dberlin@dberlin.org>
+
+ * gcc.c-torture/execute/pr39100.c: New.
+
2009-02-05 Joseph Myers <joseph@codesourcery.com>
PR c/35435
--- /dev/null
+/* Bad PTA results (incorrect store handling) was causing us to delete
+ *na = 0 store. */
+
+typedef struct E
+{
+ int p;
+ struct E *n;
+} *EP;
+
+typedef struct C
+{
+ EP x;
+ short cn, cp;
+} *CP;
+
+__attribute__((noinline)) CP
+foo (CP h, EP x)
+{
+ EP pl = 0, *pa = &pl;
+ EP nl = 0, *na = &nl;
+ EP n;
+
+ while (x)
+ {
+ n = x->n;
+ if ((x->p & 1) == 1)
+ {
+ h->cp++;
+ *pa = x;
+ pa = &((*pa)->n);
+ }
+ else
+ {
+ h->cn++;
+ *na = x;
+ na = &((*na)->n);
+ }
+ x = n;
+ }
+ *pa = nl;
+ *na = 0;
+ h->x = pl;
+ return h;
+}
+
+int
+main (void)
+{
+ struct C c = { 0, 0, 0 };
+ struct E e[2] = { { 0, &e[1] }, { 1, 0 } };
+ EP p;
+
+ foo (&c, &e[0]);
+ if (c.cn != 1 || c.cp != 1)
+ __builtin_abort ();
+ if (c.x != &e[1])
+ __builtin_abort ();
+ if (e[1].n != &e[0])
+ __builtin_abort ();
+ if (e[0].n)
+ __builtin_abort ();
+ return 0;
+}
+
+
t = find (v->id);
tmp = get_varinfo (t)->solution;
- if (set_union_with_increment (tmp, sol, 0))
+ if (add_graph_edge (graph, t, rhs))
{
- get_varinfo (t)->solution = tmp;
- if (t == rhs)
- sol = get_varinfo (rhs)->solution;
- if (!TEST_BIT (changed, t))
+ if (bitmap_ior_into (get_varinfo (t)->solution, sol))
{
- SET_BIT (changed, t);
- changed_count++;
+ if (t == rhs)
+ sol = get_varinfo (rhs)->solution;
+ if (!TEST_BIT (changed, t))
+ {
+ SET_BIT (changed, t);
+ changed_count++;
+ }
}
}
}