gfortran の elemental function で automatic array 取れない
Intel fortran では通るので、gfortran のバグかも知れないが、Intel fortran は gfortran 以上に文法にガバガバだしw
elemental でなければ pure でも通る。impure でも elemental つけると通らない。意味的には elemental で困る点は無いが、elemental subroutine/function の制約かも知れない。文法書をみてもすぐには分からない。 gfortran-7 でも -8 でも -9 でも引っかかる。
binder output
- 作者: Michael Metcalf,John Reid,Malcolm Cohen
- 出版社/メーカー: Oxford Univ Pr
- 発売日: 2018/11/06
- メディア: ハードカバー
- この商品を含むブログを見る
ASCII 出力
%compiler: gfortran-9 module m_divisor implicit none contains pure integer function ifun(n) integer, intent(in) :: n integer :: k(n) k = 1 ifun = sum(k) end function ifun end module m_divisor program test use m_divisor implicit none print *, ifun(10) stop 'normal end' end program test
10
STOP normal end
%compiler: gfortran-9 module m_divisor implicit none contains pure elemental integer function ifun(n) integer, intent(in) :: n integer :: k(n) k = 1 ifun = sum(k) end function ifun end module m_divisor program test use m_divisor implicit none print *, ifun(10) stop 'normal end' end program test
/mnt/d/ubuntu18/binder/modern_fortran/examples/temp/tmpih_fplg0.f90:6:21:
6 | integer :: k(n)
| 1
Error: Dummy argument ‘n’ not allowed in expression at (1)
/mnt/d/ubuntu18/binder/modern_fortran/examples/temp/tmpih_fplg0.f90:6:21:
6 | integer :: k(n)
| 1
Error: Dummy argument ‘n’ not allowed in expression at (1)
/mnt/d/ubuntu18/binder/modern_fortran/examples/temp/tmpih_fplg0.f90:13:8:
13 | use m_divisor
| 1
Fatal Error: Cannot open module file ‘m_divisor.mod’ for reading at (1): No such file or directory
compilation terminated.
[gfort kernel] fortran exited with code 1, the executable will not be executed