[Bug fortran/101309] New: Bind(C): gfortran creates invalid C descriptor for result of TRANSPOSE intrinsic

sandra at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Sat Jul 3 19:42:59 GMT 2021


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

            Bug ID: 101309
           Summary: Bind(C): gfortran creates invalid C descriptor for
                    result of TRANSPOSE intrinsic
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: sandra at gcc dot gnu.org
  Target Milestone: ---

The description of CFI_cdesc_t in section 18.5.3 of the 2018 Fortran standard
includes this constraint:

There shall be an ordering of the dimensions such that the absolute value of
the sm member of the first dimension is not less than the elem_len member of
the C descriptor and the absolute value of the sm member of each subsequent
dimension is not less than the absolute value of the sm member of the previous
dimension multiplied by the extent of the previous dimension.

In the WIP TS 29113 testsuite posted here

https://gcc.gnu.org/pipermail/gcc-patches/2021-July/574115.html

the testcase interoperability/fc-descriptor-7.f90 passes the result of the
TRANSPOSE intrinsic to a C function with an assumed-shape array argument, and
the descriptor it receives does not satisfy this constraint.  It dumps as

<CFI_cdesc_t base_addr=0x7ffcb2e98a40 elem_len=4 version=1
  rank=2 type=CFI_type_int attribute=CFI_attribute_other
  dim=[<CFI_dim_t lower_bound=0 extent=5 sm=40>,
       <CFI_dim_t lower_bound=0 extent=10 sm=4>]>


More information about the Gcc-bugs mailing list