I recently upgraded to ifort 16.0 from ifort 15.0.3 for OS X and have encountered an ICE and also an unexpected segmentation fault.
I experience the ICE when I have two derived types. The first is a component of the second. The first has an empty finalization procedure, which seems to cause the ICE. Both types have overloaded operators.
module subtype
implicit none
type, public :: subtype_t
real :: val
contains
final :: destructor
end type subtype_t
public operator (*)
interface operator (*)
module procedure op
end interface
contains
elemental function op(left,right) result(res)
real, intent(in) :: left
type(subtype_t), intent(in) :: right
type(subtype_t) :: res
res%val = left * right%val
end function
subroutine destructor(self)
type(subtype_t), intent(inout) :: self
end subroutine
end module
The above subtype_t is a component of a second derived type of similar structure as
module type
use subtype
implicit none
type, public :: type_t
type(subtype_t), allocatable :: lvecs(:)
end type type_t
public operator (*)
interface operator (*)
module procedure op_two
end interface
contains
function op_two(left,right) result(res)
real, intent(in) :: left
type(type_t), intent(in) :: right
type(type_t) :: res
res%lvecs = left * right%lvecs
end function
end module
Trying to compile the above modules with ifort-16.0 -c -assume realloc-lhs produces an ICE. If the finalization procedure is commented out in subtype_t the code compiles without error. ifort-15.0.3 compiles in either case without error.
Assuming the finalization procedure has been commented out and the modules compile, I experience a run-time segmentation fault when testing the multiplication operator with ifort-16.0 using -assume realloc-lhs.
program main
use type
implicit none
type(type_t) :: testing, res
! Allocate derived type component
allocate(testing%lvecs(1))
! Assign values
testing%lvecs(1)%val = 1.
! Test multiplication operation
! Seg-fault with ifort 16.0 using -assume realloc-lhs
! Executes without error using ifort 15.0.3
res = 1. * testing
end program main
Source files are attached.
連結已複製
Just remembered the segmentation fault regression in 16.0 was brought up in a previous post: