https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86151

            Bug ID: 86151
           Summary: size() of unallocated array is nonzero
           Product: gcc
           Version: 8.0.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rbramley at letterboxes dot org
  Target Milestone: ---

Created attachment 44274
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44274&action=edit
version of code sizetest.f90

In the following program, gfortran 8.0.1 shows the size of an unallocated array
as being 1 in both dimensions, but a correct shape of [0 0]:

program sizetest
    use iso_fortran_env, only: real8 => real64, stdout => output_unit
    implicit none
    integer, parameter:: n = 3, m = 4
    real(real8), allocatable :: x(:,:)
    real(real8), allocatable :: z(:,:)

    allocate(x(m,n))

    write(stdout,*) '==================================='
    write(stdout,*) 'Allocated 2D array x: '
    write(stdout,*) 'shape(x)  = ', shape(x)
    write(stdout,*) 'size(x)   = ', size(x)
    write(stdout,*) 'size(x,1) = ', size(x,1)
    write(stdout,*) 'size(x,2) = ', size(x,2)

    write(stdout,*) '==================================='
    write(stdout,*) 'Unallocated 2D array z: '
    write(stdout,*) 'shape(z)   = ', shape(z)
    write(stdout,*) 'size(z)    = ', size(z)
    write(stdout,*) 'size(z,1)  = ', size(z,1)
    write(stdout,*) 'size(z,2)  = ', size(z,2)
end program sizetest

(I've also put the code as an attachment in case it's easier for you to extract
that way, versus using cut and paste.)

The output using gfortran with default options is:
 ===================================
 Allocated 2D array x: 
 shape(x)  =            4           3
 size(x)   =           12
 size(x,1) =            4
 size(x,2) =            3
 ===================================
 Unallocated 2D array z: 
 shape(z)   =            0           0
 size(z)    =            1
 size(z,1)  =            1
 size(z,2)  =            1

For the array x, all is as expected. For z, however, I expected all three
size() inquiries to yield 0. Intel fortran returns zeros for those. It's not
clear to me if the size of an unallocated array is specified by the Fortran
standard, or is in the category of "just don't do that".

Irrelevant addendum: I really appreciate the years of hard work and effort the
gfortran team has put into the project. And the patience you've show for fools
and noobs with dumb questions, a category this report may end up falling into.
In any case, thank you for creating a tool of great use to many people.

Reply via email to