[Bug fortran/31867] function result with character LEN computed at run time
pault at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Mon May 14 19:51:00 GMT 2007
------- Comment #8 from pault at gcc dot gnu dot org 2007-05-14 20:51 -------
The patch below works and regtests OK. I am not convince that this is the
whole story and need to think about it for a day or two.
Paul
Index: gcc/fortran/trans-array.c
===================================================================
*** gcc/fortran/trans-array.c (révision 124614)
--- gcc/fortran/trans-array.c (copie de travail)
*************** gfc_conv_expr_descriptor (gfc_se * se, g
*** 4563,4569 ****
limits will be the limits of the section.
A function may decide to repack the array to speed up access, but
we're not bothered about that here. */
! int dim, ndim;
tree parm;
tree parmtype;
tree stride;
--- 4563,4569 ----
limits will be the limits of the section.
A function may decide to repack the array to speed up access, but
we're not bothered about that here. */
! int dim, ndim, stride_ne_one;
tree parm;
tree parmtype;
tree stride;
*************** gfc_conv_expr_descriptor (gfc_se * se, g
*** 4613,4623 ****
--- 4613,4628 ----
else
base = NULL_TREE;
+ stride_ne_one = 0;
+
ndim = info->ref ? info->ref->u.ar.dimen : info->dimen;
for (n = 0; n < ndim; n++)
{
stride = gfc_conv_array_stride (desc, n);
+ if (!integer_onep (info->stride[dim]))
+ stride_ne_one = 1;
+
/* Work out the offset. */
if (info->ref
&& info->ref->u.ar.dimen_type[n] == DIMEN_ELEMENT)
*************** gfc_conv_expr_descriptor (gfc_se * se, g
*** 4710,4715 ****
--- 4715,4725 ----
/* Set the offset. */
tmp = gfc_conv_descriptor_offset (parm);
gfc_add_modify_expr (&loop.pre, tmp, base);
+ }
+ else if (GFC_ARRAY_TYPE_P (TREE_TYPE (desc)) && !stride_ne_one)
+ {
+ tmp = gfc_conv_descriptor_offset (parm);
+ gfc_add_modify_expr (&loop.pre, tmp, gfc_conv_array_offset (desc));
}
else
{
--
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|2007-05-10 12:34:22 |2007-05-14 20:51:10
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31867
More information about the Gcc-bugs
mailing list