In the case of zero sized automatic arrays, LBOUND(array) and LBOUND(array,
DIM) can give different results:

program fred

  call jackal (3, 2)

contains

  subroutine jackal (b, c)
    integer :: b, c
    integer :: soda(b:c, 1:2)

    print *, "SIZE = ", size(soda)
    print *, "LBOUND (soda, DIM) = ", ubound (soda, 1), ubound(soda, 2)
    print *, "LBOUND (soda)      = ", ubound (soda)

  end subroutine jackal
end

gives:

 SIZE =            0
 LBOUND (soda, DIM) =            2           2
 LBOUND (soda)      =            2           0

>From my reading of the standard, it is the second LBOUND which is correct. ie.
the array soda is zero size in that dimension.

I have stared at the code until I am blue in the face but cannot see why there
is this difference in results.  I will attach a patch for trans-instrinsic.c
that fixes the conditions in gfc_conv_intrinsic_bound and the code that it
produces for print *, LBOUND(soda,2) and print *, LBOUND(soda).

Paul


-- 
           Summary: LBOUND (array) and LBOUND (array, DIM) give different
                    results.
           Product: gcc
           Version: 4.2.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: pault at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29489

Reply via email to