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

            Bug ID: 91813
           Summary: Derived types: Issues with user defined I/O and
                    recursive function of abstract type
           Product: gcc
           Version: 9.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: m.diehl at mpie dot de
  Target Milestone: ---

Created attachment 46896
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=46896&action=edit
Example code with user defined I/O (not working)

This bug is a hard to describe because it seems to results from a strange side
condition.

In brief, I have a abstract base class (tNode) and two derived classes (tScalar
and tList) which are used to build a tree-structure from a YAML file. This is
done with a recursive function which parses a string and has the class of the
abstract type:

recursive function YAML_parse(str) result(parsed)
  class(tNode), allocatable :: parsed
  character(len=*), intent(in) :: str
  type(tList) :: li
  integer :: e, s

  if (str(1:1) == '[') then
    e = 1
    do while (e < len(str))
      s = e
      e = s + find_end(str(s+1:))
      call li%append(YAML_parse(str(s+1:e-1)))            ! Bug in Gfortran:
This call to parse allocates parsed
    enddo
    allocate(parsed,source=li)                            ! error message
appears here
  else
    parsed = tScalar(trim(str))
  endif
end function

The function fails at the allocation with the message "'parsed' is already
allocated" even though this statement is called only once in each function
call. My guess is that there is a mix-up of YAML_parse and parsed (note that
the 'result' style is mandatory) due to the recursive invocation.

Now the strange thing: This happens only if the types have user defined I/O.
I.e. if line 8, 26, and 37 (and subsequently 108-148 and 163) are commented out
the code works to the extend that there is no run time error. Unfortunately, in
that case I can not easily figure out if the values are stored appropriately.

I'm running arch linux on a 64bit Intel i7

Note that bug 88768 migh be related.

Reply via email to