Commit 83799a47 by Michael Matz Committed by Michael Matz

re PR fortran/47516 (testsuite failure: realloc_on_assign_2.f03 (with --disable-bootstrap))

        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
parent 4648deb4
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> 2011-03-29 Janus Weil <janus@gcc.gnu.org>
PR fortran/48095 PR fortran/48095
......
...@@ -5510,20 +5510,20 @@ arrayfunc_assign_needs_temporary (gfc_expr * expr1, gfc_expr * expr2) ...@@ -5510,20 +5510,20 @@ arrayfunc_assign_needs_temporary (gfc_expr * expr1, gfc_expr * expr2)
reallocatable assignments from extrinsic function calls. */ reallocatable assignments from extrinsic function calls. */
static void 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 /* Signal that the function call should not be made by
gfc_conv_loop_setup. */ gfc_conv_loop_setup. */
se->ss->is_alloc_lhs = 1; se->ss->is_alloc_lhs = 1;
gfc_init_loopinfo (&loop); gfc_init_loopinfo (loop);
gfc_add_ss_to_loop (&loop, *ss); gfc_add_ss_to_loop (loop, *ss);
gfc_add_ss_to_loop (&loop, se->ss); gfc_add_ss_to_loop (loop, se->ss);
gfc_conv_ss_startstride (&loop); gfc_conv_ss_startstride (loop);
gfc_conv_loop_setup (&loop, where); gfc_conv_loop_setup (loop, where);
gfc_copy_loopinfo_to_se (se, &loop); gfc_copy_loopinfo_to_se (se, loop);
gfc_add_block_to_block (&se->pre, &loop.pre); gfc_add_block_to_block (&se->pre, &loop->pre);
gfc_add_block_to_block (&se->pre, &loop.post); gfc_add_block_to_block (&se->pre, &loop->post);
se->ss->is_alloc_lhs = 0; se->ss->is_alloc_lhs = 0;
} }
...@@ -5591,6 +5591,7 @@ gfc_trans_arrayfunc_assign (gfc_expr * expr1, gfc_expr * expr2) ...@@ -5591,6 +5591,7 @@ gfc_trans_arrayfunc_assign (gfc_expr * expr1, gfc_expr * expr2)
gfc_se se; gfc_se se;
gfc_ss *ss; gfc_ss *ss;
gfc_component *comp = NULL; gfc_component *comp = NULL;
gfc_loopinfo loop;
if (arrayfunc_assign_needs_temporary (expr1, expr2)) if (arrayfunc_assign_needs_temporary (expr1, expr2))
return NULL; return NULL;
...@@ -5641,7 +5642,7 @@ gfc_trans_arrayfunc_assign (gfc_expr * expr1, gfc_expr * expr2) ...@@ -5641,7 +5642,7 @@ gfc_trans_arrayfunc_assign (gfc_expr * expr1, gfc_expr * expr2)
{ {
if (!expr2->value.function.isym) 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; ss->is_alloc_lhs = 1;
} }
else else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment