Независимо от соответствия программы, первое сообщение об ошибке - бред: character
не является допустимым именем для производного типа.По крайней мере, об этом следует сообщить в службу поддержки Intel как о проблеме качества реализации.
Теперь, соответствует ли код?Вместо того, чтобы ответить на этот вопрос, я посмотрю на следующую программу:
integer :: i[*]
character(:), allocatable :: x
i=1
allocate(character(i[this_image()]) :: x)
end
Когда я скомпилирую с помощью ifort 18.0.2
test.f90(5): error #6457: This derived type name has not been declared. [CHARACTER]
allocate(character(i[this_image()]) :: x)
---------^
test.f90(5): error #8235: If type specification appears, the type and kind type parameters of each object being allocated must be the same as type and kind type parameters of the type specification. [X]
allocate(character(i[this_image()]) :: x)
---------------------------------------^
compilation aborted for test.f90 (code 1)
Давайте посмотрим, что должно произойти с этой программой.
1011 * Мы можем, вероятно, все согласны с тем, что единственной спорной линией является утверждением распределения, а лишь часть того, что сложно это (опять же) длинами типа параметра для спецификации типа.Итак, является ли
i[this_image()]
допустимым параметром типа здесь?
Это скалярное целочисленное выражение, и оно определено.Нам просто нужно определить, применяется ли какое-либо другое ограничение, которое нарушается.В Fortran 2008 его нет.
Компилятор не должен отклонять эту программу.
В качестве обходного пути для программы вопроса: создайте временную копию выражения non-coarray для использования в выражении длины.в отчете о распределении.