http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58498
Dominique d'Humieres <dominiq at lps dot ens.fr> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2013-09-22 Ever confirmed|0 |1 --- Comment #3 from Dominique d'Humieres <dominiq at lps dot ens.fr> --- I get the same error if I replace iRANGES = (/(range(int(0,iKINDS(i))),i=1,size(iKINDS))/) with do i = 1, size(iKINDS) print *, range(int(0,iKINDS(i))) end do while print *, range(int(0,iKINDS(1))) print *, range(int(0,iKINDS(2))) ... gives the right answer. I think "print *, range(int(0,iKINDS(i)))" is invalid, however I cannot convince myself that iRANGES = (/(range(int(0,iKINDS(i))),i=1,size(iKINDS))/) is. If I am right, it seems that iKINDS(i) is not "expanded" as a constant in the constructor. The following code is working as expected module intkinds implicit none private integer, parameter :: Kmax = 10 integer, parameter :: K1 = selected_int_kind(1) integer, parameter :: rK1 = range(int(0,K1)) 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 :: rK2 = range(int(0,K2)) 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 :: rK3 = range(int(0,K3)) 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 :: rK4 = range(int(0,K4)) 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 :: rK5 = range(int(0,K5)) 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 :: rK6 = range(int(0,K6)) 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 :: rK7 = range(int(0,K7)) 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 :: rK8 = range(int(0,K8)) 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 :: rK9 = range(int(0,K9)) 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 :: rK10 = range(int(0,K10)) 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 :: tRANGES(Kmax) = (/rK1,rK2,rK3,rK4,rK5,rK6,rK7,rK8,rK9,rK10/) integer, parameter, public :: iKINDS(iKsize) = tKINDS(1:iKsize) integer, parameter, public :: iRANGES(iKsize) = tRANGES(1:iKsize) end module intkinds program testme use intkinds implicit none integer i write(*,*) 'iKINDS = ',iKINDS write(*,*) 'iRANGES = ', iRANGES end program testme