[Patch, fortran] PRs 89843 and 90022 - C Fortran Interop fixes.

Paul Richard Thomas paul.richard.thomas@gmail.com
Tue Apr 9 10:21:00 GMT 2019

The most part of this patch is concerned with implementing calls from
C of of fortran bind c procedures with assumed shape or assumed rank
dummies to completely fix PR89843. The conversion of the descriptors
from CFI to gfc occur on entry to and reversed on exit from the

This patch is safe for trunk, even at this late stage, because its
effects are barricaded behind the tests for CFI descriptors. I believe
that it appropriately rewards the bug reporters to have this feature
work as well as possible at release.

Between comments and the ChangeLogs, this patch is self explanatory.

Bootstrapped and regtested on FC29/x86_64 - OK for trunk?


2019-04-09  Paul Thomas  <pault@gcc.gnu.org>

    PR fortran/89843
    * trans-decl.c (gfc_get_symbol_decl): Assumed shape and assumed
    rank dummies of bind C procs require deferred initialization.
    (convert_CFI_desc): New procedure to convert incoming CFI
    descriptors to gfc types and back again.
    (gfc_trans_deferred_vars): Call it.
    * trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): Null the CFI
    descriptor pointer. Free the descriptor in all cases.

    PR fortran/90022
    * trans-decl.c (gfc_get_symbol_decl): Make sure that the se
    expression is a pointer type before converting it to the symbol
    backend_decl type.

2019-04-09  Paul Thomas  <pault@gcc.gnu.org>

    PR fortran/89843
    * gfortran.dg/ISO_Fortran_binding_4.f90: Modify the value of x
    in ctg. Test the conversion of the descriptor types in the main
    * gfortran.dg/ISO_Fortran_binding_10.f90: New test.
    * gfortran.dg/ISO_Fortran_binding_10.c: Called by it.

    PR fortran/90022
    * gfortran.dg/ISO_Fortran_binding_1.c: Correct the indexing for
    the computation of 'ans'. Also, change the expected results for
    CFI_is_contiguous to comply with standard.
    * gfortran.dg/ISO_Fortran_binding_1.f90: Correct the expected
    results for CFI_is_contiguous to comply with standard.
    * gfortran.dg/ISO_Fortran_binding_9.f90: New test.
    * gfortran.dg/ISO_Fortran_binding_9.c: Called by it.

2019-04-09  Paul Thomas  <pault@gcc.gnu.org>

    PR fortran/89843
    * runtime/ISO_Fortran_binding.c (cfi_desc_to_gfc_desc): Only
    return immediately if the source pointer is null. Bring
    forward the extraction of the gfc type. Extract the kind so
    that the element size can be correctly computed for sections
    and components of derived type arrays. Remove the free of the
    CFI descriptor since this is now done in trans-expr.c.
    (gfc_desc_to_cfi_desc): Only allocate the CFI descriptor if it
    is not null.
    (CFI_section): Normalise the difference between the upper and
    lower bounds by the stride to correctly calculate the extents
    of the section.

    PR fortran/90022
    * runtime/ISO_Fortran_binding.c (CFI_is_contiguous) : Return
    1 for true and 0 otherwise to comply with the standard. Correct
    the contiguity check for rank 3 and greater by using the stride
    measure of the lower dimension rather than the element length.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: submit.diff
Type: text/x-patch
Size: 27615 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20190409/29218943/attachment.bin>

More information about the Gcc-patches mailing list