Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Length-parameterized passed object to type-bound procedure has gfortran complain

I'm learning Fortran and I'd like to encapsulate an array and a subroutine in a type. The problem appears to be in the type definition of the self-object.

This is the minimal test case I came up with:

module testing
  implicit none

  type test(para)
    integer, len :: para
    real, dimension(para) :: weights

  contains
    procedure :: testing => testing_test
  end type
contains
  subroutine testing_test(self)
    class(test(*)) :: self
  end subroutine
end module

Compiling this with gfortran raises this error:

module_test.f08:9:23:

  procedure :: testing => testing_test
          1
Error: Argument ‘self’ of ‘testing_test’ with PASS(self) at (1) must be of the derived-type ‘test’

It works when the array-length is fixed (so type%para doesn't exist)

Is what I'm trying to do (type with array of variable size and bound procedure) plain impossible or am I missing something regarding dummy argument definition?

like image 801
GammaSQ Avatar asked Oct 06 '18 10:10

GammaSQ


2 Answers

Thanks to @Rodrigo for the idea, I finally found this bug (and patch): https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82943

To fix the issue, download the source, apply the mentioned patch and compile your own gfortran. (Or wait until it's in the repositories)

like image 102
GammaSQ Avatar answered Jan 03 '23 02:01

GammaSQ


This is not really an answer but may provide a solution for some. gfortran-10 still has the same problem. However flang-7 compiles this example and it is available for Ubuntu since 19.10, and maybe other OS:es.

like image 45
Jonatan Öström Avatar answered Jan 03 '23 02:01

Jonatan Öström