diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index a24f49957898..89e1a0a2a3f8 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,3 +1,11 @@ +2010-04-04 Sebastian Pop + + PR middle-end/43519 + * graphite-clast-to-gimple.c (graphite_create_new_loop_guard): Use + POINTER_PLUS_EXPR for pointer types. + + * gcc.dg/graphite/id-19.c: New. + 2010-04-04 Sebastian Pop PR middle-end/43519 diff --git a/gcc/graphite-clast-to-gimple.c b/gcc/graphite-clast-to-gimple.c index 6aab2a5521ce..106ff7c5e7ab 100644 --- a/gcc/graphite-clast-to-gimple.c +++ b/gcc/graphite-clast-to-gimple.c @@ -1035,7 +1035,8 @@ graphite_create_new_loop_guard (sese region, edge entry_edge, one = gmp_cst_to_tree (type, gmp_one); value_clear (gmp_one); - ub = fold_build2 (PLUS_EXPR, type, ub, one); + ub = fold_build2 (POINTER_TYPE_P (type) ? POINTER_PLUS_EXPR : PLUS_EXPR, + type, ub, one); cond_expr = fold_build2 (LT_EXPR, boolean_type_node, lb, ub); exit_edge = create_empty_if_region_on_edge (entry_edge, cond_expr); diff --git a/gcc/testsuite/gcc.dg/graphite/id-19.c b/gcc/testsuite/gcc.dg/graphite/id-19.c new file mode 100644 index 000000000000..b0d626b816dd --- /dev/null +++ b/gcc/testsuite/gcc.dg/graphite/id-19.c @@ -0,0 +1,6 @@ +void byte_insert_op1 (unsigned char *loc, unsigned char *end) +{ + register unsigned char *pto = end + 1 + 2; + while (end != loc) + *--pto = *--end; +}