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
This commit is contained in:
Michael Matz 2011-03-30 17:31:54 +00:00 committed by Michael Matz
parent 4648deb418
commit 83799a479c
2 changed files with 19 additions and 11 deletions

View 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

View 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