re PR fortran/47516 (testsuite failure: realloc_on_assign_2.f03 (with --disable-boots...
authorMichael Matz <matz@suse.de>
Wed, 30 Mar 2011 17:31:54 +0000 (17:31 +0000)
committerMichael Matz <matz@gcc.gnu.org>
Wed, 30 Mar 2011 17:31:54 +0000 (17:31 +0000)
        PR fortran/47516
* trans-expr.c (realloc_lhs_loop_for_fcn_call): Take loop as parameter,
don't use local variable.
(gfc_trans_arrayfunc_assign): Adjust caller.

From-SVN: r171736

gcc/fortran/ChangeLog
gcc/fortran/trans-expr.c

index 3ebca545f0a787f5887d91e6ffe2aa9f9bfaa97c..b651ae235fd5dfe08b7761c23ce603d3ce3258e9 100644 (file)
@@ -1,3 +1,10 @@
+2011-03-30  Michael Matz  matz@suse.de>
+
+       PR fortran/47516
+       * trans-expr.c (realloc_lhs_loop_for_fcn_call): Take loop as parameter,
+       don't use local variable.
+       (gfc_trans_arrayfunc_assign): Adjust caller.
+
 2011-03-29  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/48095
index da7cfba5981745caa0c13848f84cf198609ffe3d..41ee5eee931c71f06731e44fc556070b5599e166 100644 (file)
@@ -5510,20 +5510,20 @@ arrayfunc_assign_needs_temporary (gfc_expr * expr1, gfc_expr * expr2)
    reallocatable assignments from extrinsic function calls.  */
 
 static void
-realloc_lhs_loop_for_fcn_call (gfc_se *se, locus *where, gfc_ss **ss)
+realloc_lhs_loop_for_fcn_call (gfc_se *se, locus *where, gfc_ss **ss,
+                              gfc_loopinfo *loop)
 {
-  gfc_loopinfo loop;
   /* Signal that the function call should not be made by
      gfc_conv_loop_setup. */
   se->ss->is_alloc_lhs = 1;
-  gfc_init_loopinfo (&loop);
-  gfc_add_ss_to_loop (&loop, *ss);
-  gfc_add_ss_to_loop (&loop, se->ss);
-  gfc_conv_ss_startstride (&loop);
-  gfc_conv_loop_setup (&loop, where);
-  gfc_copy_loopinfo_to_se (se, &loop);
-  gfc_add_block_to_block (&se->pre, &loop.pre);
-  gfc_add_block_to_block (&se->pre, &loop.post);
+  gfc_init_loopinfo (loop);
+  gfc_add_ss_to_loop (loop, *ss);
+  gfc_add_ss_to_loop (loop, se->ss);
+  gfc_conv_ss_startstride (loop);
+  gfc_conv_loop_setup (loop, where);
+  gfc_copy_loopinfo_to_se (se, loop);
+  gfc_add_block_to_block (&se->pre, &loop->pre);
+  gfc_add_block_to_block (&se->pre, &loop->post);
   se->ss->is_alloc_lhs = 0;
 }
 
@@ -5591,6 +5591,7 @@ gfc_trans_arrayfunc_assign (gfc_expr * expr1, gfc_expr * expr2)
   gfc_se se;
   gfc_ss *ss;
   gfc_component *comp = NULL;
+  gfc_loopinfo loop;
 
   if (arrayfunc_assign_needs_temporary (expr1, expr2))
     return NULL;
@@ -5641,7 +5642,7 @@ gfc_trans_arrayfunc_assign (gfc_expr * expr1, gfc_expr * expr2)
     {
       if (!expr2->value.function.isym)
        {
-         realloc_lhs_loop_for_fcn_call (&se, &expr1->where, &ss);
+         realloc_lhs_loop_for_fcn_call (&se, &expr1->where, &ss, &loop);
          ss->is_alloc_lhs = 1;
        }
       else