[Bug fortran/46990] New: [OOP] gfortran rejects passing a CLASS variable to TYPE

burnus at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Dec 17 10:34:00 GMT 2010


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

           Summary: [OOP] gfortran rejects passing a CLASS variable to
                    TYPE
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Keywords: rejects-valid
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: burnus@gcc.gnu.org
                CC: janus@gcc.gnu.org


In the following program a polymorphic dummy is passed as actual argument to a
non-polymorphic dummy of the declared type.

The program compiles with the ifort 11.1 and nagf95 5.1, but gfortran rejects
it with:
    call two(x)
             1
Error: Type mismatch in argument 'x' at (1); passed CLASS(t) to TYPE(t)


Both compiler reject passing a CLASS(t2) variable to TYPE(t) or CLASS(t) to
TYPE(t2). (Where "t2" extends type "t".)

 * * *

>From the standard.

"The dummy argument shall be type compatible with the actual argument. If the
actual argument is a polymorphic coindexed object, the dummy argument shall not
be polymorphic." (F2008, 12.5.2.4)

"A nonpolymorphic entity is type compatible only with entities of the same
declared type." (4.3.1.3)

Thus, the dummy argument (a nonpolymorphic entitiy) is type compatible with
entities (i.e. actual actual arguments) of the same declared type.

 * * *

module m
  type t
    integer :: i
  end type t
contains
  subroutine one(x)
    class(t) :: x
    call two(x)
  end subroutine one
  subroutine two(x)
    type(t) :: x
  end subroutine two
end module m



More information about the Gcc-bugs mailing list