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

ICE with 15.5 and 16.0 - can't pin location

Wolf_W_
New Contributor I
701 Views

Hello,

i accidentally forged a piece of code, that results in an ICE for intel fortran 15.5 and 16.0. I tried to break it down to a small reproducer, but it succesfully resists. Commenting out of nearly any line of code, even "implicit none" fixes the ICE. Enabling /debug:all or /warn:all or changing the order of the modules fixes it, too.

module M_NULLSTELLEN
  implicit none

contains

  pure function calcNullstellenNewtonMaehly(Pn, x0_in, max_iter) result(x_i)
    use, intrinsic :: iso_fortran_env, only: XP => real128
    implicit none

    real(4),           intent(in   ) :: Pn(0:)
    real(4), optional, intent(in   ) :: x0_in
    integer, optional, intent(in   ) :: max_iter

    real(4), dimension(size(Pn)-1)   :: x_i

    integer   :: i, k, iter
    integer   :: n
    real(4)  :: x_alt
    real(4)  :: x_neu
    real(4)  :: x0
    real(4)  :: f
    real(4)  :: df
    integer   :: m
    real(4)  :: x_epsilon
    real(4)  :: x_delta

    NULLSTELLEN : do i = 1, n-1
      m = 2
      x_neu = x0
      ! Following Line seems(?) to be the root of the problem
      ITERATIONEN : do iter = 1, merge(10, 100, x0<= 1.0)
        x_alt = x_neu

        do k = n-2,0,-1
          df = f + x_alt*df
          f  = Pn(k) + x_alt * f
        end do
        if(i==1) then
          x_neu = x_alt - f / df
        else
          x_neu = 1
        end if
        if( x_neu >= x_alt ) then
          m = 1
          x0 = x_alt - x_delta
          if( abs(x_neu - x_alt) < x_epsilon) exit ITERATIONEN
        end if
      end do ITERATIONEN
      x_i(i) = x_neu
    end do NULLSTELLEN

  end function calcNullstellenNewtonMaehly

end module M_NULLSTELLEN


module M_BEM_GAUSS_GEWICHTE
  use, intrinsic :: iso_fortran_env,  only: real128, real64, real32
  implicit none

  type, public :: DT_GAUSS_QUADRATUR

    real(4), private, allocatable :: gxi (:,:)

    integer,   private :: max_grad

  end type
  type(DT_GAUSS_QUADRATUR), public :: gauss_quadratur = DT_GAUSS_QUADRATUR(max_grad=0)

end module M_BEM_GAUSS_GEWICHTE

Greetings,

Wolf

0 Kudos
2 Replies
Kevin_D_Intel
Employee
701 Views

That's a perfectly good small reproducer just as it is. Thank you for your time/effort and for reporting this. I reproduced the error and reported it to Development.

(Internal tracking id: DPD200376914)

0 Kudos
Kevin_D_Intel
Employee
701 Views

This internal error is no longer reproducible with our current development compiler and Development believes changes in related areas corrected the condition triggering the error. The fix will be present in the upcoming PSXE 2016 Update 1 next month.

0 Kudos
Reply