From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) by sourceware.org (Postfix) with ESMTPS id A6E2C383DBBF; Fri, 24 Jun 2022 20:38:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A6E2C383DBBF X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [79.251.14.24] ([79.251.14.24]) by web-mail.gmx.net (3c-app-gmx-bap16.server.lan [172.19.172.86]) (via HTTP); Fri, 24 Jun 2022 22:38:20 +0200 MIME-Version: 1.0 Message-ID: From: Harald Anlauf To: fortran , gcc-patches Subject: [PATCH, committed] Fortran: fix checking of arguments to UNPACK when MASK is a variable [PR105813] Content-Type: multipart/mixed; boundary=rekceb-4db41faa-d0d0-4b21-932d-f9c6da6e4d18 Date: Fri, 24 Jun 2022 22:38:20 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:kwKIm1HuDGYRKeKy49WaRDJTvofchTpXw9QUaxipOhfb0IgWShFWZ1DDldpKx4EuCqBEF VdfmPAnsDheVsnVlF607wfssaRe87z5tSNkG1m4SRN69Sz7HUn4m76+gJAxJNnbo8uLNzC94h3sD R2XlQEpVs63J7cfklo9YIEZkgVTej8mdyz7kVcSboIgYIfAkiFuLotL/czfYxTTNTQb1jG4LBjtC z39swX1vTmBN7oVpTv51LJxbIKtULtLuiPRHGCCEr/mHG0x40ZkwSBA5h4WD99OdgCld2UcglHCS iE= X-UI-Out-Filterresults: notjunk:1;V03:K0:CdckvwxRbrg=:l+rFtHpY1XtEVF1uF9u9c0 wpb0akSIKRMJKSUnwoPhJfJLQWVkIFx/9lYgQ0pTY8iAJ0hqonlugZFpx5dZn4Fffz90be8S5 N8rZQpDCsWx9FNdJ1v7C0hhp+W+iYhb92UrxMO453KBo5BwdHQqUASudxT0cNt1nyuI4V77j7 8Mmku0ERQXU7satDhUh0VVEA1MBnv6RQJd31o32/97aqsYLvuLK/oZePCwCLnX1ZPbBdJxWyJ nSKu8pZrk9qsm55ndvDdUx5ShX01wiSWdTjQQtP/F5uLr6ugUfk6LQ6VnDNeevz0eKqxvegQn 2Z5gwY9VLVXC/fyyMhgw0pWO8O5SoUZ2BX7CX80JqS1lZ1WNqW6Kl5tJjRshzY5vhxi6KC5Gt 4NNRzXstDMHKcBXDOPWIgQ0MfN/BM1RBtT6z3Wr7e5qzPE4cjwP0QFvSYRATOhnLTn4KybwoO sNqZz16cXkQRtdUsjwmdgUl+OqilUVWt8vtTw3nIT8InDygsMQckzac+3NJoUNxO0e8gEJN1K je9KuG3rpCtqwxNCLXSIRnIuLyU+DigTRSmH1mLAvQ3xbdz+Z2WSVkfAexhg3iAZLKAr6ebCU 11SCuWlLFzHZ4P4Y1O3T6nxaaf97vK8l/gffBYH92qASmwaGUuALscshd6yJBykRasAHVXBiu YgCLUXENXT++c8Q+a58xZFwJ6djVSqTCLICnj1/dEA7pR2C4OrojbuYJebfo//064cnS8E0DB PNrLaoAUU8B8DNSh1dk0Je7HXTYXiLQXM8aX09I4abJTUQUjQksNu4erLBo= X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, 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 X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Jun 2022 20:38:23 -0000 --rekceb-4db41faa-d0d0-4b21-932d-f9c6da6e4d18 Content-Type: text/plain; charset=UTF-8 Dear all, we failed to fully check arguments to UNPACK when the MASK argument was not simplified and considered a variable instead of an array. The fix is a one-liner. Regtested on x86_64-pc-linux-gnu and committed to mainline as obvious after an OK by Steve in the PR. Thanks, Harald --rekceb-4db41faa-d0d0-4b21-932d-f9c6da6e4d18 Content-Type: text/x-patch Content-Disposition: attachment; filename=pr105813.diff Content-Transfer-Encoding: quoted-printable =46rom f21f17f95c0237f4f987a5fa9f1fa9c7e0db3c40 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Fri, 24 Jun 2022 22:21:39 +0200 Subject: [PATCH] Fortran: fix checking of arguments to UNPACK when MASK is= a variable [PR105813] gcc/fortran/ChangeLog: PR fortran/105813 * check.cc (gfc_check_unpack): Try to simplify MASK argument to UNPACK so that checking of the VECTOR argument can work when MASK is a variable. gcc/testsuite/ChangeLog: PR fortran/105813 * gfortran.dg/unpack_vector_1.f90: New test. =2D-- gcc/fortran/check.cc | 2 ++ gcc/testsuite/gfortran.dg/unpack_vector_1.f90 | 12 ++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/unpack_vector_1.f90 diff --git a/gcc/fortran/check.cc b/gcc/fortran/check.cc index 0c2cb50c6a7..91d87a1b2c1 100644 =2D-- a/gcc/fortran/check.cc +++ b/gcc/fortran/check.cc @@ -6353,6 +6353,8 @@ gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, = gfc_expr *field) if (!same_type_check (vector, 0, field, 2)) return false; + gfc_simplify_expr (mask, 0); + if (mask->expr_type =3D=3D EXPR_ARRAY && gfc_array_size (vector, &vector_size)) { diff --git a/gcc/testsuite/gfortran.dg/unpack_vector_1.f90 b/gcc/testsuite= /gfortran.dg/unpack_vector_1.f90 new file mode 100644 index 00000000000..5347c111e8f =2D-- /dev/null +++ b/gcc/testsuite/gfortran.dg/unpack_vector_1.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! PR fortran/105813 +! Fix checking of VECTOR argument to UNPACK when MASK is a variable. +! Contributed by G.Steinmetz + +program p + logical, parameter :: mask(2,2) =3D reshape ([.true., .true., & + .false., .true.], & + shape (mask)) + print *, unpack ([1,2,3], mask, 0) ! OK + print *, unpack ([1,2], mask, 0) ! { dg-error "must provide at least"= } +end =2D- 2.35.3 --rekceb-4db41faa-d0d0-4b21-932d-f9c6da6e4d18--