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

            Bug ID: 94070
           Summary: Assumed-rank arrays – bounds mishandled,
                    SIZE/SHAPE/UBOUND/LBOUND
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: burnus at gcc dot gnu.org
                CC: jrfsousa at gmail dot com
  Target Milestone: ---

Created attachment 47987
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=47987&action=edit
assumed_rank_19_aux.c – to be used with …

As found by José and reported at
https://gcc.gnu.org/ml/fortran/2020-03/msg00016.html

Testing shows that assumed-rank arrays are mishandled in several ways

* When required by the standard, the lower bound is not always shifted to "1"
  – this causes misreported bounds.
* Likewise, for BIND(C), the bounds are not always the expected 0.
* When allocatable/pointer, the argument cannot be assumed-rank; hence,
  "-1" is a perfectly valid upper and lower bound and size()/shape() shall
  report >= 0 and not a negative value!
  Likewise for dim[rank-1].extent with bind(C): the value shall not be
negative.

See attached test case. All code which works uses STOP and assert(). All code
which doesn't uses (__builtin_)print(f) diagnostic.

Caveat: I hope I haven't made any mistake when writing the test code.

 * * *

Compile with:
   gfortran assumed_rank_19.f90 assumed_rank_19_aux.c

When using DejaGNU/before committing: use the commented ISO_Fortran_binding.h
#include as otherwise the testsuite may fail to find that file.

Reply via email to