Что не так со следующим кодом Фортрана? (gfortran) DTIO фиктивный аргумент в (1) должен быть ПРИНЯТЫМ МОДЕЛЕМ ФОРМЫ - PullRequest
1 голос
/ 01 апреля 2020

У меня есть следующий код:

module scheme

  type, abstract :: scheme_object
   contains
     procedure, pass :: generic_scheme_print => print_scheme_object
     generic, public :: write (formatted) => generic_scheme_print
  end type scheme_object

  abstract interface
     subroutine packageable_procedure(  )
       import scheme_object
     end subroutine packageable_procedure
  end interface
contains

  subroutine print_scheme_object(this, unit, iotype, v_list, iostat, iomsg)
    class(scheme_object), intent(in) :: this
    integer, intent(in)         :: unit
    character(*), intent(in)    :: iotype
    integer, intent(in)         :: v_list (:)
    integer, intent(out)        :: iostat
    character(*), intent(inout) :: iomsg
    iostat = 1
  end subroutine print_scheme_object

  subroutine packaged_cons( )
  end subroutine packaged_cons

  function make_primitive_procedure_object( proc1 ) result( retval )
    class(scheme_object), pointer :: retval
    procedure(packageable_procedure), pointer :: proc1
  end function make_primitive_procedure_object


  subroutine ll_setup_global_environment()
    procedure(packageable_procedure), pointer :: proc1
    class(scheme_object), pointer :: proc_obj_to_pack
    proc1 => packaged_cons
    proc_obj_to_pack => make_primitive_procedure_object( proc1 )
  end subroutine ll_setup_global_environment

end module scheme

program main
end program main

Этот код прекрасно компилируется с ifort 19.1.1.217 20200306, работает и ничего не делает (как и ожидалось).

Однако, компилируя его с помощью gfortran завершается с сообщением об ошибке crypti c:

   16 |   subroutine print_scheme_object(this, unit, iotype, v_list, iostat, iomsg)
      |                                                           1
Error: DTIO dummy argument at (1) must be an ASSUMED SHAPE ARRAY

Изменение длины объявления "v_list" на любое целое число приводит к двум одинаковым сообщениям:

   16 |   subroutine print_scheme_object(this, unit, iotype, v_list, iostat, iomsg)
      |                                                           1
Error: DTIO dummy argument at (1) must be an ASSUMED SHAPE ARRAY

   16 |   subroutine print_scheme_object(this, unit, iotype, v_list, iostat, iomsg)
      |                                                           1
Error: DTIO dummy argument at (1) must be an ASSUMED SHAPE ARRAY

В чем проблема?

1 Ответ

2 голосов
/ 03 апреля 2020

Я не уверен, что это правильный ответ, но ...

Ваш код правильный и выдает ошибку в конкретном компиляторе.

...