From: mikael Date: Tue, 18 Oct 2011 14:42:21 +0000 (+0000) Subject: PR fortran/50420 X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=5fcb00d5cf21f30f243d5a9dfc1e67963920159f PR fortran/50420 * trans-array.c (gfc_conv_expr_descriptor): Count codimensions starting from zero, and add then the relevant offset (either ndim or loop.dimen) depending on context. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180142 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6dc36b358cb..06a65a4b475 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,12 @@ 2011-10-18 Mikael Morin + PR fortran/50420 + * trans-array.c (gfc_conv_expr_descriptor): Count codimensions starting + from zero, and add then the relevant offset (either ndim or loop.dimen) + depending on context. + +2011-10-18 Mikael Morin + * trans-array.c (gfc_conv_expr_descriptor): Save some horizontal space. 2011-10-18 Mikael Morin diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 0034b49ffa8..0da1720c40b 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -5981,25 +5981,24 @@ gfc_conv_expr_descriptor (gfc_se * se, gfc_expr * expr, gfc_ss * ss) gfc_array_ref *ar = &info->ref->u.ar; codim = gfc_get_corank (expr); - for (n = ss->data.info.dimen; n < ss->data.info.dimen + codim - 1; - n++) + for (n = 0; n < codim - 1; n++) { /* Make sure we are not lost somehow. */ - gcc_assert (ar->dimen_type[n] == DIMEN_THIS_IMAGE); + gcc_assert (ar->dimen_type[n + ndim] == DIMEN_THIS_IMAGE); /* Make sure the call to gfc_conv_section_startstride won't generate unnecessary code to calculate stride. */ - gcc_assert (ar->stride[n] == NULL); + gcc_assert (ar->stride[n + ndim] == NULL); - gfc_conv_section_startstride (&loop, ss, n); - loop.from[n] = info->start[n]; - loop.to[n] = info->end[n]; + gfc_conv_section_startstride (&loop, ss, n + ndim); + loop.from[n + loop.dimen] = info->start[n + ndim]; + loop.to[n + loop.dimen] = info->end[n + ndim]; } - gcc_assert (n == ss->data.info.dimen + codim - 1); + gcc_assert (n == codim - 1); evaluate_bound (&loop.pre, info->start, ar->start, - info->descriptor, n, true); - loop.from[n] = info->start[n]; + info->descriptor, n + ndim, true); + loop.from[n + loop.dimen] = info->start[n + ndim]; } else codim = 0;