คุณสมบัติเชิงวัตถุด้วยคอมไพเลอร์ Solaris/Oracle Fortran

ฉันพยายามรวบรวมโค้ด 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 ตัวอื่นได้สำเร็จหรือไม่ มีใครรู้บ้างว่ารหัสข้อผิดพลาดหมายถึงอะไร (ฉันไม่สามารถค้นหาได้)


person Reno    schedule 24.11.2015    source แหล่งที่มา
comment
โดยทั่วไปข้อผิดพลาดภายในหมายความว่าคอมไพเลอร์มีข้อบกพร่อง โดยปกติจะเป็นสิ่งที่ต้องหารือกับผู้ขาย   -  person francescalus    schedule 24.11.2015
comment
ฉันสามารถยืนยันข้อผิดพลาดบนเครื่องของฉันได้ ด้วย gfortran มันจะคอมไพล์และพิมพ์ 7 มันเป็นจุดบกพร่องในคอมไพเลอร์และคุณต้องรายงานไปยัง Oracle แพตช์อาจมีให้สำหรับลูกค้าที่ชำระเงินเท่านั้น คุณสามารถลองหาวิธีแก้ไขได้   -  person Vladimir F    schedule 24.11.2015
comment
นี่ไม่ใช่รหัส F2003 ใช่ไหม แล้วอะไรทำให้คุณคิดว่าคุณสามารถคอมไพล์ด้วยคอมไพเลอร์ F95 ได้? ข้อจำกัดความรับผิดชอบ: ฉันไม่เคยใช้คอมไพเลอร์ของ Oracle มาก่อน   -  person NoseKnowsAll    schedule 24.11.2015
comment
@NoseKnowsAll: อืม f95 เป็นไปตามมาตรฐาน fortran95 แต่ยังมีคุณสมบัติ/ส่วนขยาย 200x มากมาย โดยเฉพาะอย่างยิ่ง เอกสารระบุว่า: มีการสนับสนุนอย่างสมบูรณ์สำหรับความหลากหลายใน Fortran 2003 บางทีมันอาจจะไม่รวมถึงการสนับสนุนขั้นตอนที่ผูกกับประเภทอย่างสมบูรณ์   -  person Reno    schedule 24.11.2015
comment
มันสนับสนุนพวกเขาอย่างเป็นทางการ แต่ก็มีข้อบกพร่อง อ่านอีกครั้ง: Internal Error มันง่ายอย่างที่คิด นั่นคือจุดบกพร่องในซอฟต์แวร์ (คอมไพเลอร์) ไม่มีอะไรใหม่. แจ้งความแล้วหวังว่าจะได้รับการแก้ไข อาจได้รับการแก้ไขแล้ว แต่แพตช์อาจไม่พร้อมใช้งานสำหรับคุณ ขึ้นอยู่กับว่าคุณชำระค่าสนับสนุนให้กับ Oracle หรือไม่   -  person Vladimir F    schedule 24.11.2015
comment
แน่นอนว่าคอมไพเลอร์ไม่ควรเสียหาย หากคุณสมบัติบางอย่างไม่รองรับ ควรแจ้งให้ผู้ใช้ทราบและส่งคืนข้อความแสดงข้อผิดพลาดในการคอมไพล์ ฉันหมายถึงว่าฟีเจอร์ OO อาจยังอยู่ในขั้นตอนการทดลองหรือไม่ได้รับการทดสอบอย่างดีกับคอมไพเลอร์นี้ (แม้ว่าจะมีการระบุแตกต่างออกไป) เมื่อเปรียบเทียบกับมาตรฐานที่ไม่ใช่ OO จึงถูกรบกวนมากขึ้น ฉันส่งการแจ้งเตือนไปยัง Oracle เมื่อบ่ายวันนี้ รอการตอบรับจากพวกเขา...   -  person Reno    schedule 24.11.2015


คำตอบ (1)


หลังจากรายงานปัญหาของฉันไปยัง Oracle แล้ว ฉันเพิ่งได้รับคำตอบ:

ขอบคุณสำหรับการรายงานสิ่งนี้ และขออภัยสำหรับปัญหานี้ นี่เป็นปัญหาที่ทราบแล้ว ได้รับการแก้ไขแล้วในการพัฒนาปัจจุบันของเราและย้ายไปยัง Studio 12.4 หากคุณมีสัญญาการสนับสนุน คุณสามารถรับแพตช์ Studio 12.4 ได้ ไม่เช่นนั้นในรุ่นถัดไปจะมีการแก้ไข

person Reno    schedule 24.11.2015