Ошибка сегментации при связывании необязательного выделяемого массива с необязательным нераспределяемым фиктивным аргументом

Следующий код Fortran генерирует ошибку сегментации при компиляции с ifort версии 19.0.3.199 без оптимизации (-O0) на SLES 15:

program test_prg
  call sub1()

contains

  subroutine sub1(opt)
    integer, allocatable, optional :: opt(:)
    call sub2(opt)
  end subroutine

  subroutine sub2(opt)
    integer, optional :: opt(:)
  end subroutine

end program

Я не собираюсь размещать opt в sub2, поэтому я не указывал там атрибут allocatable. Если я сделаю его доступным для обеих подпрограмм или необязательным, или если я передам фактический аргумент в вызове sub1, то код завершится без ошибок. Тот же код также отлично работает при компиляции с помощью gfortran из gcc версии 8.3.0 20190222.

Это ошибка компилятора или я здесь что-то незаконно делаю?


person DartLenin    schedule 06.03.2020    source источник


Ответы (1)


Fortran 2018 запрещает использование opt в sub1. Ограничения на отсутствие необязательных фиктивных аргументов включают (15.5.2.12):

На необязательный фиктивный аргумент, которого нет, действуют следующие ограничения.

...

(8) Если он может быть размещен, он не должен выделяться, освобождаться или предоставляться в качестве фактического аргумента, соответствующего необязательному нераспределяемому фиктивному аргументу.

person francescalus    schedule 06.03.2020