私が使用しているコードが gcc v. 4.4.6 でビルドすると、配列サイズの不一致が原因で実行されないことがわかり、不愉快な驚きを覚えました。gcc v. 4.7.3 でビルドすると問題なく動作しました。問題の根本を示すために、最小限の実例を作成しました。
program main
implicit none
integer, allocatable, dimension(:,:) :: array_a
integer, allocatable, dimension(:,:) :: array_b
allocate(array_a(5,2))
allocate(array_b(2,1))
array_a = 1
array_b = array_a
print *, array_a
print *, array_b
end program main
gcc v. 4.4.6 でビルドすると、実行時に次のエラーでクラッシュします。
ファイル main.f90 の 13 行目で Fortran ランタイム エラー: 配列バインドの不一致、配列 'array_b' の次元 1 のサイズの不一致 (1/4)
gcc v. 4.7.3 でビルドすると、次の出力が生成されます。
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
「array_a」のサイズに合わせて「array_b」のサイズが自動的に変更されることに注意してください。これは、私が目にしている新しい Fortran 標準によって提供される「機能」ですか?