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));