Quantcast
Channel: Intel® Fortran Compiler
Viewing all articles
Browse latest Browse all 3270

Is this a bug in ifort ?

$
0
0

I think i'm observing a bug in ifort.
 
$> ifort test.f90 -O1 -g  && ./a.out
    6 0 0 0 0 0 0
    1 0
$> ifort test.f90 -O0 -g  && ./a.out
    6 0 0 0 0 0 0
    6 0 0 0 0 0 0

The second result is the good one, and I see no reason for the difference.

file test.f90 :

   module useless_module
    ! this module is useless
    ! remove it and the bug disappear
      implicit none
    ! those variables are useless
    ! they will never be touched
    ! remove one of them and the bug disappear
    ! rename one of them and the bug disappear
      integer,allocatable,dimension(:) :: num_dr , &
                                          num_cf , &
                                          num_cfi, &
                                          num_num, &
                                          num_typ
    end module useless_module

    program test_program
      implicit none
    ! those variables are useless
    ! they will never be touched
    ! remove one of them and the bug disappear
      integer,allocatable,dimension(:) :: a1, b1, c1, d1, &
                                          e1, g1, f1, h1, &
                                          i1, j1, k1

      call routine_1(a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1)
    contains

      subroutine routine_1(a3,b3,c3,d3,e3,f3,num_cf,num_dr, &
                           num_typ,num_num,num_cfi)
        implicit none
    ! those arguments are useless
    ! they will never be touched
    ! remove one of them and the bug disappear
          integer,allocatable,dimension(:)     :: a3,b3,c3,d3,e3,f3
    ! those arguments are useless
    ! they will never be touched
    ! remove one of them and the bug disappear
    ! rename one of them and the bug disappear
          integer,allocatable,dimension(:)     :: num_dr , &
                                                  num_cf , &
                                                  num_cfi, &
                                                  num_num, &
                                                  num_typ
    ! this variable is useless
    ! it will never be touched
    ! remove it and the bug disappear
          integer,allocatable,dimension(:)     :: g3
    ! those variables are actualy used !
          integer,allocatable,dimension(:,:,:) :: h3,i3,j3

          allocate(h3(1,1,1),i3(1,1,1),j3(1,1,1))

          call routine_2(g3,i3,j3)

    ! here, normaly, size(i3)=6 and i3= 0 0 0 0 0 0
    ! But that is not what is printed : BUG ?
    ! printing size(i3) AND i3 is mandatory to make the bug happen
          write(*,'(7i2)') size(i3),i3
          deallocate(h3,i3,j3)
      end subroutine routine_1

      subroutine routine_2(a2,b2,c2)
        use useless_module
        implicit none
          integer,allocatable,dimension(:)     :: a2,d2,e2,f2,g2
          integer,allocatable,dimension(:,:,:) :: b2, c2
          integer                              :: j2

    ! j2 have to be be a variable
          j2=1
    ! allocate and deallocate some array
    ! not doing that will make the bug desappear
          allocate  (d2(j2),e2(1),f2(1),g2(1))
          deallocate(d2   ,e2    ,f2   ,g2)

          call reallocate(  c2,3,2,1)
          call reallocate(  b2,3,2,1) ;   b2=0

    ! here, we have size(b2)=6 and b2= 0 0 0 0 0 0
    ! printing size(b2) AND b2 is mandatory to make the bug happen
          write(*,'(7i2)') size(b2),b2
      end subroutine routine_2

      subroutine reallocate(a4,b4,c4,d4)
        implicit none
        integer,allocatable,dimension(:,:,:) :: a4
        integer                              :: b4,c4,d4

        deallocate(a4) ; allocate(a4(b4,c4,d4))

      end subroutine reallocate

    end program test_program

As you can see, I'm doing nothin fancy.
I tried to reduce the code a much as i could
I tried on three computer under linux (ubuntu and archlinux) with three version of ifort (15.0.0 20140723, 15.0.2 20150121 and 14.0.0 20130728)
I always see the same thing.

I don't see it with gfortran (4.8.2 or 5.1.0)

It seems big, and I'm sure I'm making a mistake, but I don't see it.

Any help will be appreciated

remark : I have also posted this question here.


Viewing all articles
Browse latest Browse all 3270

Trending Articles