On 16.07.21 05:46, Sandra Loosemore wrote:

When I was reading code in conjunction with fixing PR101317, I noticed
an unrelated bug in the implementation of CFI_allocate and
CFI_select_part:  they were mis-handling the CFI_signed_char type as
if it were a Fortran character type for the purposes of deciding
whether to use the elem_len argument to those functions.  It's really
an integer type that has the size of signed char.  I checked similar
code in other functions in ISO_Fortran_binding.c and these were the
only two that were incorrect.
I think there was at least one other place, but that one has been fixed
in the meanwhile, missing the other two occurrences you found.
     Bind(c): signed char is not a Fortran character type

     CFI_allocate and CFI_select_part were incorrectly treating
     CFI_type_signed_char as a Fortran character type for the purpose of
     deciding whether or not to use the elem_len argument.  It is a Fortran
     integer type per table 18.2 in the 2018 Fortran standard.

     Other functions in ISO_Fortran_binding.c appeared to handle this case
     correctly already.

     2021-07-15  Sandra Loosemore<san...@codesourcery.com>

     gcc/testsuite/
      * gfortran.dg/ts29113/library/allocate-c.c (ctest): Also test
      handling of elem_len for CFI_type_char vs CFI_type_signed_char.
      * gfortran.dg/ts29113/library/select-c.c (ctest): Likewise.

     libgfortran/
      * runtime/ISO_Fortran_binding.c (CFI_allocate)

LGTM. Thanks!

Tobias

-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 
München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas 
Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht 
München, HRB 106955

Reply via email to