This patch sets cobounds in a coarray's gfc_ss struct without relying on the
scalarizer doing it automatically.
The convention to have the bounds and cobounds stored in the loop::from
and loop::to arrays while calling gfc_get_array_type_bounds is not changed,
so we need to set the loop.from[n] and loop.to[n] "by hand".

OK?
2011-09-14  Mikael Morin  <mikael.mo...@sfr.fr>

        * trans-array.c (gfc_conv_expr_descriptor): Add out-of-the-scalarizer
        cobounds evaluation.
diff --git a/trans-array.c b/trans-array.c
index 067fe0b..b132bf6 100644
--- a/trans-array.c
+++ b/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;
 

Reply via email to