- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The Intel Parallel Studio XE 2017 Fortran compiler produces code which crashes with omitted optional intent out arguments of an abstract type.
The previous version of the compiler did not have this problem:
forrtl: severe (157): Program Exception - access violation
program prog
use sub_module
use simple_exception_module
implicit none
type(simple_exception_type) :: exception
character(:), allocatable :: message
call sub( exception )
if ( exception%catch( message ) ) then
write(*,*) message
end if
call sub() ! crashes here
end program prog
module sub_module
use exception_module
implicit none
contains
subroutine sub( exception )
class(exception_type), intent(out), optional :: exception
if ( present( exception ) ) then
call exception%throw( 'Exception in sub' )
end if
end subroutine sub
end module sub_module
module simple_exception_module
use exception_module
implicit none
private
type, extends(exception_type), public :: simple_exception_type
character(:), allocatable, private :: message
contains
procedure :: throw
procedure :: catch
end type simple_exception_type
contains
subroutine throw( exception, message )
class(simple_exception_type), intent(inout) :: exception
character(*), intent(in) :: message
exception%message = message
end subroutine throw
logical function catch( exception, message )
class(simple_exception_type), intent(inout) :: exception
character(:), allocatable, intent(out) :: message
if ( allocated( exception%message ) ) then
message = exception%message
catch = .true.
else
catch = .false.
end if
end function catch
end module simple_exception_module
module exception_module
implicit none
type, abstract :: exception_type
contains
procedure(throw_proc), deferred :: throw
procedure(catch_proc), deferred :: catch
end type exception_type
abstract interface
subroutine throw_proc( exception, message )
import
class(exception_type), intent(inout) :: exception
character(*), intent(in) :: message
end subroutine throw_proc
end interface
abstract interface
logical function catch_proc( exception, message )
import
class(exception_type), intent(inout) :: exception
character(:), allocatable, intent(out) :: message
end function catch_proc
end interface
end module exception_module
Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks - I can reproduce this and will send it on to the developers. Issue ID DPD200414727
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I expect this bug to be fixed in Update 2 to Parallel Studio XE 2017.
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page