aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-expr.c
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2011-03-30 17:31:54 +0000
committerMichael Matz <matz@gcc.gnu.org>2011-03-30 17:31:54 +0000
commit83799a479c7da8eedeefd9a4d760cd923fc1e18c (patch)
tree67478b1782ce9465bbf4ba2be6f6c7c63373f2b1 /gcc/fortran/trans-expr.c
parent4648deb4187091b6d3c39c0108b5621fb895a7b2 (diff)
downloadgcc-83799a479c7da8eedeefd9a4d760cd923fc1e18c.zip
gcc-83799a479c7da8eedeefd9a4d760cd923fc1e18c.tar.gz
gcc-83799a479c7da8eedeefd9a4d760cd923fc1e18c.tar.bz2
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
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r--gcc/fortran/trans-expr.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index da7cfba..41ee5ee 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -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