Patch number 3 handled scalar assignments like:
scalar_some_type = some_type(...)

Patch number 4 handled array assignments like:
array_some_type = (/some_type :: .../)

This takes care of assignments like:
array_some_type = some_type(...)
i.e. scalar to array assignments.  As all the infrastructure has been installed
previously, this simply sets it up properly.

OK?
2012-08-22  Mikael Morin  <mik...@gcc.gnu.org>

        * trans-array.c (gfc_add_loop_ss_code): Use RESTRICTED field.
        * trans-expr.c (gfc_trans_assignment): Set RESTRICTED field.
diff --git a/trans-array.c b/trans-array.c
index f5051ff..432fc72 100644
--- a/trans-array.c
+++ b/trans-array.c
@@ -2489,6 +2489,7 @@ gfc_add_loop_ss_code (gfc_loopinfo * loop, gfc_ss * ss, 
bool subscript,
          /* Scalar expression.  Evaluate this now.  This includes elemental
             dimension indices, but not array section bounds.  */
          gfc_init_se (&se, NULL);
+         se.want_restricted_types = ss_info->restricted;
          gfc_conv_expr (&se, expr);
          gfc_add_block_to_block (&outer_loop->pre, &se.pre);
 
diff --git a/trans-expr.c b/trans-expr.c
index 2a60087..6af753a 100644
--- a/trans-expr.c
+++ b/trans-expr.c
@@ -7258,8 +7258,11 @@ gfc_trans_assignment_1 (gfc_expr * expr1, gfc_expr * 
expr2, bool init_flag,
       /* Walk the rhs.  */
       rss = gfc_walk_expr (expr2);
       if (rss == gfc_ss_terminator)
-       /* The rhs is scalar.  Add a ss for the expression.  */
-       rss = gfc_get_scalar_ss (gfc_ss_terminator, expr2);
+       {
+         /* The rhs is scalar.  Add a ss for the expression.  */
+         rss = gfc_get_scalar_ss (gfc_ss_terminator, expr2);
+         gfc_ss_set_restricted (rss, !gfc_expr_attr (expr1).target);
+       }
       else if (rss->next == gfc_ss_terminator
               && rss->info->type == GFC_SS_CONSTRUCTOR)
        gfc_ss_set_restricted (rss, !(gfc_expr_attr (expr1).target));

Reply via email to