https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77358

            Bug ID: 77358
           Summary: [F08] deferred-length character function returns
                    zero-length string
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: damian at sourceryinstitute dot org
  Target Milestone: ---

As shown below with gfotran 7.0, a deferred-length character function returns a
zero-length string when the function is implemented inside a submodule. Either
of the following eliminates the bug: 
(1) moving the function from the submodule to the module or 
(2) changing the deferred-length character declarations to fixed-length
declarations with or without the allocatable attribute.
It would be great if the fix could be back ported to the 6 branch.

$ cat alloc-char-func-in-submodule.f90 
module hello_interface
  character(len=13) :: string="Hello, world!"
  interface
    module function get() result(result_string)
      character(:), allocatable :: result_string
    end function
  end interface
end module

submodule(hello_interface) hello_implementation
contains
  module function get() result(result_string)
    character(:), allocatable :: result_string
    result_string = string
  end function
end submodule

  use hello_interface
  print *,len(get())
end
$ gfortran alloc-char-func-in-submodule.f90 
$ ./a.out
           0
$ gfortran --version
GNU Fortran (MacPorts gcc7 7-20160814_0) 7.0.0 20160814 (experimental)

Reply via email to