From patchwork Sun Oct 9 18:57:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 58561 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 83D4B3858281 for ; Sun, 9 Oct 2022 18:57:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 83D4B3858281 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1665341873; bh=YXyzNZTvTVlXA2yEzaALfCi6mqVyPCL+adVoSVBrNGg=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=ThkhHo7QDffJtxGPe0d/UuTtUnEKQjviH2Jgi6F665b1rv1JIQe8XlYO4tsSQieKw xdqQWUyMJBaAo6Q+UnHg4SvsZExOS1U/3IcwyJkf4fZWaFpR6KSYWOO2gKlbdTODQG +XZT8+9lQnq4dXzjoEGmfXOEdELsCFdFrwdMCEyo= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org 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 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: To: fortran , gcc-patches Subject: [PATCH] Fortran: fix check of polymorphic elements in data transfers [PR100971] 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Harald Anlauf via Gcc-patches From: Harald Anlauf Reply-To: Harald Anlauf Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" 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 From 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 transfers [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. --- 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 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -10017,6 +10017,7 @@ resolve_transfer (gfc_code *code) if (exp == NULL || (exp->expr_type != EXPR_VARIABLE && exp->expr_type != EXPR_FUNCTION + && exp->expr_type != EXPR_ARRAY && exp->expr_type != EXPR_STRUCTURE)) return; @@ -10030,6 +10031,7 @@ resolve_transfer (gfc_code *code) const gfc_typespec *ts = exp->expr_type == EXPR_STRUCTURE || exp->expr_type == EXPR_FUNCTION + || exp->expr_type == 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 == EXPR_STRUCTURE) return; + if (exp->expr_type == EXPR_ARRAY) + return; + sym = exp->symtree->n.sym; if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE && exp->ref diff --git a/gcc/testsuite/gfortran.dg/der_io_5.f90 b/gcc/testsuite/gfortran.dg/der_io_5.f90 new file mode 100644 index 00000000000..193916c4a65 --- /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. cannot be polymorphic" } + print *, [(b(i),i=1,1)] ! { dg-error "Data transfer element at .1. cannot be polymorphic" } + print *, [x] + print *, [(y(i),i=1,1)] +end -- 2.35.3