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 <sandra@codesourcery.com> libgfortran/ * runtime/ISO_Fortran_binding.c (CFI_allocate): Don't use elem_len for CFI_type_signed_char. (CFI_select_part): Likewise.
This commit is contained in:
parent
8ed6cfbbee
commit
e4966e1d1d
1 changed files with 6 additions and 7 deletions
|
@ -229,10 +229,9 @@ CFI_allocate (CFI_cdesc_t *dv, const CFI_index_t lower_bounds[],
|
|||
}
|
||||
}
|
||||
|
||||
/* If the type is a character, the descriptor's element length is replaced
|
||||
by the elem_len argument. */
|
||||
if (dv->type == CFI_type_char || dv->type == CFI_type_ucs4_char ||
|
||||
dv->type == CFI_type_signed_char)
|
||||
/* If the type is a Fortran character type, the descriptor's element
|
||||
length is replaced by the elem_len argument. */
|
||||
if (dv->type == CFI_type_char || dv->type == CFI_type_ucs4_char)
|
||||
dv->elem_len = elem_len;
|
||||
|
||||
/* Dimension information and calculating the array length. */
|
||||
|
@ -731,9 +730,9 @@ int CFI_select_part (CFI_cdesc_t *result, const CFI_cdesc_t *source,
|
|||
}
|
||||
}
|
||||
|
||||
/* Element length. */
|
||||
if (result->type == CFI_type_char || result->type == CFI_type_ucs4_char ||
|
||||
result->type == CFI_type_signed_char)
|
||||
/* Element length is ignored unless result->type specifies a Fortran
|
||||
character type. */
|
||||
if (result->type == CFI_type_char || result->type == CFI_type_ucs4_char)
|
||||
result->elem_len = elem_len;
|
||||
|
||||
if (unlikely (compile_options.bounds_check))
|
||||
|
|
Loading…
Add table
Reference in a new issue