Too restrictive type-bound procedure overriding?

Too restrictive type-bound procedure overriding?

Hi,

I am unexpectedly getting error #8383 ("The dummy arguments of an overriding and overridden binding that correspond by position must have the same characteristics, except for the type of the passed object dummy arguments"). Here is a minimal example:

module my_module
    implicit none
    type :: Base
        integer :: sz
    contains
        procedure :: next => Base_next
    end type
    type,extends(Base) :: Extended
    contains
        procedure :: next => Extended_next
    end type
contains
    function Base_next(self,vector) result(continue)
        class(Base) :: self
        integer :: vector(self%sz)
        logical :: continue
        continue=.TRUE.
        return
    end function
    function Extended_next(self,vector) result(continue)
        class(Extended) :: self
        integer :: vector(self%sz)
        logical :: continue
        continue=self%Base%next(vector)
        return
    end function
end module

Replacing self%sz with a constant (e.g. 3) in the declaration

integer :: vector(self%sz)
fixes the problem. Replacing self%sz with self%Base%sz in line 22. This seems to me too restrictive. The code compiles OK with gfortran 4.7, fails to compile with ifort 13.0.1.

Thanks for your help.

6 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

Thanks - I agree that this should be allowed. I have escalated it as issue DPD200241573 and will let you know here of any progress.

Steve - Intel Developer Support

Thanks a lot! And also, thanks a lot for your Doctor Fortran blog, I have found some very interesting stuff.

Any progress on this? The bug is still present in version 14.0.1.

Best regards,

Sergio Losilla

I don't see any progress noted and have pinged the developer.

Steve - Intel Developer Support

Thanks :)

Leave a Comment

Please sign in to add a comment. Not a member? Join today