------- Comment #4 from pinskia at gcc dot gnu dot org 2007-06-22 00:36 ------- Here is the patch which fixes this testcase (note IV-OPTS is still messed up but I will work on that later): Index: tree-affine.c =================================================================== --- tree-affine.c (revision 125927) +++ tree-affine.c (working copy) @@ -130,6 +130,7 @@ aff_combination_add_elt (aff_tree *comb, tree elt, double_int scale) { unsigned i; + tree type;
scale = double_int_ext_for_comb (scale, comb); if (double_int_zero_p (scale)) @@ -169,17 +170,26 @@ return; } + type = comb->type; + if (POINTER_TYPE_P (type)) + type = sizetype; + if (double_int_one_p (scale)) - elt = fold_convert (comb->type, elt); + elt = fold_convert (type, elt); else - elt = fold_build2 (MULT_EXPR, comb->type, - fold_convert (comb->type, elt), - double_int_to_tree (comb->type, scale)); + elt = fold_build2 (MULT_EXPR, type, + fold_convert (type, elt), + double_int_to_tree (type, scale)); if (comb->rest) - comb->rest = fold_build2 (PLUS_EXPR, comb->type, comb->rest, elt); + { + if (!POINTER_TYPE_P (comb->type)) + comb->rest = fold_build2 (PLUS_EXPR, comb->type, comb->rest, elt); + else + comb->rest = fold_build2 (POINTER_PLUS_EXPR, comb->type, comb->rest, elt); + } else - comb->rest = elt; + comb->rest = fold_convert (comb->type, elt); } /* Adds CST to C. */ -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32417