這個程序複製與Illegal instruction: 4
MacOSX上獅子和ifort(IFORT)崩潰12.1.0 20111011程序崩潰的陣列ifort
program foo
real, pointer :: a(:,:), b(:,:)
allocate(a(5400, 5400))
allocate(b(5400, 3600))
a=1.0
b(:, 1:3600) = a(:, 1:3600)
print *, a
print *, b
deallocate(a)
deallocate(b)
end program
同樣的計劃與gfortran。我沒有看到任何問題。有任何想法嗎 ?在兩個編譯器中展開副本並對列執行顯式循環。
請注意,使用allocatable而不是指針我沒有問題。
如果語句是在模塊內部或不在模塊內,則行爲相同。 我確認上ifort相同的行爲(IFORT)12.1.3 20120130.
顯然,Linux和ifort 12.1.5
沒有出現問題,我試圖增加與下面的鏈接選項的堆棧大小
ifort -Wl,-stack_size,0x40000000,-stack_addr,0xf0000000 test.f90
但我仍然得到相同的錯誤。增加ulimit -s到同樣的問題。
編輯2:我做了一些更多的調試,顯然當陣列拼接操作
b(:, 1:3600) = a(:, 1:3600)
涉及可疑接近16 M數據的值的問題發生。
我正在比較產生的操作碼,但如果有辦法看到更具溝通性的中間代碼表單,我很樂意欣賞它。
我還在Mac Snow Leopard上收到ifort 12.1.1.246的「非法指令」。我建議報告英特爾Fortran論壇或提交錯誤報告。也許它是固定在12.1.5? –
我在Mac Snow Leopard上使用ifort 12.0.3。也許這個bug已經存在了一點...... – EMiller
顯然,問題也存在於(某些)linux盒子上:代碼段錯誤在CentOS 5.5和ifort 12.1上。 –