Следующий код 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 из g cc версии 8.3.0 20190222.
Это ошибка компилятора или я что-то здесь не так делаю?