Saya telah mencoba mengkompilasi kode fortran OO dengan kompiler fortran dari suite Oracle Solaris Studio 12.4 (yang terbaru sejauh yang saya tahu). Tapi kompilernya crash. Ini adalah versi sederhana dari masalah saya.
Saya mendefinisikan dua tipe sederhana dengan masing-masing satu prosedur terikat tipe. Salah satu prosedur memiliki variabel tipe lain sebagai argumen tiruan:
MODULE MY_MODULE
type type0
real :: value = 0
contains
procedure :: print_value
end type type0
type type1
real :: value = 0
contains
procedure :: print_diff
end type type1
CONTAINS
subroutine print_value(self)
class(type0), intent(in) :: self
print*, self%value
end subroutine print_value
subroutine print_diff(self,var0)
class(type1), intent(in) :: self
type(type0), intent(in) :: var0
print*,self%value - var0%value
end subroutine print_diff
END MODULE MY_MODULE
PROGRAM MY_PROG
use my_module, only: type0,type1
type(type0) :: var0
type(type1) :: var1
var0%value = 3
var1%value = 10
call var1%print_diff(var0)
END PROGRAM MY_PROG
Program ini dikompilasi dan dijalankan dengan baik dengan gfortran:
[> gfortran myprog.f03 -o myprog.x
[> ./myprog.x
7.0
Namun, kompilasi dengan Solaris f95 macet:
[> f95 myprog.f03 -o myprog.x
f90: Internal Error, code=fw-interface-ctyp1-796, last src=myprog.f03:4
Jika saya melakukan penyederhanaan lebih lanjut pada kode sumber, maka f95 berhasil dikompilasi. Misalnya, ini berfungsi dengan baik jika:
type0
tidak memiliki prosedur terikat tipetype1
tidak memiliki prosedur terikat tipe- prosedur
print_diff
digantikan oleh subrutin tanpa argumen lain selainself
Apakah ada kesalahan yang saya lakukan? Apakah ada masalah instalasi dengan kompiler Solaris saya? Apakah seseorang berhasil mengkompilasi kode ini dengan kompiler Solaris lainnya? Adakah yang tahu apa arti kode kesalahan tersebut (saya belum bisa mengetahuinya)?
Internal Error
. Sesederhana itu, bug pada perangkat lunak (kompiler). Tidak ada yang baru. Laporkan dan harap ini diperbaiki. Ini mungkin sudah diperbaiki, tetapi patchnya mungkin tidak tersedia untuk Anda. Itu tergantung apakah Anda membayar dukungan kepada Oracle. - person Vladimir F   schedule 24.11.2015