Steve, Colleagues,
I installed Update 1 for release 15.0 and now several files containing multiple subroutines no longer compile. The code is stable, has not been modified in a very long time, and compiled without incident in the last version of 14 and with the initial release of 15.0. I generate both IA32 and x64 versions. There is no compiler error generating the IA32 version. For the simple code I list below I get the following when I compile for x64:
EXPR_ABS.MS128(t204_425)
FATAL ERROR : Compiler Internal Error
ifort: error #10273: Fatal error in C:\PROGRA~1\Intel\CO8318~1\bin\ia32_intel64\fortcom, terminated by 0x2
subroutine shaft_planes( verts1, verts2, shaft_plane, num_planes ) real(4) verts1(3,4), verts2(3,4), testvector(3,4,4), edges1(3,4), edges2(3,4), shaft_plane(4,8), possible(3) integer(4) num_planes edges1 = cshift(verts1,1,2)-verts1 edges2 = cshift(verts2,1,2)-verts2 !test vectors: from verts1 to verts2 do i=1,4 do j=1,4 testvector(:,i,j)=verts2(:,j)-verts1(:,i) end do end do MaxNumPlanes = num_planes num_planes = 0 ! planes will be hinged on the 4 edges of verts1 do i=1,4 !find a vertex of verts2 that forms bounding plane with edge i of verts1 verts2_loop: & do j=1,4 ! proposed plane normal for edge i of verts1 forms the 3 coeffs of (x,y,z) in the plane equation possible(1) = edges1(2,i)*testvector(3,i,j)-edges1(3,i)*testvector(2,i,j) possible(2) =-(edges1(1,i)*testvector(3,i,j)-edges1(3,i)*testvector(1,i,j)) possible(3) = edges1(1,i)*testvector(2,i,j)-edges1(2,i)*testvector(1,i,j) ! reject vertex j of verts2 if it is colinear with edge i of verts1 if( all(abs(possible) < 1.0e-4) ) cycle verts2_loop ! if we get here, we have a valid shaft plane. calc constant coeff in plane equation num_planes = num_planes + 1 possible = possible/sqrt( possible(1)**2+possible(2)**2+possible(3)**2 ) shaft_plane(1:3,num_planes) = possible shaft_plane(4,num_planes) = dot_product( possible,verts1(:,i)) exit !if we've filled the quota of planes, return if(num_planes==MaxNumPlanes) return end do verts2_loop end do return end subroutine shaft_planes
With an infinity of putzing, I found that the offending line is 25; the test of the absolute values of all the components of the vector possible. If this line is commented out, the routine compiles.
I am running Win7 32 (but notice I'm producing code for x64) in Visual Studio 2010. I'm asking for full optimization. The settings I using result in the following command line for the compiler (as reported by VS):
/nologo /debug:full /O3 /Qvec-threshold:0 /free /Qopenmp /Qopt-report:5 /Qopt-report-phase:openmp /fpe:0 /module:"Release 2.8x64 OMP\\" /object:"Release 2.8x64 OMP\\" /Fd"Release 2.8x64 OMP\vc100.pdb" /traceback /check:none /libs:static /threads /c
These settings are project-wide and since other routines are threaded, I have OpenMP 'on'.
Optimization /O2 or /O3 triggers the internal error. If I disable optimization with /Od, there is no internal error. Can you verify this problem? Should I return to the initial release of 15.0?
David