From patchwork Tue Feb 1 22:38:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 50656 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 0024A3857818 for ; Tue, 1 Feb 2022 22:39:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0024A3857818 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1643755174; bh=cRV86e6EUfAs9U7xB/3YQFdPPICHomUMHfLQDVMsivM=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=I8uQfeDwV16IkouhzyVQCLtbYHqu12cfT5ZG2UjPMpTTZngiE2NLedYUTnG51hi1A tzZ4liW+tN2nXo4ySCycES80XSaSRhygfj4WLpQaBC/48dwsfPChfL9MR+pRzvXc0x l6z7Gi8BJvUHv03/yE+i1kxTD/xdkYAjFZhEE9i8= 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.20]) by sourceware.org (Postfix) with ESMTPS id 3267E385840B; Tue, 1 Feb 2022 22:38:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 3267E385840B X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [79.251.5.102] ([79.251.5.102]) by web-mail.gmx.net (3c-app-gmx-bap65.server.lan [172.19.172.65]) (via HTTP); Tue, 1 Feb 2022 23:38:46 +0100 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH] PR fortran/104311 - [9/10/11/12 Regression] ICE out of memory since r9-6321-g4716603bf875ce Date: Tue, 1 Feb 2022 23:38:46 +0100 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:fhtdXRMHsnXRF//h/MMwlVE/tOMNV7071aTXIql1bxGt7lNkUVpIG2FggCohrVyuL0Yaw UtyNwzM+diU1jWAWKRjFLEv4lCXi4GYDGe5MsNG4w/cKyK2V4yc2awnT08aKllUOqRTf5L4kY2Tm suamagBgf/c2l7teUJKl7OynJiXULQPZcdkvSVE4mK5uYk0pBe00UwVwcuOTHAUGo1UpAHmLgtso O3W0UuuxQXQ1MCK2x+xnMtMUlFyiBgDyWAK/BXM1DlTBgB8eK8P8TY4/+jeJw1mAgeGlZ9GjUz93 8k= X-UI-Out-Filterresults: notjunk:1;V03:K0:24UGU3ZjGEs=:m8B1PbJLZ59xzwdk5nBB4v 1aTvuG9juS7pI8uTSXp82Z6Dw8EbbzJCIxR5MoXdeg+uWPMKkFbSSRMr7GpIeRYwkzFSsJo8v bnVbzlW0jTUeJKj4SsQtevKuTkpju6gamFVd+YPmX4C2tzc5OaLQ+94hZt68jwBUO4KrRzDxp PhGKrINkhoSwMN7+RGBNANu/EhcwEhyVfRa+3dpySIqqiY1q7ElP6IYVQe1bWkN8wm7asAwfR LeJlp6sNRbEKtOiSpCpSh4yfiWNLfwj8qZdX/+DcfXL3yRdzjEhDAE7k436VgYKYnNTgx0t/3 qICx25mOYTaYZ9yUjuqAYypkzABMbrPTCnF8X+m4f1R/mD8QTY0lUPFLCefGDSCuKfMyorwsR k+XgI1tRAbo9y0yAsWq+riao2GsPyWw+pvi+EeuLkRCnHv08jZ81Ds6D5LfNr3q2BjwTcTw8B 2aLSEE2ED/fx8463OzQZzTeKu9Ma7TO6PDn/UsA6jML7DfrSjrp7Vlq56IwqU1bfwqAdb/1Jp JwuR1ILU71e0k7WaUcW0iwfqnJ49OvU0FRvrcFlEaSUWO1bGbItD4sMcfWbjOHfTvysqadnvJ gYcPMsbF3UpVFhqVROGb5LXcmVeCD0FYW03pd51/pZN0FcPh/fuWX7XMuiBzVl1FCuhwHq73q uW9npPybQzybD6QrHIL0kGhtJTUUdifzAkNUWC3ZDn3GZtmZ9uhkTy3GIeA5m1y+AQ3y806OT 5RfyKPr6mXU0hfTWXicaSpatjVrA29NxVUkMDgp/ISoZCakn8bXRBxktxPGLn9Xc9HnD6dv8u u7hVRM2 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.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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 Fortranners, a check in gfc_calculate_transfer_sizes had a bug in the logic: it did not trigger for MOLD having a storage size zero when arugment SIZE was present. The attached obvious patch fixes this. Regtested on x86_64-pc-linux-gnu. OK for mainline/11/10/9? Thanks, Harald From b8f124adcf258eccd29ffcec5cc3f8915cc2ca47 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Tue, 1 Feb 2022 23:33:24 +0100 Subject: [PATCH] Fortran: reject simplifying TRANSFER for MOLD with storage size 0 gcc/fortran/ChangeLog: PR fortran/104311 * check.cc (gfc_calculate_transfer_sizes): Checks for case when storage size of SOURCE is greater than zero while the storage size of MOLD is zero and MOLD is an array shall not depend on SIZE. gcc/testsuite/ChangeLog: PR fortran/104311 * gfortran.dg/transfer_simplify_15.f90: New test. --- gcc/fortran/check.cc | 2 +- gcc/testsuite/gfortran.dg/transfer_simplify_15.f90 | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/transfer_simplify_15.f90 diff --git a/gcc/fortran/check.cc b/gcc/fortran/check.cc index d6c6767ae9e..fc97bb1371e 100644 --- a/gcc/fortran/check.cc +++ b/gcc/fortran/check.cc @@ -6150,7 +6150,7 @@ gfc_calculate_transfer_sizes (gfc_expr *source, gfc_expr *mold, gfc_expr *size, * representation is not shorter than that of SOURCE. * If SIZE is present, the result is an array of rank one and size SIZE. */ - if (result_elt_size == 0 && *source_size > 0 && !size + if (result_elt_size == 0 && *source_size > 0 && (mold->expr_type == EXPR_ARRAY || mold->rank)) { gfc_error ("% argument of % intrinsic at %L is an " diff --git a/gcc/testsuite/gfortran.dg/transfer_simplify_15.f90 b/gcc/testsuite/gfortran.dg/transfer_simplify_15.f90 new file mode 100644 index 00000000000..cdbec97ae71 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/transfer_simplify_15.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! PR fortran/104311 - ICE out of memory +! Contributed by G.Steinmetz + +program p + type t + end type + type(t) :: x(2) + print *, transfer(1,x,2) ! { dg-error "shall not have storage size 0" } + print *, transfer(1,x,huge(1)) ! { dg-error "shall not have storage size 0" } +end -- 2.34.1