------- Comment #6 from burnus at gcc dot gnu dot org 2010-06-19 09:47 ------- (In reply to comment #0) > the function with array return must create a temporary array to hold the > returned value and transfer the value to destination array after function > call.
> gfortran returns 5.0 > it should be 0.0 or a chaotic number. Well, it is an arbitrary/chaotic/random number: In case of gfortran it happens to be the previous value of the assignment (namely 5.0), but I do not see why an always changing number - be once 0.0 or 1.0e88 or 42.0 is better. By the way, I have now filled PR 44589 as gfortran does not warn that the return variable in "ddx" has not been initialized. > O.K. I doublechecked the standard. The array declared does not need to be > initialized in this case. So the return value could be any number. However, > this kind of implementation should fail in a certian case. I am trying to > write a small example to prove this. I will post it later. Thanks for alerting us of the following issue. I believe the following program is an example where a temporary is needed as first the RHS has to be evaluated before it is assigned to the LHS. Thus, the optimization can be done - but only for PURE procedures. The program below should print twice "10 10 10 10 10" but due to the bug, it prints zeros for the first print and the tens only for the second print statement. program test implicit none integer :: a(5) a = 5 a = f() print *, a a = 5 print *, f() contains function f() integer :: f(size(a)) f = -5 f = a - f end function f end program test The check is done in trans-expr.c's gfc_trans_arrayfunc_assign - here an extra check (expr2->value.function.esym && expr2->value.function.esym->attr.pure) seems to be needed. -- burnus at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |burnus at gcc dot gnu dot | |org OtherBugsDependingO| |34640 nThis| | Status|RESOLVED |UNCONFIRMED GCC build triplet|x86-64 | GCC host triplet|x86-64 | GCC target triplet|x86-64 | Keywords| |wrong-code Resolution|INVALID | Version|fortran-dev |4.6.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44582