次のCの関数をFortranから呼び出すFFIを書く必要があります

typedef struct {
  int x, y;
} int2;

int2 f(int2 a) {
  int2 b;
  b.x = 2 * a.x;
  b.y = 2 * a.y;
  return b;
}

この関数を呼び出すためのFFIを次のように書いてみました(test.f03)

module mymod
  type :: int2
    integer :: x, y
  end type
  interface
    function f(a) result(b)
      type(int2) :: a, b
    end function
  end interface
end module

しかし以下のようなコンパイルエラーとなります

test.f03:8:16:

       type(int2) :: a, b
                1
Error: Derived type ‘int2’ at (1) is being used before it is defined

エラーメッセージは定義前にint2型を使用していると読めますが、どのようにすれば(どこで定義すれば)interface内でint2を使うことが出来ますか?

使用したコンパイラ:

$ gfortran --version
GNU Fortran (GCC) 8.2.1 20181127
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.