http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58498
Bug ID: 58498 Summary: Bogus "Invalid kind for INTEGER" Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: janus at gcc dot gnu.org Reported by James van Buskirk at https://groups.google.com/forum/?fromgroups#!topic/comp.lang.fortran/hb2_DNa5ylY Considering the (supposedly valid) code: module intkinds implicit none private integer, parameter :: Kmax = 10 integer, parameter :: K1 = selected_int_kind(1) integer, parameter :: tK2 = selected_int_kind(range(0_K1)+1) integer, parameter :: cK2 = (sign(1,tK2)+1)/2 integer, parameter :: K2 = cK2*tK2+(1-cK2)*K1 integer, parameter :: tK3 = selected_int_kind(range(0_K2)+1) integer, parameter :: cK3 = (sign(1,tK3)+1)/2 integer, parameter :: K3 = cK3*tK3+(1-cK3)*K2 integer, parameter :: tK4 = selected_int_kind(range(0_K3)+1) integer, parameter :: cK4 = (sign(1,tK4)+1)/2 integer, parameter :: K4 = cK4*tK4+(1-cK4)*K3 integer, parameter :: tK5 = selected_int_kind(range(0_K4)+1) integer, parameter :: cK5 = (sign(1,tK5)+1)/2 integer, parameter :: K5 = cK5*tK5+(1-cK5)*K4 integer, parameter :: tK6 = selected_int_kind(range(0_K5)+1) integer, parameter :: cK6 = (sign(1,tK6)+1)/2 integer, parameter :: K6 = cK6*tK6+(1-cK6)*K5 integer, parameter :: tK7 = selected_int_kind(range(0_K6)+1) integer, parameter :: cK7 = (sign(1,tK7)+1)/2 integer, parameter :: K7 = cK7*tK7+(1-cK7)*K6 integer, parameter :: tK8 = selected_int_kind(range(0_K7)+1) integer, parameter :: cK8 = (sign(1,tK8)+1)/2 integer, parameter :: K8 = cK8*tK8+(1-cK8)*K7 integer, parameter :: tK9 = selected_int_kind(range(0_K8)+1) integer, parameter :: cK9 = (sign(1,tK9)+1)/2 integer, parameter :: K9 = cK9*tK9+(1-cK9)*K8 integer, parameter :: tK10 = selected_int_kind(range(0_K9)+1) integer, parameter :: cK10 = (sign(1,tK10)+1)/2 integer, parameter :: K10 = cK10*tK10+(1-cK10)*K9 integer, parameter :: iKsize = 1+cK2+cK3+cK4+cK5+cK6+cK7+cK8+cK9+cK10 integer, parameter :: tKINDS(Kmax) = (/K1,K2,K3,K4,K5,K6,K7,K8,K9,K10/) integer, parameter, public :: iKINDS(iKsize) = tKINDS(1:iKsize) end module intkinds program testme use intkinds implicit none integer iRANGES(size(iKINDS)) integer i iRANGES = (/(range(int(0,iKINDS(i))),i=1,size(iKINDS))/) write(*,*) 'iKINDS = ',iKINDS write(*,*) 'iRANGES = ', iRANGES end program testme This is rejected by gfortran 4.7 and earlier with: iRANGES = (/(range(int(0,iKINDS(i))),i=1,size(iKINDS))/) 1 Error: 'kind' argument of 'int' intrinsic at (1) must be a constant 4.8 and trunk report: iRANGES = (/(range(int(0,iKINDS(i))),i=1,size(iKINDS))/) 1 Error: Invalid kind for INTEGER at (1) Both errors are apparently wrong, since the KIND argument to the intrinsic INT shall be a scalar integer initialization expression, which it seems to be in this case (for further details and standard quotes see the c.l.f. thread).