From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by sourceware.org (Postfix) with ESMTPS id 32E933858D39; Tue, 4 Oct 2022 19:27:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 32E933858D39 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1664911631; bh=7B8JRYhumR9joCD0GW1U3pvwbHrnLTOMNDexQIe1vWs=; h=X-UI-Sender-Class:From:To:Subject:Date; b=jSYPyHzSH7vJLbbsPHu8pBXl88BrSR0FZnf28X8zTBUxTHvE0mj8GDRZC1odLR7VF jOi+7eNOcXb7Z7oW0yDBkXAefm5UEOsFMLtynRZRv75pxLgAjKmONDKm65RW35B3Wo 7Z8rHFtIt5yz1kyxF6h8wus4A401GwtKRb5XUnp0= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [93.207.82.142] ([93.207.82.142]) by web-mail.gmx.net (3c-app-gmx-bs14.server.lan [172.19.170.66]) (via HTTP); Tue, 4 Oct 2022 21:27:11 +0200 MIME-Version: 1.0 Message-ID: From: Harald Anlauf To: fortran , gcc-patches Subject: [PATCH] Fortran: reject procedures and procedure pointers as output item [PR107074] Content-Type: multipart/mixed; boundary=refeik-02721314-e37d-400c-9cbe-a2ec3e1180f3 Date: Tue, 4 Oct 2022 21:27:11 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:hsDUaRgVJc0cEg4rT4fZdIg6aYsowsNDfjbkzmjQh5IVGfOV3HxAduilU7s6sk9T13siu UBFafOuiwW3eGH6mJI73UCZmYrxRSHZ1M2PqEUx0WzEsZdOKheQ2Z0BnGzn6yaMdDhWgDiuu7N9T ZnGY4Jkgg/H5nSh1z7eA+HhzLxWEPEqypfVboNYm2VBawkZuhRp9XmX3FAzAFF0s6StyPZ+PeLH5 lk1dAkoJXgmSD2yd3xzRK+UI5jTPEcaaCe4YNwaNJKuLZ+c1DPmAYrZTK9YlZqGSPf9XnimY3PlO l8= X-UI-Out-Filterresults: notjunk:1;V03:K0:Ms/1yzNkTa4=:xvtXW0Z4OLZh7++vxMXyGs hyaICMknjYCOureS5AWYgFTY9UGwF7X7vXO2LyfdWM/HFcCYX/AoQR8SQ4NWllLy+pJraNdY+ 1O56k4vdyXJA6QAF4UFEwf6ooakR1YUgsp56NGyotIb+p3Ru4Ohj+spFoNO/vnf5UKAZI54db JmhPD9NZUGRTHbRoDh2xmmfGPuxf2UHGYESdJ6ELd6FInoZuXruAk5PGMQmvhu45D4XN4YzRm mtNykVRer5TvXGtX52Z+9rxWwl+nGqaTzQxpwTwQI13pFFXLApVpAwYKfwTuyDgpqDo1B4an7 S8jFoOfE/cbsrDzoJBAB2leeadbZAio+6/ihWP3g3wgZDoAZw2yoQztPN9++oihrKiAwl/v2Z /CzlzXQibgWsMsZ3bokwRMTJmRw//2WK3M0iJe1ynIW9W59WXz0KwR6O6GISooXQE5IPQVhML 4hQI//b3dyih4h0GNrAloCAmid5XEFy6d7Wi7NY/72kNJMBFcr/jmN8MdGqjm2/T+KfsspDZf reBMDzGzzFBsFEd2ErP2KSd03bwriaCGyyl/q+zh5YF+NTvnSqG42guPLk3XWC7xNiT3OG+BH wciUkV0yyhUojw6AlOkgimXbjqBF6I5Ksc9Z0XCTB2imYRpwl3bMWW92SBelRxUvOAJ/D3fh2 h+m7kKqrvsv7AIUIVzWnaYo5dCgXDHyoOEij4NJmlFozcF9PwDIJM6uQZ7S0hzFQCqUGYEc7h EepOo6tQocXM4rCJOtbZAU7QDs5L7jKx+Vugj2ftP0gK8iEBMBqZU4/V9KEWKiKzYVifHugwk sSRKx3M X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_PASS,TXREP 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: --refeik-02721314-e37d-400c-9cbe-a2ec3e1180f3 Content-Type: text/plain; charset=UTF-8 Dear all, when looking at output item lists we didn't catch procedures and procedure pointers and ran into a gfc_internal_error(). Such items are not allowed by the Fortran standard, e.g. for procedure pointers there is C1233 (R1217) An expression that is an output-item shall not have a value that is a procedure pointer. Attached patch generates an error instead. Regtested on x86_64-pc-linux-gnu. OK for mainline? Thanks, Harald --refeik-02721314-e37d-400c-9cbe-a2ec3e1180f3 Content-Type: text/x-patch Content-Disposition: attachment; filename=pr107074.diff Content-Transfer-Encoding: quoted-printable =46rom 3b15fe83830c1e75339114e0241e9d2158393017 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Tue, 4 Oct 2022 21:19:21 +0200 Subject: [PATCH] Fortran: reject procedures and procedure pointers as outp= ut item [PR107074] gcc/fortran/ChangeLog: PR fortran/107074 * trans-io.cc (transfer_expr): A procedure or a procedure pointer cannot be output items. gcc/testsuite/ChangeLog: PR fortran/107074 * gfortran.dg/pr107074.f90: New test. =2D-- gcc/fortran/trans-io.cc | 14 ++++++++++++++ gcc/testsuite/gfortran.dg/pr107074.f90 | 11 +++++++++++ 2 files changed, 25 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/pr107074.f90 diff --git a/gcc/fortran/trans-io.cc b/gcc/fortran/trans-io.cc index 9f86815388c..c4e1537eed6 100644 =2D-- a/gcc/fortran/trans-io.cc +++ b/gcc/fortran/trans-io.cc @@ -2430,6 +2430,20 @@ transfer_expr (gfc_se * se, gfc_typespec * ts, tree= addr_expr, break; + case BT_PROCEDURE: + if (code->expr1 + && code->expr1->symtree + && code->expr1->symtree->n.sym) + { + if (code->expr1->symtree->n.sym->attr.proc_pointer) + gfc_error ("Procedure pointer at %C cannot be an output item"); + else + gfc_error ("Procedure at %C cannot be an output item"); + return; + } + /* If a PROCEDURE item gets through to here, fall through and ICE. = */ + gcc_fallthrough (); + case_bt_struct: case BT_CLASS: if (gfc_bt_struct (ts->type) || ts->type =3D=3D BT_CLASS) diff --git a/gcc/testsuite/gfortran.dg/pr107074.f90 b/gcc/testsuite/gfortr= an.dg/pr107074.f90 new file mode 100644 index 00000000000..a09088c2e9d =2D-- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr107074.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! PR fortran/107074 - ICE: Bad IO basetype (8) +! Contributed by G.Steinmetz + +program p + implicit none + integer, external :: a + procedure(real), pointer :: b + print *, merge (a, a, .true.) ! { dg-error "Procedure" } + print *, merge (b, b, .true.) ! { dg-error "Procedure pointer" } +end =2D- 2.35.3 --refeik-02721314-e37d-400c-9cbe-a2ec3e1180f3--