fitur berorientasi objek dengan kompiler Solaris/Oracle Fortran

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 tipe
  • type1 tidak memiliki prosedur terikat tipe
  • prosedur print_diff digantikan oleh subrutin tanpa argumen lain selain self

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)?


person Reno    schedule 24.11.2015    source sumber
comment
Secara umum kesalahan internal berarti kompiler mempunyai bug. Biasanya ini adalah sesuatu yang perlu didiskusikan dengan vendor.   -  person francescalus    schedule 24.11.2015
comment
Saya dapat mengonfirmasi kesalahan pada mesin saya. Dengan gfortran ia mengkompilasi dan mencetak 7. Ini adalah bug di kompiler dan Anda harus melaporkannya ke Oracle. Patch mungkin hanya tersedia untuk pelanggan yang membayar. Anda dapat mencoba mencari solusinya.   -  person Vladimir F    schedule 24.11.2015
comment
Bukankah ini kode F2003? Jadi apa yang membuat Anda berpikir Anda bisa mengkompilasinya dengan kompiler F95? Penafian: Saya belum pernah menggunakan kompiler Oracle sebelumnya.   -  person NoseKnowsAll    schedule 24.11.2015
comment
@NoseKnowsAll: Ya, f95 berdasarkan standar fortran95 tetapi juga mencakup banyak fitur/ekstensi 200x. Secara khusus, dokumentasi menyatakan: Dukungan lengkap untuk polimorfisme di Fortran 2003 tersedia. Mungkin itu tidak termasuk dukungan penuh terhadap prosedur yang terikat tipe.   -  person Reno    schedule 24.11.2015
comment
Ini secara resmi mendukung mereka, tetapi mereka memiliki bug. Baca lagi: 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
comment
Jelas kompiler tidak seharusnya mogok. Jika beberapa fitur tidak didukung, fitur tersebut seharusnya memberi tahu pengguna dan mengembalikan pesan kesalahan kompilasi. Yang saya maksudkan adalah bahwa fitur-fitur OO mungkin masih berada pada tahap eksperimental atau belum teruji dengan baik dengan kompiler ini (walaupun dinyatakan berbeda), dibandingkan dengan standar non-OO. Makanya lebih banyak disadap. Saya mengirim pemberitahuan ke Oracle sore ini. Menunggu tanggapan dari mereka...   -  person Reno    schedule 24.11.2015


Jawaban (1)


Setelah melaporkan masalah saya ke Oracle, saya baru saja mendapat jawaban:

Terima kasih telah melaporkan ini dan maaf atas masalahnya. Ini adalah masalah yang diketahui. Ini telah diperbaiki dalam pengembangan kami saat ini dan di-porting ke Studio 12.4. Jika Anda memiliki kontrak dukungan, Anda bisa mendapatkan patch Studio 12.4 untuk itu, jika tidak, rilis berikutnya akan berisi perbaikannya.

person Reno    schedule 24.11.2015