The attached code produces an error at runtime, however it seems fine
to me. Notice that there is no error accessing the function with the
specific name "g", while there is an error when using the generic name
"gen_g".

gfortran --version
GNU Fortran (GCC) 4.5.0 20091105 (experimental)

gfortran ./abc.f90 -o abc

./abc 
At line 23 of file ./abc.f90
Fortran runtime error: Attempting to allocate already allocated array 'j'


module mod_m
 implicit none
 public :: f
 private

 interface gen_g
   module procedure g
 end interface

contains

 pure function f() result(i)
  integer :: i
  integer, allocatable :: loc_ar(:)
   allocate(loc_ar(1))
   loc_ar = gen_g() ! does not work
   !loc_ar = g() ! no problem here
   deallocate(loc_ar)
 end function f

 pure function g() result(j)
  integer, allocatable :: j(:)
   allocate( j(1) )
   j = 2
 end function g

end module mod_m

!--------------------------

program abc_main

 use mod_m, only: f
 implicit none
 integer :: p
  p = f()

end program abc_main


-- 
           Summary: overloaded function with allocatable result problem
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: mrestelli at gmail dot com
  GCC host triplet: Linux 2.6.27-gentoo-r8 x86_64 AMD Turion(tm)
GCC target triplet: GNU Fortran (GCC) 4.5.0 20091105 (experimental)


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

Reply via email to