This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/23373] New: Functions returning pointers with pointer argument
- From: "tkoenig at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 13 Aug 2005 09:16:33 -0000
- Subject: [Bug fortran/23373] New: Functions returning pointers with pointer argument
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
There is a bad case of aliasing here:
$ cat pointer_function.f90
program Realloc
IMPLICIT NONE
REAL, DIMENSION(:), POINTER :: x
INTEGER :: i
x => NULL()
x => myallocate(x)
contains
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.
--
Summary: Functions returning pointers with pointer argument
Product: gcc
Version: 4.1.0
Status: UNCONFIRMED
Keywords: wrong-code
Severity: normal
Priority: P2
Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: tkoenig at gcc dot gnu dot org
CC: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23373