ฉันพยายามรวบรวมโค้ด O-O fortran ด้วยคอมไพเลอร์ fortran ของชุด Oracle Solaris Studio 12.4 (ล่าสุดเท่าที่ฉันรู้) แต่คอมไพเลอร์ขัดข้อง นี่คือปัญหาของฉันในเวอร์ชันที่เรียบง่าย
ฉันกำหนดประเภทง่าย ๆ สองประเภทโดยแต่ละประเภทมีขั้นตอนผูกมัดประเภทเดียว หนึ่งในโพรซีเดอร์มีตัวแปรประเภทอื่นเป็นอาร์กิวเมนต์จำลอง:
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
โปรแกรมนี้คอมไพล์และทำงานได้ดีกับ gfortran:
[> gfortran myprog.f03 -o myprog.x
[> ./myprog.x
7.0
อย่างไรก็ตาม การคอมไพล์ด้วย Solaris f95 ขัดข้อง:
[> f95 myprog.f03 -o myprog.x
f90: Internal Error, code=fw-interface-ctyp1-796, last src=myprog.f03:4
หากฉันทำการลดความซับซ้อนของซอร์สโค้ดเพิ่มเติม แสดงว่าคอมไพล์ f95 ได้สำเร็จ ตัวอย่างเช่น มันจะทำงานได้ดีหาก:
type0
ไม่มีขั้นตอนที่ผูกกับประเภทtype1
ไม่มีขั้นตอนที่ผูกกับประเภท- ขั้นตอน
print_diff
ถูกแทนที่ด้วยรูทีนย่อยที่ไม่มีอาร์กิวเมนต์อื่นนอกจากself
มีอะไรที่ฉันทำผิดหรือเปล่า? มีปัญหาในการติดตั้งกับคอมไพเลอร์ Solaris ของฉันหรือไม่? มีใครสามารถคอมไพล์โค้ดนี้กับคอมไพเลอร์ Solaris ตัวอื่นได้สำเร็จหรือไม่ มีใครรู้บ้างว่ารหัสข้อผิดพลาดหมายถึงอะไร (ฉันไม่สามารถค้นหาได้)
Internal Error
มันง่ายอย่างที่คิด นั่นคือจุดบกพร่องในซอฟต์แวร์ (คอมไพเลอร์) ไม่มีอะไรใหม่. แจ้งความแล้วหวังว่าจะได้รับการแก้ไข อาจได้รับการแก้ไขแล้ว แต่แพตช์อาจไม่พร้อมใช้งานสำหรับคุณ ขึ้นอยู่กับว่าคุณชำระค่าสนับสนุนให้กับ Oracle หรือไม่ - person Vladimir F   schedule 24.11.2015