aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/trans-array.c16
2 files changed, 20 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 8657e59..8bcaf58 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,10 @@
2011-10-07 Mikael Morin <mikael.morin@sfr.fr>
+ * trans-array.c (gfc_conv_expr_descriptor): Add out-of-the-scalarizer
+ cobounds evaluation.
+
+2011-10-07 Mikael Morin <mikael.morin@sfr.fr>
+
* trans-array.c (gfc_conv_ss_startstride): Support zero rank loop.
2011-10-07 Mikael Morin <mikael.morin@sfr.fr>
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index 067fe0b..b132bf6 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -5994,7 +5994,21 @@ gfc_conv_expr_descriptor (gfc_se * se, gfc_expr * expr, gfc_ss * ss)
tree base;
if (se->want_coarray)
- codim = gfc_get_corank (expr);
+ {
+ codim = gfc_get_corank (expr);
+ for (n = ss->data.info.dimen; n < ss->data.info.dimen + codim - 1;
+ n++)
+ {
+ gfc_conv_section_startstride (&loop, ss, n, true, false);
+ loop.from[n] = info->start[n];
+ loop.to[n] = info->end[n];
+ }
+
+ gcc_assert (n == ss->data.info.dimen + codim - 1);
+ evaluate_bound (&loop.pre, info->start, info->ref->u.ar.start,
+ info->descriptor, n, true);
+ loop.from[n] = info->start[n];
+ }
else
codim = 0;