- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The following code produces an ICE with ifort 15.0 Build 20150407 (on Linux Intel(R) 64)
$ ifort -c testice.f90
testice.f90(50): warning #6178: The return value of this FUNCTION has not been defined. [RES]
elemental function met1(f) result(res)
-----------------------------------^
testice.f90(44): warning #6178: The return value of this FUNCTION has not been defined. [RES]
elemental function cnt_met1(f) result(res)
---------------------------------------^
testice.f90(38): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value.
elemental subroutine to_ta(y,x)
----------------------------^
testice.f90: catastrophic error: **Internal compiler error: segmentation violation signal raised** Please report this error along with the circumstances in which it occurred in a Software Problem Report. Note: File and line given may not be explicit cause of this error.
compilation aborted for testice.f90 (code 1)
module m1 implicit none type, abstract :: c_base contains private generic, public :: method => met1 procedure(i_met1), pass(f), deferred :: met1 end type c_base type, extends(c_base) :: t_cnt contains private procedure, pass(f) :: met1 => cnt_met1 end type t_cnt type, extends(c_base) :: t_a contains private procedure, pass(f) :: met1 end type t_a abstract interface elemental function i_met1(f) result(res) import :: c_base, t_cnt implicit none class(c_base), intent(in) :: f type(t_cnt) :: res end function i_met1 end interface interface assignment(=) module procedure to_ta end interface contains elemental subroutine to_ta(y,x) type(t_cnt), intent(in) :: x type(t_a), intent(out) :: y end subroutine to_ta elemental function cnt_met1(f) result(res) class(t_cnt), intent(in) :: f type(t_cnt) :: res end function cnt_met1 elemental function met1(f) result(res) class(t_a), intent(in) :: f type(t_cnt) :: res end function met1 end module m1 !---------------------- module m2 use m1 implicit none type :: t_g type(t_a), allocatable :: aa(:,:), bb(:) end type t_g contains subroutine s() integer :: i type(t_g) :: a allocate( a%aa(1,3), a%bb(3) ) a%aa(1,:) = a%bb%method() ! ICE do i=1,3 a%aa(1,i) = a%bb(i)%method() ! works enddo end subroutine s end module m2
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks - I can reproduce this and will escalate it to the developers. Even if the code was not valid, an internal compiler error is never appropriate. Issue ID is DPD200374956.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Steve, thank you.
Just to check my complete case from which this test was derived, why do you say that the code is not valid?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I didn't say the code is not valid. What I was trying to get across was that an ICE is never an acceptable response, no matter whether the code is valid or not.
As far as I can tell, your code is fine.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ah, thank you for clarifying, then I misunderstood your comment.
As for the ICE, yes, I understand that it should be always reported, both for valid and invalid code.
Marco
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I expect this problem to be fixed in Update 2, scheduled for February.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page