Hi! On Tue, Dec 05, 2023 at 10:46:02AM +0100, Florian Weimer wrote: > Presumably the fixes will look like this? > > diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c > index db3330060ce..4fcc77dbf83 100644 > --- a/libgfortran/io/list_read.c > +++ b/libgfortran/io/list_read.c > @@ -2987,13 +2987,13 @@ nml_read_obj (st_parameter_dt *dtp, namelist_info > *nl, index_type offset, > /* If this object has a User Defined procedure, call it. */ > if (nl->dtio_sub != NULL) > { > - int unit = dtp->u.p.current_unit->unit_number; > + GFC_INTEGER_4 unit = dtp->u.p.current_unit->unit_number; > char iotype[] = "NAMELIST"; > gfc_charlen_type iotype_len = 8; > char tmp_iomsg[IOMSG_LEN] = ""; > char *child_iomsg; > gfc_charlen_type child_iomsg_len; > - int noiostat; > + GFC_INTEGER_4 noiostat; > int *child_iostat = NULL; > gfc_full_array_i4 vlist; > formatted_dtio dtio_ptr = (formatted_dtio)nl->dtio_sub;
That seems insufficient. The following patch makes libgfortran build on i686-linux after hacking up --- kinds.h.xx 2023-12-05 00:23:00.133365064 +0100 +++ kinds.h 2023-12-05 11:19:24.409679808 +0100 @@ -10,8 +10,8 @@ typedef GFC_INTEGER_2 GFC_LOGICAL_2; #define HAVE_GFC_LOGICAL_2 #define HAVE_GFC_INTEGER_2 -typedef int32_t GFC_INTEGER_4; -typedef uint32_t GFC_UINTEGER_4; +typedef long GFC_INTEGER_4; +typedef unsigned long GFC_UINTEGER_4; typedef GFC_INTEGER_4 GFC_LOGICAL_4; #define HAVE_GFC_LOGICAL_4 #define HAVE_GFC_INTEGER_4 in the build dir to emulate what newlib aarch64 is doing: 2023-12-05 Florian Weimer <fwei...@redhat.com> Jakub Jelinek <ja...@redhat.com> * io/list_read.c (list_formatted_read_scalar) <case BT_CLASS>: Change types of unit and noiostat to GFC_INTEGER_4 from int, change type of child_iostat from to GFC_INTEGER_4 * from int *, formatting fixes. (nml_read_obj): Likewise. * io/write.c (list_formatted_write_scalar) <case BT_CLASS>: Likewise. (nml_write_obj): Likewise. * io/transfer.c (unformatted_read, unformatted_write): Likewise. --- libgfortran/io/list_read.c.jj 2023-05-09 00:07:26.161168737 +0200 +++ libgfortran/io/list_read.c 2023-12-05 11:25:31.837426653 +0100 @@ -2189,14 +2189,14 @@ list_formatted_read_scalar (st_parameter break; case BT_CLASS: { - int unit = dtp->u.p.current_unit->unit_number; + GFC_INTEGER_4 unit = dtp->u.p.current_unit->unit_number; char iotype[] = "LISTDIRECTED"; gfc_charlen_type iotype_len = 12; char tmp_iomsg[IOMSG_LEN] = ""; char *child_iomsg; gfc_charlen_type child_iomsg_len; - int noiostat; - int *child_iostat = NULL; + GFC_INTEGER_4 noiostat; + GFC_INTEGER_4 *child_iostat = NULL; gfc_full_array_i4 vlist; GFC_DESCRIPTOR_DATA(&vlist) = NULL; @@ -2204,8 +2204,8 @@ list_formatted_read_scalar (st_parameter /* Set iostat, intent(out). */ noiostat = 0; - child_iostat = (dtp->common.flags & IOPARM_HAS_IOSTAT) ? - dtp->common.iostat : &noiostat; + child_iostat = ((dtp->common.flags & IOPARM_HAS_IOSTAT) + ? dtp->common.iostat : &noiostat); /* Set iomsge, intent(inout). */ if (dtp->common.flags & IOPARM_HAS_IOMSG) @@ -2987,14 +2987,14 @@ nml_read_obj (st_parameter_dt *dtp, name /* If this object has a User Defined procedure, call it. */ if (nl->dtio_sub != NULL) { - int unit = dtp->u.p.current_unit->unit_number; + GFC_INTEGER_4 unit = dtp->u.p.current_unit->unit_number; char iotype[] = "NAMELIST"; gfc_charlen_type iotype_len = 8; char tmp_iomsg[IOMSG_LEN] = ""; char *child_iomsg; gfc_charlen_type child_iomsg_len; - int noiostat; - int *child_iostat = NULL; + GFC_INTEGER_4 noiostat; + GFC_INTEGER_4 *child_iostat = NULL; gfc_full_array_i4 vlist; formatted_dtio dtio_ptr = (formatted_dtio)nl->dtio_sub; @@ -3006,8 +3006,8 @@ nml_read_obj (st_parameter_dt *dtp, name /* Set iostat, intent(out). */ noiostat = 0; - child_iostat = (dtp->common.flags & IOPARM_HAS_IOSTAT) ? - dtp->common.iostat : &noiostat; + child_iostat = ((dtp->common.flags & IOPARM_HAS_IOSTAT) + ? dtp->common.iostat : &noiostat); /* Set iomsg, intent(inout). */ if (dtp->common.flags & IOPARM_HAS_IOMSG) --- libgfortran/io/write.c.jj 2023-09-28 21:49:38.632795791 +0200 +++ libgfortran/io/write.c 2023-12-05 11:26:27.763627070 +0100 @@ -1952,14 +1952,14 @@ list_formatted_write_scalar (st_paramete break; case BT_CLASS: { - int unit = dtp->u.p.current_unit->unit_number; + GFC_INTEGER_4 unit = dtp->u.p.current_unit->unit_number; char iotype[] = "LISTDIRECTED"; gfc_charlen_type iotype_len = 12; char tmp_iomsg[IOMSG_LEN] = ""; char *child_iomsg; gfc_charlen_type child_iomsg_len; - int noiostat; - int *child_iostat = NULL; + GFC_INTEGER_4 noiostat; + GFC_INTEGER_4 *child_iostat = NULL; gfc_full_array_i4 vlist; GFC_DESCRIPTOR_DATA(&vlist) = NULL; @@ -1967,8 +1967,8 @@ list_formatted_write_scalar (st_paramete /* Set iostat, intent(out). */ noiostat = 0; - child_iostat = (dtp->common.flags & IOPARM_HAS_IOSTAT) ? - dtp->common.iostat : &noiostat; + child_iostat = ((dtp->common.flags & IOPARM_HAS_IOSTAT) + ? dtp->common.iostat : &noiostat); /* Set iomsge, intent(inout). */ if (dtp->common.flags & IOPARM_HAS_IOMSG) @@ -2277,14 +2277,14 @@ nml_write_obj (st_parameter_dt *dtp, nam /* First ext_name => get length of all possible components */ if (obj->dtio_sub != NULL) { - int unit = dtp->u.p.current_unit->unit_number; + GFC_INTEGER_4 unit = dtp->u.p.current_unit->unit_number; char iotype[] = "NAMELIST"; gfc_charlen_type iotype_len = 8; char tmp_iomsg[IOMSG_LEN] = ""; char *child_iomsg; gfc_charlen_type child_iomsg_len; - int noiostat; - int *child_iostat = NULL; + GFC_INTEGER_4 noiostat; + GFC_INTEGER_4 *child_iostat = NULL; gfc_full_array_i4 vlist; formatted_dtio dtio_ptr = (formatted_dtio)obj->dtio_sub; @@ -2292,8 +2292,8 @@ nml_write_obj (st_parameter_dt *dtp, nam /* Set iostat, intent(out). */ noiostat = 0; - child_iostat = (dtp->common.flags & IOPARM_HAS_IOSTAT) ? - dtp->common.iostat : &noiostat; + child_iostat = ((dtp->common.flags & IOPARM_HAS_IOSTAT) + ? dtp->common.iostat : &noiostat); /* Set iomsg, intent(inout). */ if (dtp->common.flags & IOPARM_HAS_IOMSG) --- libgfortran/io/transfer.c.jj 2023-05-09 00:07:26.162168723 +0200 +++ libgfortran/io/transfer.c 2023-12-05 11:25:15.756656561 +0100 @@ -1092,17 +1092,17 @@ unformatted_read (st_parameter_dt *dtp, if (type == BT_CLASS) { - int unit = dtp->u.p.current_unit->unit_number; + GFC_INTEGER_4 unit = dtp->u.p.current_unit->unit_number; char tmp_iomsg[IOMSG_LEN] = ""; char *child_iomsg; gfc_charlen_type child_iomsg_len; - int noiostat; - int *child_iostat = NULL; + GFC_INTEGER_4 noiostat; + GFC_INTEGER_4 *child_iostat = NULL; /* Set iostat, intent(out). */ noiostat = 0; - child_iostat = (dtp->common.flags & IOPARM_HAS_IOSTAT) ? - dtp->common.iostat : &noiostat; + child_iostat = ((dtp->common.flags & IOPARM_HAS_IOSTAT) + ? dtp->common.iostat : &noiostat); /* Set iomsg, intent(inout). */ if (dtp->common.flags & IOPARM_HAS_IOMSG) @@ -1119,7 +1119,7 @@ unformatted_read (st_parameter_dt *dtp, /* Call the user defined unformatted READ procedure. */ dtp->u.p.current_unit->child_dtio++; dtp->u.p.ufdtio_ptr (dest, &unit, child_iostat, child_iomsg, - child_iomsg_len); + child_iomsg_len); dtp->u.p.current_unit->child_dtio--; return; } @@ -1222,17 +1222,17 @@ unformatted_write (st_parameter_dt *dtp, if (type == BT_CLASS) { - int unit = dtp->u.p.current_unit->unit_number; + GFC_INTEGER_4 unit = dtp->u.p.current_unit->unit_number; char tmp_iomsg[IOMSG_LEN] = ""; char *child_iomsg; gfc_charlen_type child_iomsg_len; - int noiostat; - int *child_iostat = NULL; + GFC_INTEGER_4 noiostat; + GFC_INTEGER_4 *child_iostat = NULL; /* Set iostat, intent(out). */ noiostat = 0; - child_iostat = (dtp->common.flags & IOPARM_HAS_IOSTAT) ? - dtp->common.iostat : &noiostat; + child_iostat = ((dtp->common.flags & IOPARM_HAS_IOSTAT) + ? dtp->common.iostat : &noiostat); /* Set iomsg, intent(inout). */ if (dtp->common.flags & IOPARM_HAS_IOMSG) @@ -1249,7 +1249,7 @@ unformatted_write (st_parameter_dt *dtp, /* Call the user defined unformatted WRITE procedure. */ dtp->u.p.current_unit->child_dtio++; dtp->u.p.ufdtio_ptr (source, &unit, child_iostat, child_iomsg, - child_iomsg_len); + child_iomsg_len); dtp->u.p.current_unit->child_dtio--; return; } @@ -1688,13 +1688,13 @@ formatted_transfer_scalar_read (st_param return; if (require_type (dtp, BT_CLASS, type, f)) return; - int unit = dtp->u.p.current_unit->unit_number; + GFC_INTEGER_4 unit = dtp->u.p.current_unit->unit_number; char dt[] = "DT"; char tmp_iomsg[IOMSG_LEN] = ""; char *child_iomsg; gfc_charlen_type child_iomsg_len; - int noiostat; - int *child_iostat = NULL; + GFC_INTEGER_4 noiostat; + GFC_INTEGER_4 *child_iostat = NULL; char *iotype; gfc_charlen_type iotype_len = f->u.udf.string_len; @@ -1709,8 +1709,8 @@ formatted_transfer_scalar_read (st_param /* Set iostat, intent(out). */ noiostat = 0; - child_iostat = (dtp->common.flags & IOPARM_HAS_IOSTAT) ? - dtp->common.iostat : &noiostat; + child_iostat = ((dtp->common.flags & IOPARM_HAS_IOSTAT) + ? dtp->common.iostat : &noiostat); /* Set iomsg, intent(inout). */ if (dtp->common.flags & IOPARM_HAS_IOMSG) @@ -2169,13 +2169,13 @@ formatted_transfer_scalar_write (st_para case FMT_DT: if (n == 0) goto need_data; - int unit = dtp->u.p.current_unit->unit_number; + GFC_INTEGER_4 unit = dtp->u.p.current_unit->unit_number; char dt[] = "DT"; char tmp_iomsg[IOMSG_LEN] = ""; char *child_iomsg; gfc_charlen_type child_iomsg_len; - int noiostat; - int *child_iostat = NULL; + GFC_INTEGER_4 noiostat; + GFC_INTEGER_4 *child_iostat = NULL; char *iotype; gfc_charlen_type iotype_len = f->u.udf.string_len; @@ -2190,8 +2190,8 @@ formatted_transfer_scalar_write (st_para /* Set iostat, intent(out). */ noiostat = 0; - child_iostat = (dtp->common.flags & IOPARM_HAS_IOSTAT) ? - dtp->common.iostat : &noiostat; + child_iostat = ((dtp->common.flags & IOPARM_HAS_IOSTAT) + ? dtp->common.iostat : &noiostat); /* Set iomsg, intent(inout). */ if (dtp->common.flags & IOPARM_HAS_IOMSG) Jakub