James Van Buskirk found the following bug, see http://groups.google.com/group/comp.lang.fortran/browse_thread/thread/1cc4ce4ecec2933d integer, parameter :: k_k11 = kind(int(Parg1,kind=k11)) 1 Internal Error at (1): gfc_validate_kind(): Got bad kind module bugmod parameter(ik1 = selected_int_kind(2)) implicit complex (P) contains subroutine bug1(P1) integer(ik1), parameter :: k11 = ik1 complex, parameter :: carg1 = 0 parameter(Parg1 = carg1) integer, parameter :: k_k11 = kind(int(Parg1,kind=k11)) end subroutine bug1 end module bugmod
Here's a reduced testcase subroutine bug1 integer, parameter :: ik1 = 1 integer, parameter :: k_k11 = kind(int((0.,0.), kind=ik1)) end subroutine bug1 If (0.,0.) is replaced by either 0 (i.e., INTEGER) or 0. (i.e., REAL), then the code compiles. If ik1 is 1, 2, or 16, then the ICE occurs. For ik1 = 4 or 8, the code compiles.
I have a patch for this bug.
Subject: Bug 36239 Author: jvdelisle Date: Fri May 16 03:41:17 2008 New Revision: 135408 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=135408 Log: 2008-05-15 Steven G. Kargl <kargls@comcast.net> * simplify.c (gfc_simplify_dble, gfc_simplify_float, simplify_bound, gfc_simplify_nearest, gfc_simplify_real): Plug possible memory leaks. (gfc_simplify_reshape): Plug possible memory leaks and dereferencing of NULL pointers. 2008-05-15 Steven G. Kargl <kargls@comcast.net> PR fortran/36239 * simplify.c (gfc_simplify_int, gfc_simplify_intconv): Replaced hand rolled integer conversion with gfc_int2int, gfc_real2int, and gfc_complex2int. (gfc_simplify_intconv): Renamed to simplify_intconv. 2008-05-15 Steven G. Kargl, <kargl@comcast.net> * gfortran.dg/and_or_xor.f90: New test * fortran/simplify.c (gfc_simplify_and, gfc_simplify_or, gfc_simplify_xor): Don't range check logical results. Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/intrinsic.texi trunk/gcc/fortran/simplify.c
Fixed on trunk