Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
Announcements
Welcome to the Intel Community. If you get an answer you like, please mark it as an Accepted Solution to help others. Thank you!

bug with copying a large array

kay-diederichs
Beginner
91 Views

Hi,

I found a problem with ifort 18.0.3 on a x86_64 machine.  This code

PROGRAM bug
  IMPLICIT NONE
  INTEGER(SELECTED_INT_KIND(9)) :: i
  INTEGER(SELECTED_INT_KIND(18)) :: nobs,k8=10000000,i8
  INTEGER, ALLOCATABLE :: obs(:),temp_obs(:)
  
  ALLOCATE(obs(10000000))
  nobs=0
  DO i8=1,INT(HUGE(i),KIND=8)*2 - 1000000
    i=1   ! replacement for READ(...)i
    nobs=nobs+1
    IF (nobs==k8) THEN
      k8=2*k8
    END IF
    IF (nobs>SIZE(obs,KIND=8)) THEN   
      ALLOCATE(temp_obs(2*SIZE(obs,KIND=8)))
      temp_obs(:SIZE(obs,KIND=8))=obs  ! temp_obs(1:SIZE ... fixes this!
      PRINT*,temp_obs(1),nobs
      CALL MOVE_ALLOC(temp_obs,obs)
      PRINT*,obs(1),nobs
      IF (obs(1) /= 1) STOP 'this is wrong'
    END IF
    obs(nobs)=i
  END DO
  STOP 'finished without error'
END PROGRAM bug

shows that the

temp_obs(:SIZE(obs,KIND=8))=obs 

line does not work right - it seems to zero the temp_obs array, instead of copying the obs array.

The bug is not triggered if the line is replaced by

temp_obs(1:SIZE(obs,KIND=8))=obs 

The bug is not present in gfortran.

Warning: you need a machine with enough RAM - 24 GB is enough; maybe 16GB suffices.

Thanks,

Kay

 

 

0 Kudos
0 Replies
Reply