Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

ICE with OpenMP workshare construct

Harald
Beginner
279 Views

Hello,

the following code leads to an internal compiler error:

module ifc_openmp_workshare_bug
  implicit none
  type t
     real, pointer :: u(:,:)
  end type t
contains
  subroutine sub (z, x, y)
    real,    intent(out) :: z(:,:)
    type(t), intent(in)  :: x
    type(t), intent(in)  :: y
!$omp parallel workshare
    z = x%u * y%u
!$omp end parallel workshare
  end subroutine sub
end module ifc_openmp_workshare_bug
% ifort -V -c -fopenmp ifort_omp.f90
Intel(R) Fortran Compiler XE for applications running on IA-32, Version 15.0.5.223 Build 20150805
Copyright (C) 1985-2015 Intel Corporation.  All rights reserved.
FOR NON-COMMERCIAL USE ONLY

 Intel(R) Fortran 15.0-1818
010101_13492

catastrophic error: **Internal compiler error: internal abort** 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 ifort_omp.f90 (code 1)

Thanks,

Harald

 

0 Kudos
1 Solution
Lorri_M_Intel
Employee
279 Views

Kevin - This was repaired in 16.0 under tracking id DPD200370580.

Harald - thanks for your report, especially the nice compact example.
The fix was not ported back to the 15.0 stream, but there is a workaround if you're not able to upgrade.

Change this line:

 z = x%u * y%u

to this:

 z(:,:) = x%u(:,:) * y%u(:,:)

    Thanks -- 

           --Lorri

View solution in original post

0 Kudos
4 Replies
Kevin_D_Intel
Employee
279 Views

Thank you for reporting this internal error. It appears we already have a fix in our latest 16.0 compiler. I we see whether I can track down any past internal tracking id associated with an explicit fix.

$ ifort -V
Intel(R) Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 16.0.0.109 Build 20150815
Copyright (C) 1985-2015 Intel Corporation.  All rights reserved.

$ ifort -c -qopenmp u596039.f90
$

 

0 Kudos
Lorri_M_Intel
Employee
280 Views

Kevin - This was repaired in 16.0 under tracking id DPD200370580.

Harald - thanks for your report, especially the nice compact example.
The fix was not ported back to the 15.0 stream, but there is a workaround if you're not able to upgrade.

Change this line:

 z = x%u * y%u

to this:

 z(:,:) = x%u(:,:) * y%u(:,:)

    Thanks -- 

           --Lorri

0 Kudos
Kevin_D_Intel
Employee
279 Views

Thank you Lorri!

0 Kudos
Harald
Beginner
279 Views

Lorri,

thanks for pointing out a quick workaround.  By playing around I found that it can even be shortened to

    z(:,:) = x%u * y%u

to avoid the ICE.  :-)

Harald

 

Lorri Menard (Intel) wrote:

Kevin - This was repaired in 16.0 under tracking id DPD200370580.

Harald - thanks for your report, especially the nice compact example.
The fix was not ported back to the 15.0 stream, but there is a workaround if you're not able to upgrade.

Change this line:

 z = x%u * y%u

to this:

 z(:,:) = x%u(:,:) * y%u(:,:)

    Thanks -- 

           --Lorri

0 Kudos
Reply