------- Comment #2 from pault at gcc dot gnu dot org 2008-03-26 22:20 -------
This one is relatively easy:
Index: gcc/fortran/trans-array.c
===================================================================
*** gcc/fortran/trans-array.c (revision 133278)
--- gcc/fortran/trans-array.c (working copy)
*************** gfc_conv_loop_setup (gfc_loopinfo * loop
*** 3506,3512 ****
a.ubound[n] = specified_upper_bound;
a.stride[n] = stride;
size = ubound + size; //size = ubound + 1 - lbound
! stride = stride * size;
}
return (stride);
} */
--- 3516,3522 ----
a.ubound[n] = specified_upper_bound;
a.stride[n] = stride;
size = ubound + size; //size = ubound + 1 - lbound
! stride = size >= 0 ? stride * size : 0;
}
return (stride);
} */
*************** gfc_array_init_size (tree descriptor, in
*** 3605,3610 ****
--- 3615,3623 ----
else
or_expr = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, or_expr,
cond);
+ size = fold_build3 (COND_EXPR, gfc_array_index_type, cond,
+ size, gfc_index_zero_node);
+
/* Multiply the stride by the number of elements in this dimension. */
stride = fold_build2 (MULT_EXPR, gfc_array_index_type, stride, size);
stride = gfc_evaluate_now (stride, pblock);
I'll put it on to regtest.
Paul
--
pault at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |pault at gcc dot gnu dot org
|dot org |
Status|NEW |ASSIGNED
Last reconfirmed|2008-03-25 23:52:07 |2008-03-26 22:20:33
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35698