From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by sourceware.org (Postfix) with ESMTPS id 83D173858D1E; Sun, 9 Oct 2022 18:57:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 83D173858D1E 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=1665341826; bh=ip35IpalJ60ejDtfYLjYiyjbkjqOg0s2xrCN1RdAdl4=; h=X-UI-Sender-Class:From:To:Subject:Date; b=EZf6zQ+LfYFA/5764o/jyelYvCi+81dePuWSrgctVSQDSdOunQuY2VQVmovJpz7yq Gianxy+K1q3JKBQDAG2ZU1S6pA5PiUXdBzHupSGpcG6GPSvYMx3zXf+r1GkS/rOd+z 9cDlgt8E+dzFn0bO7PuFU9u7RB+Dj0MEc2VEDLUY= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [79.251.13.236] ([79.251.13.236]) by web-mail.gmx.net (3c-app-gmx-bs08.server.lan [172.19.170.59]) (via HTTP); Sun, 9 Oct 2022 20:57:06 +0200 MIME-Version: 1.0 Message-ID: From: Harald Anlauf To: fortran , gcc-patches Subject: [PATCH] Fortran: fix check of polymorphic elements in data transfers [PR100971] Content-Type: multipart/mixed; boundary=rekceb-39cc0297-2143-4318-be2c-c094dac90688 Date: Sun, 9 Oct 2022 20:57:06 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:AOQhonKmQXyFqmW7TnACei3iv8qjMnaFhCWWATrUuDnCloP8AKb0yJx+f4X5zGbTa9Fyc /3exDRUdwQwEfIwm5j0b7vdDjo9CYhDp7g8mrroEqqfeprQHxXE4y3ItomGYZ12VGwrUABbc4JpW izShPpiPMvZEmm2poOUlGpWKdLNP3Gw++OmsI/xYcN+ESoLFUTZFAJCs3N5zAyVT5s5TDPtvnpV8 KaA2jMi4ZpH8e3zL6dIm3KaZ5Pb0/LetGUZb1dYMRviy19oUgdSBYdv1oAXAjUMGYOyxAfX5qN/x zM= X-UI-Out-Filterresults: notjunk:1;V03:K0:SgcUaOsctfI=:Dxf2pjTnI09rz1qWIOpbHg LZB3xOWY2UMO/CZ7Ychl+FY6i9mLJbOsdfJXMn76d+XzNoN/i3hKrwo1llijjQgENJ5bMO4hN v3xjtTaLUEAOSz+jUQNfVLAni1wTzHTSL6yCEN6stNeXW11ZisKVD9YKkG1xzyOP8gmWObsh9 9owWEK94ri1c6t7u7+1AeGm5AZBtbtgfgt3232zKeKDXCSR+1UPtqZ6+7zezqqhVRJNHmavCd 3j+CWTOl9in0FFgcyzBZrn/2kv7G/ml6E40KW/EP4jaVXh3R0srH9R6JjYlPwLkU35gk2g0vw 3+lqpRmXBvi+k5rHfB7tLFGluBmzqWd/I+pHdXWAGfWGBeQErJELE8mW7hDV+orppUyW6+cgn QoBIIQ0VjLKz0ObprEElSI9nmk2YgNSbOLS06eXZnJX7e+mV1GvFo1Rc0M+XXW4b33lY54nZ8 X0RwTqtNywHX7vRWYTB43C5xyhrLDaaq8aj0L8ZQH32NzWF8rSrNASVvI92WLjF8tjOqFBH6l wf1hM0y4kaRkpimtGTZmMy3zoxESXVUg4ff8Sov8xHs9758/HjccC97+z/i0XRPRB8Vn08Jxm V/iQQ5qfDcGArHWt6eDRirb/WoQ9YMx0G/iKzEX22xXgXwznY9YHh2lb37akN5rZKsq3EsbFQ +9JQwXcShBqKm3chorfQexxH+HNF0y/aplYEF/FCHu1hK09eNgfar1/+oSDg1zKblYaebnBwP r5pEj/m3A4GYhaLlP86F7pOc2z03bJ2sW1JB8HgVqlPMUaFJJZz7/pWvpH8VhatoOEmoDsF0G R2mzWjeUGwIiDt6HqmH+g/iqfriuy3ONluBh/hNO3KisZdI4OpXd7GM6Ln9ptKpjwu1xLTe8M tmTf2RiLWiZbhfljyBbxMYpbOb4yEDdtX25ZzFQA1UQZkVOPIy0TotDMlafoKYZTgWDhGxxmm ffWqXG8CM1wA41IdB53kdt3kBpJfWBE1fa6cqMxB7zSH1nzojn49dQ2Ia1wwMdZ4JZo3rrb+H DieUhfkNgHfdUBfFWBjn8dzuRVuaW06FxdToXnjLM+22QS9mHCk61wR7iwnbCxH0fclVO17Pk Zlw0sExLJFFzi4Vdlim9fUVpn5GXww8uq+PNGXfqTDzRbYoEeXbucKnGrpaV8+KZeud0z90zU MUkl45yLUGJYjIRqowAGP6Gxiqwd6ACUFzvTb90ooQyK3kBfKlliu9tuxCgwgGAFaILjnXSBL FPaaFX/6nBjkrhxtWjO5s0CcdMfIyEvd2qwiWsr9DukSfDGuTP5MwaJlOkwIVJfWe/XjecCuU eCrLdLTc X-Spam-Status: No, score=-12.4 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: --rekceb-39cc0297-2143-4318-be2c-c094dac90688 Content-Type: text/plain; charset=UTF-8 Dear all, the check of data transfer elements needs to verify that for polymorphic objects there is a user defined DTIO procedure. This check worked fine for scalars, but skipped arrays, leading to an ICE later. The obvious fix is to allow this check to inspect arrays. Regtested on x86_64-pc-linux-gnu. OK for mainline? Thanks, Harald --rekceb-39cc0297-2143-4318-be2c-c094dac90688 Content-Type: text/x-patch Content-Disposition: attachment; filename=pr100971.diff Content-Transfer-Encoding: quoted-printable =46rom 4db0aba8309a2c7e2c7ac95195621dff02e9796c Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Sun, 9 Oct 2022 20:43:32 +0200 Subject: [PATCH] Fortran: fix check of polymorphic elements in data transf= ers [PR100971] gcc/fortran/ChangeLog: PR fortran/100971 * resolve.cc (resolve_transfer): Extend check for permissibility of polymorphic elements in a data transfer to arrays. gcc/testsuite/ChangeLog: PR fortran/100971 * gfortran.dg/der_io_5.f90: New test. =2D-- gcc/fortran/resolve.cc | 5 +++++ gcc/testsuite/gfortran.dg/der_io_5.f90 | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/der_io_5.f90 diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index d133bc2d034..9202e2f10ad 100644 =2D-- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -10017,6 +10017,7 @@ resolve_transfer (gfc_code *code) if (exp =3D=3D NULL || (exp->expr_type !=3D EXPR_VARIABLE && exp->expr_type !=3D EXPR_FUNCTION + && exp->expr_type !=3D EXPR_ARRAY && exp->expr_type !=3D EXPR_STRUCTURE)) return; @@ -10030,6 +10031,7 @@ resolve_transfer (gfc_code *code) const gfc_typespec *ts =3D exp->expr_type =3D=3D EXPR_STRUCTURE || exp->expr_type =3D=3D EXPR_FUNCTION + || exp->expr_type =3D=3D EXPR_ARRAY ? &exp->ts : &exp->symtree->n.sym->ts; /* Go to actual component transferred. */ @@ -10128,6 +10130,9 @@ resolve_transfer (gfc_code *code) if (exp->expr_type =3D=3D EXPR_STRUCTURE) return; + if (exp->expr_type =3D=3D EXPR_ARRAY) + return; + sym =3D exp->symtree->n.sym; if (sym->as !=3D NULL && sym->as->type =3D=3D AS_ASSUMED_SIZE && exp->r= ef diff --git a/gcc/testsuite/gfortran.dg/der_io_5.f90 b/gcc/testsuite/gfortr= an.dg/der_io_5.f90 new file mode 100644 index 00000000000..193916c4a65 =2D-- /dev/null +++ b/gcc/testsuite/gfortran.dg/der_io_5.f90 @@ -0,0 +1,17 @@ +! { dg-do compile } +! PR fortran/100971 - ICE: Bad IO basetype (7) +! Contributed by G.Steinmetz + +program p + implicit none + type t + end type + class(t), allocatable :: a, b(:) + type(t) :: x, y(1) + integer :: i + allocate (a,b(1)) + print *, [a] ! { dg-error "Data transfer element at .1. cann= ot be polymorphic" } + print *, [(b(i),i=3D1,1)] ! { dg-error "Data transfer element at .1. ca= nnot be polymorphic" } + print *, [x] + print *, [(y(i),i=3D1,1)] +end =2D- 2.35.3 --rekceb-39cc0297-2143-4318-be2c-c094dac90688--