diff options
author | Michael Matz <matz@suse.de> | 2011-03-30 17:31:54 +0000 |
---|---|---|
committer | Michael Matz <matz@gcc.gnu.org> | 2011-03-30 17:31:54 +0000 |
commit | 83799a479c7da8eedeefd9a4d760cd923fc1e18c (patch) | |
tree | 67478b1782ce9465bbf4ba2be6f6c7c63373f2b1 /gcc/fortran/trans-expr.c | |
parent | 4648deb4187091b6d3c39c0108b5621fb895a7b2 (diff) | |
download | gcc-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.c | 23 |
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 |