Fortran: Fixes and additional tests for shape/ubound/size [PR94070]
authorSandra Loosemore <sandra@codesourcery.com>
Wed, 20 Oct 2021 04:11:15 +0000 (21:11 -0700)
committerSandra Loosemore <sandra@codesourcery.com>
Thu, 21 Oct 2021 02:23:01 +0000 (19:23 -0700)
commit1af78e731feb9327a17c99ebaa19a4cca1125caf
tree214c687eeeba131f0c1dc705406fa37e0560b44a
parent1556e447c0fee5c77ccd9bda243d5281e10e895b
Fortran: Fixes and additional tests for shape/ubound/size [PR94070]

This patch reimplements the SHAPE intrinsic to be inlined similarly to
LBOUND and UBOUND, instead of as a library call, to avoid an
unnecessary array copy.  Various bugs are also fixed.

gcc/fortran/
PR fortran/94070

* expr.c (gfc_simplify_expr): Handle GFC_ISYM_SHAPE along with
GFC_ISYM_LBOUND and GFC_ISYM_UBOUND.
* trans-array.c (gfc_conv_ss_startstride): Likewise.
(set_loop_bounds): Likewise.
* trans-intrinsic.c (gfc_trans_intrinsic_bound): Extend to
handle SHAPE.  Correct logic for zero-size special cases and
detecting assumed-rank arrays associated with an assumed-size
argument.
(gfc_conv_intrinsic_shape): Deleted.
(gfc_conv_intrinsic_function): Handle GFC_ISYM_SHAPE like
GFC_ISYM_LBOUND and GFC_ISYM_UBOUND.
(gfc_add_intrinsic_ss_code): Likewise.
(gfc_walk_intrinsic_bound): Likewise.

gcc/testsuite/
PR fortran/94070

* gfortran.dg/c-interop/shape-bindc.f90: New test.
* gfortran.dg/c-interop/shape-poly.f90: New test.
* gfortran.dg/c-interop/size-bindc.f90: New test.
* gfortran.dg/c-interop/size-poly.f90: New test.
* gfortran.dg/c-interop/ubound-bindc.f90: New test.
* gfortran.dg/c-interop/ubound-poly.f90: New test.
gcc/fortran/expr.c
gcc/fortran/trans-array.c
gcc/fortran/trans-intrinsic.c
gcc/testsuite/gfortran.dg/c-interop/shape-bindc.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/c-interop/shape-poly.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/c-interop/size-bindc.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/c-interop/size-poly.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/c-interop/ubound-bindc.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/c-interop/ubound-poly.f90 [new file with mode: 0644]