https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89593

            Bug ID: 89593
           Summary: warning "passing argument 3 of
                    ‘_gfortran_caf_{get,send}_by_ref’ from incompatible
                    pointer type" when building libgfortran
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libfortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ubizjak at gmail dot com
  Target Milestone: ---

The following warning is generated when building libgfortran:

../../../git/gcc/libgfortran/caf/single.c: In function
‘_gfortran_caf_sendget_by_ref’:
../../../git/gcc/libgfortran/caf/single.c:2813:57: warning: passing argument 3
of ‘_gfortran_caf_get_by_ref’ from incompatible pointer type
[-Wincompatible-pointer-types]
 2813 |   _gfortran_caf_get_by_ref (src_token, src_image_index, &temp,
src_refs,
      |                                                         ^~~~~
      |                                                         |
      |                                                         struct
<anonymous> *
../../../git/gcc/libgfortran/caf/single.c:1544:24: note: expected
‘gfc_descriptor_t *’ {aka ‘struct <anonymous> *’} but argument is of type
‘struct <anonymous> *’
 1544 |      gfc_descriptor_t *dst, caf_reference_t *refs,
      |      ~~~~~~~~~~~~~~~~~~^~~
../../../git/gcc/libgfortran/caf/single.c:2820:58: warning: passing argument 3
of ‘_gfortran_caf_send_by_ref’ from incompatible pointer type
[-Wincompatible-pointer-types]
 2820 |   _gfortran_caf_send_by_ref (dst_token, dst_image_index, &temp,
dst_refs,
      |                                                          ^~~~~
      |                                                          |
      |                                                          struct
<anonymous> *
../../../git/gcc/libgfortran/caf/single.c:2434:25: note: expected
‘gfc_descriptor_t *’ {aka ‘struct <anonymous> *’} but argument is of type
‘struct <anonymous> *’
 2434 |       gfc_descriptor_t *src, caf_reference_t *refs,
      |       ~~~~~~~~~~~~~~~~~~^~~


Happens in _gfortran_caf_sendget_by_ref, where we have:

--cut here--
void
_gfortran_caf_sendget_by_ref (caf_token_t dst_token, int dst_image_index,
                              caf_reference_t *dst_refs, caf_token_t src_token,
                              int src_image_index,
                              caf_reference_t *src_refs, int dst_kind,
                              int src_kind, bool may_require_tmp, int
*dst_stat,
                              int *src_stat, int dst_type, int src_type)
{
  GFC_FULL_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, void) temp;
  GFC_DESCRIPTOR_DATA (&temp) = NULL;
  GFC_DESCRIPTOR_RANK (&temp) = -1;
  GFC_DESCRIPTOR_TYPE (&temp) = dst_type;

  _gfortran_caf_get_by_ref (src_token, src_image_index, &temp, src_refs,
                            dst_kind, src_kind, may_require_tmp, true,
                            src_stat, src_type);

  if (src_stat && *src_stat != 0)
    return;

  _gfortran_caf_send_by_ref (dst_token, dst_image_index, &temp, dst_refs,
                             dst_kind, dst_kind, may_require_tmp, true,
                             dst_stat, dst_type);
  if (GFC_DESCRIPTOR_DATA (&temp))
    free (GFC_DESCRIPTOR_DATA (&temp));
}
--cut here--

GFC_FULL_ARRAY_DESCRIPTOR is defined in libgfortran.h as:

#define GFC_FULL_ARRAY_DESCRIPTOR(r, type) \
struct {\
  type *base_addr;\
  size_t offset;\
  dtype_type dtype;\
  index_type span;\
  descriptor_dimension dim[r];\
}

  GFC_FULL_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, void) temp;

while _gfortran_caf_get_by_ref and _gfortran_caf_send_by_ref expect
gfc_descriptor_t, defined as:

#define GFC_ARRAY_DESCRIPTOR(type) \
struct {\
  type *base_addr;\
  size_t offset;\
  dtype_type dtype;\
  index_type span;\
  descriptor_dimension dim[];\
}

typedef GFC_ARRAY_DESCRIPTOR (void) gfc_array_void;

typedef gfc_array_void gfc_descriptor_t;


These two structures differ in the last element:

descriptor_dimension dim[GFC_MAX_DIMENSIONS];

vs.

descriptor_dimension dim[];

Reply via email to