Интересно.gfortran 4.6 находит ошибку индекса времени выполнения:
At line 18 of file test_code.f90
Fortran runtime error: Index '5' of dimension 1 of array 'r' above upper bound of 1
, а ifort XE 12.1.1.246 - нет.
РЕДАКТИРОВАТЬ: вот ответ из документации компилятора Intel: «Для массивов, которые являются фиктивными аргументами, проверяется только нижняя граница для измерения, верхняя граница которого указана как * или где верхняя и нижняя границы являютсяоба 1. "И когда объявление изменяется на R (2), ifort также обнаруживает ошибку индекса.
Причина этого в том, что во многих старых кодах значение «1» использовалось для размера массива фиктивного аргумента, чтобы указатьнеизвестный размер.Это работает, если вы просто рассматриваете аргумент как адрес, но, конечно, делаете невозможной любую проверку нижнего индекса, потому что компилятор не знает размер фиктивного аргумента.Эта техника не должна использоваться в новом коде.Fortran 90 предоставляет лучшие варианты, например, массивы предполагаемой формы (объявление двоеточия).
Таким образом, ответ на вопрос «не всегда ясно (для меня), может ли это происходить», т. Е. Когда ваш устаревший код не 't проверяется ifort - ищет аргументы процедуры, объявленные как (1) или (*) или одинаковые для одного или нескольких измерений.