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>
PR fortran/48095
......
......@@ -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
......
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