------- 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