------- Comment #8 from pinskia at gcc dot gnu dot org  2006-01-20 17:03 -------
This patch worked though:
Index: tree-ssa-pre.c
===================================================================
--- tree-ssa-pre.c      (revision 110017)
+++ tree-ssa-pre.c      (working copy)
@@ -1159,7 +1159,7 @@ phi_translate (tree expr, value_set_t se
        VEC (tree, gc) * oldvuses = NULL;
        VEC (tree, gc) * newvuses = NULL;

-       if (TREE_CODE (expr) != INDIRECT_REF)
+       if (TREE_CODE (expr) != INDIRECT_REF && !AGGREGATE_TYPE_P (TREE_TYPE
(expr)))
          return NULL;

        newop1 = phi_translate (find_leader (set, oldop1),
@@ -1989,7 +1989,7 @@ can_PRE_operation (tree op)
   return UNARY_CLASS_P (op)
     || BINARY_CLASS_P (op)
     || COMPARISON_CLASS_P (op)
-    || TREE_CODE (op) == INDIRECT_REF
+    || (TREE_CODE (op) == INDIRECT_REF)
     || TREE_CODE (op) == CALL_EXPR;
 }

@@ -2650,7 +2650,7 @@ create_value_expr_from (tree expr, basic


       /* Recursively value-numberize reference ops.  */
-      if (REFERENCE_CLASS_P (TREE_VALUE (vexpr)))
+      if (REFERENCE_CLASS_P (TREE_VALUE (vexpr)) && !AGGREGATE_TYPE_P
(TREE_TYPE (TREE_VALUE (vexpr))))
        {
          tree tempop;
          op = TREE_VALUE (vexpr);


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25860

Reply via email to