[Bug fortran/21912] Wrong implied do-loop

tobi at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Sun Jun 5 12:19:00 GMT 2005


------- 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  <tobias.schlueter@physik.uni-muenchen.de>

       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



More information about the Gcc-bugs mailing list