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



             Bug #: 56939

           Summary: [4.8/4.9 Regression] [OOP] Derived type is being used

                    before it is defined

    Classification: Unclassified

           Product: gcc

           Version: 4.9.0

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: fortran

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: ja...@gcc.gnu.org





The following is a reduction of PR 55959 comment 0, which is valid code AFAICS:





module pdfs

  type, abstract :: pdf

    integer dims

  contains

    procedure(getx), deferred :: getx

  end type



  abstract interface

    function getx(this)

      import pdf

      class(pdf), intent(in) :: this

      real getx(this%dims)

    end function

  end interface



  type point

    real x, y

  end type



  type, extends(pdf) :: pdf_point

    type(point) p

  contains

    procedure :: getx => pdf_point_getx

  end type



contains



  function pdf_point_getx(this)

    class(pdf_point), intent(in) :: this

    real pdf_point_getx(this%dims)

  end function



end module pdfs





program abstract

  use pdfs

end program





With 4.8 and trunk it gives the nonsensical error message:



  use pdfs

      1

Error: Derived type 'pdf' at (1) is being used before it is defined



(while 4.7 accepts it without a problem.)

Reply via email to