Index: gcc/graphite-isl-ast-to-gimple.c =================================================================== --- gcc/graphite-isl-ast-to-gimple.c (revision 212922) +++ gcc/graphite-isl-ast-to-gimple.c (working copy) @@ -383,6 +383,10 @@ isl_ast_expr *for_iterator = isl_ast_node_for_get_iterator (node_for); isl_id *id = isl_ast_expr_get_id (for_iterator); + std::map::iterator res; + res = ip.find (id); + if (res != ip.end ()) + isl_id_free (res->first); ip[id] = iv; isl_ast_expr_free (for_iterator); return loop; Index: gcc/testsuite/gcc.dg/graphite/isl-ast-gen-blocks-4.c =================================================================== --- gcc/testsuite/gcc.dg/graphite/isl-ast-gen-blocks-4.c (revision 0) +++ gcc/testsuite/gcc.dg/graphite/isl-ast-gen-blocks-4.c (working copy) @@ -0,0 +1,37 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -fgraphite-identity -fgraphite-code-generator=isl" } */ + +int k = 4; +int n1 = 50; +int n2 = 50; +int n3 = 50; + +static int __attribute__((noinline)) +foo () +{ + int j, res = 0; + for (j = 0, res = 0; j < k; j++) + { + int i; + for (i = 0; i < n1; i++) + res += i; + for (i = 0; i < n2; i++) + res += i; + for (i = 0; i < n3; i++) + res += i; + } + + return res; +} + +extern void abort (); + +int +main (void) +{ + int res = foo (); + if (res != 14700) + abort (); + + return 0; +}