This patch fixes the failures in interoperability/fc-descriptor-8.f90 in
my just-posted TS 29113 testsuite:
https://gcc.gnu.org/pipermail/gcc-patches/2021-July/574115.html
The problem here is that the routines that copy between GFC and CFI
descriptors think they both use the same version number conventions, but
the GFC descriptors' version is zero-initialized elsewhere and
CFI_VERSION is defined to be 1. It seems incorrect to expect the
internal and external descriptor ABIs to be in lock step together anyway.
OK to check in?
-Sandra
commit b0edc2d3287d6ed52a43010b92c4158c6208ef11
Author: Sandra Loosemore
Date: Wed Jun 30 19:28:22 2021 -0700
Fortran: set version field in CFI_cdesc_t to CFI_VERSION
When converting a GFC descriptor to a CFI descriptor, it was
incorrectly copying the version number from the former to the latter.
It should be using the value of CFI_VERSION instead (currently 1).
Going the other direction, the GFC version field is initialized to
zero elsewhere, so do that here too.
2021-06-30 Tobias Burnus
Sandra Loosemore
libgfortran/
* runtime/ISO_Fortran_binding.c (cfi_desc_to_gfc_desc):
Initialize version field to 0.
(gfc_desc_to_cfi_desc): Initialize version field to CFI_VERSION.
diff --git a/libgfortran/runtime/ISO_Fortran_binding.c b/libgfortran/runtime/ISO_Fortran_binding.c
index 0978832..73fb4c4 100644
--- a/libgfortran/runtime/ISO_Fortran_binding.c
+++ b/libgfortran/runtime/ISO_Fortran_binding.c
@@ -60,7 +60,7 @@ cfi_desc_to_gfc_desc (gfc_array_void *d, CFI_cdesc_t **s_ptr)
else
GFC_DESCRIPTOR_SIZE (d) = s->elem_len;
- d->dtype.version = s->version;
+ d->dtype.version = 0;
GFC_DESCRIPTOR_RANK (d) = (signed char)s->rank;
d->dtype.attribute = (signed short)s->attribute;
@@ -104,7 +104,7 @@ gfc_desc_to_cfi_desc (CFI_cdesc_t **d_ptr, const gfc_array_void *s)
d->base_addr = GFC_DESCRIPTOR_DATA (s);
d->elem_len = GFC_DESCRIPTOR_SIZE (s);
- d->version = s->dtype.version;
+ d->version = CFI_VERSION;
d->rank = (CFI_rank_t)GFC_DESCRIPTOR_RANK (s);
d->attribute = (CFI_attribute_t)s->dtype.attribute;