From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id EF3CE3858284; Tue, 5 Dec 2023 10:47:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EF3CE3858284 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=foss.arm.com Authentication-Results: sourceware.org; spf=none smtp.mailfrom=foss.arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org EF3CE3858284 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701773259; cv=none; b=n/tCXQhNURHw6pXrgk9F+zY3nATxRkb4YJU06BrBepU+TQurt0inmtReITKtByOeh7f5iKAAGLJ6ZzVx63tdAzuT7gdxajuargDxZyPqLEiE6Ve+NE1DKjk6p7OKFobzoumh4GJPY0mg32onrhkL4UwcVXgq7fNNYVm+O/klWXw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701773259; c=relaxed/simple; bh=qFTCCeO6U0VpImttUUet8rLP4+S32HVJEEwGGJbSPCg=; h=Message-ID:Date:MIME-Version:Subject:To:From; b=DS3P4LrFH2SYw0R4aiAYrorgp9soib8WPSLGbju4xM/fJwjegTzdtL3WKsjBRpywxsKNCsYuJVz8KRr0O8icsfVU9vqvZ1x28cKhmKBI58Rip/hqY2qNc0pI8iq7MZXWN24yvv+mXD36VkLVmjHxVw5hw7ZG0o9jhgctCX7M+4E= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D7D92139F; Tue, 5 Dec 2023 02:48:23 -0800 (PST) Received: from [10.57.5.1] (unknown [10.57.5.1]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4A0CD3F5A1; Tue, 5 Dec 2023 02:47:36 -0800 (PST) Message-ID: <8ba09ce2-9b19-4fd2-9d3a-01c4add02c91@foss.arm.com> Date: Tue, 5 Dec 2023 10:47:34 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] libgfortran: Fix -Wincompatible-pointer-types errors Content-Language: en-GB To: Jakub Jelinek , Tobias Burnus , Florian Weimer Cc: gcc-patches@gcc.gnu.org, fortran@gcc.gnu.org References: <9e40a64880a14cf27d788ecbaf23365b9a5ac069.1700473918.git.fweimer@redhat.com> <87zfypvv6t.fsf@oldenburg.str.redhat.com> From: Richard Earnshaw In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3495.2 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 05/12/2023 10:33, Jakub Jelinek wrote: > 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; That doesn't look right for a 64-bit processor. Presumably 4 means 4 bytes, but long will generally be 8 on such targets. R. > 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 > Jakub Jelinek > > * io/list_read.c (list_formatted_read_scalar) : > 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) : 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 >