------- Additional Comments From tobi at gcc dot gnu dot org 2005-06-05 12:19 ------- This patch seems to work:
2005-06-05 Tobias Schl"uter <[EMAIL PROTECTED]> PR fortran/21912 * trans-array.c (gfc_trans_array_constructor_value): Allow for negative steps in array constructor. Index: trans-array.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/fortran/trans-array.c,v retrieving revision 1.47 diff -u -p -r1.47 trans-array.c --- trans-array.c 31 May 2005 17:19:10 -0000 1.47 +++ trans-array.c 5 Jun 2005 12:17:42 -0000 @@ -845,6 +845,7 @@ gfc_trans_array_constructor_value (stmtb /* The frontend should already have done any expansions. */ if (c->iterator) { + tree cond; tree end; tree step; tree loopvar; @@ -878,10 +879,16 @@ gfc_trans_array_constructor_value (stmtb gfc_start_block (&body); /* Generate the exit condition. */ - end = build2 (GT_EXPR, boolean_type_node, loopvar, end); + tmp = fold_build2 (GT_EXPR, boolean_type_node, step, + build_int_cst (TREE_TYPE (step), 0)); + cond = fold_build3 (COND_EXPR, boolean_type_node, tmp, + build2 (GT_EXPR, boolean_type_node, + loopvar, end), + build2 (LT_EXPR, boolean_type_node, + loopvar, end)); tmp = build1_v (GOTO_EXPR, exit_label); TREE_USED (exit_label) = 1; - tmp = build3_v (COND_EXPR, end, tmp, build_empty_stmt ()); + tmp = build3_v (COND_EXPR, cond, tmp, build_empty_stmt ()); gfc_add_expr_to_block (&body, tmp); /* The main loop body. */ -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21912