[Patch, fortran] PR27124 - Incorrect dependency for assignment from function with array section actual arg.
Paul Thomas
paulthomas2@wanadoo.fr
Wed Apr 12 19:19:00 GMT 2006
:ADDPATCH fortran:
Please find below the patch to fix and the test case for PR27124,
submitted by Philippe Schaffnit, yesterday.
As described in the bug report, the problem arises because the unpacking
of an array section actual argument overwrites the result, which itself
is written from a temporary. The correction of the problem requires
that these two operations occur in the opposite order.
Quite simply, the fix consists of gathering up all the argument
post_blocks, which contain the unpacking and freeing of argument
temporaries, and stashing them into a separate block. After the function
call is translated, its expression either goes in the se->pre block or
becomes the se->expr, depending on how the value is returned. Depending
on this same choice, we now add the argument post block to se->pre or to
se->post. This ensures that the results of byref calls that produce
temporaries are transferred to the destination array AFTER the unpacking
of the argument because they go to the se->post block directly. The
reduced testcase below now runs correctly.
The patch and testcase appear below.
Regtested on Cygwin_NT/PIV and FC3/Athlon. OK for trunk and 4.1?
Paul
2006-04-12 Paul Thomas <pault@gcc.gnu.org>
* trans_expr.c (gfc_trans_function_call): Add a new block, post, in to
which all the argument post blocks are put. Add this block to se->pre
after a byref call or to se->post, otherwise.
2006-04-12 Paul Thomas <pault@gcc.gnu.org>
* gfortran.dg/array_return_value_1.f90: New test.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: array_val.diff
URL: <http://gcc.gnu.org/pipermail/fortran/attachments/20060412/5b740a5f/attachment.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: array_return_value_1.f90
URL: <http://gcc.gnu.org/pipermail/fortran/attachments/20060412/5b740a5f/attachment.f90>
More information about the Fortran
mailing list