From patchwork Mon Jan 16 21:11:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 63256 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 D0710385841D for ; Mon, 16 Jan 2023 21:12:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D0710385841D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1673903539; bh=xrxCkTKAOQnHoZ5XdOTpR0VcnABXRQ71y/LPGxcY4SY=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=cRdMvBH6NrJU2n2Gp8qK4siMiGU2gXg6b78qymY3NPl/Ht3uaHykXeg+FjcmnoSYs gPjSTW0gOtS5y9vbDxARh6gIUNOmQwxk7UUgSmt1Fe064k9p9oll5IjNQsXcIN0xSb WuWsDhV9rJoseAX0t4UReNAKj2MI1GTrLC5vWJ7M= 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.15.15]) by sourceware.org (Postfix) with ESMTPS id 565FA3858D33; Mon, 16 Jan 2023 21:11:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 565FA3858D33 X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [93.207.89.104] ([93.207.89.104]) by web-mail.gmx.net (3c-app-gmx-bs50.server.lan [172.19.170.103]) (via HTTP); Mon, 16 Jan 2023 22:11:49 +0100 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH] Fortran: fix ICE in check_charlen_present [PR108420] Date: Mon, 16 Jan 2023 22:11:49 +0100 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:GHu9yl8YnJEucga9e8lUKaK7iaGKoPPS+uVf9iXAoy9bwc9iAq+KHMEt3K8W3nAk4qOzf lyOePQvq0K20Q0nChHaLRKH62VV2PpXvWGzkOeq6ndyCPGVF3Fx5GY3Bdv2Jr370+RGh+Btlp2B/ QH+eU5uot3bttGnx6Fn/umnynJgfiCNMSofzz4d7a1wVaF8KF+nffbICKm/8w4tR8vxk6qE/YTmp qyfAxPvMhArwA3HITxIbvoMYnSreMPCwARPLQroLwZwoCbYdBd5hj+7Zhtgh6gmtvrjSPqV4rxa5 lA= UI-OutboundReport: notjunk:1;M01:P0:fBePYigY82Q=;XkkBqU54bY3b5p+DGekZLSJEduO OiYiOWHag3bx5tR62Mxvn6kkxaGnbqtoEzVJ+85zMf4L9pB5LJBKl/ju+pyuah3XHOUc2DTRb bwu4ZsQUhZ6z2TynEO0epl94iASD89oarFBTm/dHlVKzmMFNJKz511zCIsTFw7qJsIDm5vpwS UuOXj0eJjfw+tbfY74Q9SAuWvpdwGKsfyLYH9XAbFe5elxf/RzQdh+Pxi9DZ3qexnaCVa2ixf 4jXPHoormO8Dba+6p5zR8V4g047Ixvk4hJLIeOTAgFaV2roxvAfPhvvBR1ZSLcL7zRXo44ruY OUZzpNBXZezBfidWcipbSCa8v2tq7SJa9psnl2+jtGRXk1BdwZqeqQy9uVnXJtM65WAZdBgre a6SEJOuoQJJLnSGjZ5uo3Rq0Giz8bb14t7j7/zHjerOykQBNZOAoJc+r5QmuRRzW6FmWzvf7Y 0GfaPYZKGpxU+QUf5A2Cs/hF4JxpU7moDK52vR0Ngm5gyHFNjNA4uGSvbhWpwdH+aPUl/c6wy F+328xFn/9eR7MPNtcKTqrI2n2PDvKkbKLX8ikAK42vLFB1kITptQB8N/eLqThpfwqMEqwEld XfEbwveuLUppcd6GKUCoO+5M9a3WxhRUaIhsLaW63yqbt266Bck6KNhakxRxyrz1DsjuGiPzk 1HztcbmDj0safMbsHdrN5tpm2+bN2uwqPNxc6kAIPApGQRtYKZgj8PY8dxIGTX7XxvSow9AUf BnjGcFNK1UXuBI33aMAVWFv0Iq7KueHKmwcenk/DPgbQtD8pmoGLPGbprNGHxE0KGNVZufax4 7K56wEl4RYsR/liPx2BOIhqQ== X-Spam-Status: No, score=-13.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, 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, it appears that the fix for pr107874 uncovered a latent bug for the case of arrays of type character and size zero when passed to the intrinsics MERGE and SPREAD as SOURCE. In that case, there is no constructor from which we could obtain another character length. A reasonable solution seems to retain the array's character length. Since I could not find a simple case where this fails, I've added an assertion that we actually have a meaningful length. Regtested on x86_64-pc-linux-gnu. OK for mainline? Thanks, Harald From a4fbab560a202f4541f8f9a872774b2cbf72b4b0 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Mon, 16 Jan 2023 21:41:09 +0100 Subject: [PATCH] Fortran: fix ICE in check_charlen_present [PR108420] gcc/fortran/ChangeLog: PR fortran/108420 * iresolve.cc (check_charlen_present): Preserve character length if there is no array constructor. gcc/testsuite/ChangeLog: PR fortran/108420 * gfortran.dg/pr108420.f90: New test. --- gcc/fortran/iresolve.cc | 9 ++++++--- gcc/testsuite/gfortran.dg/pr108420.f90 | 10 ++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr108420.f90 diff --git a/gcc/fortran/iresolve.cc b/gcc/fortran/iresolve.cc index 711e9178ad4..33794f0a858 100644 --- a/gcc/fortran/iresolve.cc +++ b/gcc/fortran/iresolve.cc @@ -94,9 +94,12 @@ check_charlen_present (gfc_expr *source) else if (source->expr_type == EXPR_ARRAY) { gfc_constructor *c = gfc_constructor_first (source->value.constructor); - source->ts.u.cl->length - = gfc_get_int_expr (gfc_charlen_int_kind, NULL, - c->expr->value.character.length); + if (c) + source->ts.u.cl->length + = gfc_get_int_expr (gfc_charlen_int_kind, NULL, + c->expr->value.character.length); + if (source->ts.u.cl->length == NULL) + gfc_internal_error ("check_charlen_present(): length not set"); } } diff --git a/gcc/testsuite/gfortran.dg/pr108420.f90 b/gcc/testsuite/gfortran.dg/pr108420.f90 new file mode 100644 index 00000000000..985c0b3bf53 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr108420.f90 @@ -0,0 +1,10 @@ +! { dg-do compile } +! PR fortran/108420 +! Contributed by G.Steinmetz + +program p + character :: c = 'c' + logical :: m = .true. + print *, merge(transfer('a', 'b', 0), c, .true.) + print *, merge(transfer('a', 'b', 0), c, m) +end -- 2.35.3