Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.
29283 Discussions

Internal Compiler Error despite directive

Dalziel__Stuart
Beginner
659 Views
I understand that XE 2011 is not yet certified with the IMSL libraries...

I also understand that my using the IMSL libraries from an earlier version of IVF could cause problems (although until now VNI\\CTT6.0 has worked fine for me with IVF11.1).

However, in my view, the following code segment should compile with XE2011(even if it doesn't do anything useful) since the compiler should not process the fit_surface(..) function.

subroutine FitSurface()
include 'link_f90_static.h'
use surface_fitting_int
use mp_types
real (8), automatic, pointer :: sData(:,:)
real (8), automatic, pointer :: Coeffs(:,:)
type (d_spline_knots), automatic :: knotX,knotY
!DEC$ if (__Intel_Compiler .eq. 1200)
! Do nothing if XE 2011
!DEC$ else
Coeffs = surface_fitting(data=sData,knotsx=knotX,knotsy=knotY)
!DEC$ endif
return
end subroutine

The compiler output (under Dev Studio 2010 on a 64-bit Windows machine) is:

Compiling with Intel Visual Fortran Compiler XE 12.0.0.104 [IA-32]...
Fit.for
fortcom: Fatal: There has been an internal compiler error (C0000005).
compilation aborted for S:\\Users\\Stuart\\TEST\\Fortran\\SurfaceFitting\\SurfaceFitting\\Fit.for (code 1)

The problem is not caused by the include or use directives, as can be shown by renaming surface_fitting(..) to something else. I am using IMSL routines elsewhere and they are not causing the same problem (although I have not got as far as testing to see if they work rather than just compile).

This therefore seems like one for the bug list.

Thanks,

Stuart.

0 Kudos
3 Replies
Steven_L_Intel1
Employee
659 Views
Thanks, we'll take a look at this.
0 Kudos
Dalziel__Stuart
Beginner
659 Views
In case anyone else strikes a similar problem...

The work around that solves the compiler error issue (although does not allow the IMSL routine to work) is a bit of renaming and extra conditional compilation:

subroutine FitSurface()
nclude 'link_f90_static.h'
!DEC$ if (__Intel_Compiler .eq. 1200)
! Can't use IMSL stuff
!DEC$ else
use surface_fitting_int, x_surface_fitting => d_surface_fitting
!DEC$ endif
use mp_types
real (8), automatic, pointer :: sData(:,:)
real (8), automatic, pointer :: Coeffs(:,:)
type (d_spline_knots), automatic :: knotX,knotY
!DEC$ if (__Intel_Compiler .eq. 1200)
! Can't use IMSL stuff
!DEC$ else
Coeffs = x_surface_fitting(data=sData,knotsx=knotX,knotsy=knotY)
!DEC$ endif
return
end subroutine

Just sticking "use surface_fitting_int" into a !DEC$ IF is not sufficient. The combination of this and the renaming, however, works.

While I want to get the IMSL routines up and running again, at least this gives me a way forwards without breaking the code on the working CVF6.6b and IVF11.1 compilers I am currently relying on.

Stuart.

0 Kudos
Steven_L_Intel1
Employee
659 Views
Thanks for this. I can reproduce the problem with the version 12 compiler and the old IMSL modules, but not when the new IMSL modules (from the version in qualification) are used. I suggest that you continue to use the 11.1 compiler until we release the updated IMSL.
0 Kudos
Reply