------- Additional Comments From pault at gcc dot gnu dot org  2005-08-13 09:31 
-------
(In reply to comment #0)
Edmund,

>
> professional. Is there a workaround or is this a bug which must be fixed?
>
>

Thomas beat you to it!

In the mean time, the following  works:

       program Realloc
       USE nrtype; USE nrutil
       IMPLICIT NONE
       REAL(SP), DIMENSION(:), POINTER :: x, y
       INTEGER(I4B) :: i
       allocate(x(10))
       forall(i=1:ubound(x,1)) x(i)=i
       write(*,"(10F6.2)") x
       y => reallocate(x,20)                 ! Use y...
       x => y                                ! ...and then point x to y
       forall(i=1:ubound(x,1)) x(i)=2*i
       write(*,"(20F6.2)") x
       end program Realloc

For some reason, the compiler is not detecting the dependency and putting the
result of reallocate in a temporary.  What happens is that reallocate does all
the right things, up until the deallocate..... which it does to the lhs, being
the same as the result, ie to x!  An alternative fix is to comment out the
deallocate.

I'll take a look see over the next few days.  It's a bit of code that I need to
revisit for another reason.

Best regards

Paul T

>   FUNCTION myallocate(p)
>     REAL, DIMENSION(:), POINTER :: p, myallocate
>     INTEGER :: nold,ierr
>     if (associated(p)) then
>        print *,"p is associated"
>     else
>        print *,"p is not associated"
>     end if
>     allocate(myallocate(20))
>     if (associated(p)) then
>        print *,"p is associated"
>     else
>        print *,"p is not associated"
>     end if
>   END FUNCTION myallocate
> end program Realloc
> $ gfortran -fdump-tree-original pointer_function.f90
> $ ./a.out
>  p is not associated
>  p is associated
> $ tail -10 pointer_function.f90.t02.original
> {
>   struct array1_real4 x;
>   static void myallocate (struct array1_real4 &, struct array1_real4 &);
> 
>   x.data = 0B;
>   x.data = 0B;
>   myallocate (&x, &x);
> }
> 
> The two arguments to myallocate are bogus - they alias each other,
> and they shouldn't.  A tempoaray array descriptor is needed here.

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23373

Reply via email to