From patchwork Wed Sep 29 19:20:35 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 45582 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 87F01385842B for ; Wed, 29 Sep 2021 19:21:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 87F01385842B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1632943283; bh=KfKIf2xum27J/OcOmGs0h8yKKiVb7GyO3zUP6sN75to=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=Ofq6GSOhXKNlnCsTDBzXxL6ic8vdSaTPTNsy9wUej8EF4tphRTisDrmBWVi3dAyO2 +JNvRiDzRok6Et0jDDQ7NXJkZNPnLbLQl8PT9Uo36Vdpn2Op0WOY80TDGrKDdkwXZK KSajgxhuOMhMK8LvAbFDmXK4UUhmR+zpX62sziwg= 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.19]) by sourceware.org (Postfix) with ESMTPS id 086ED3858C60; Wed, 29 Sep 2021 19:20:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 086ED3858C60 X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [93.207.80.235] ([93.207.80.235]) by web-mail.gmx.net (3c-app-gmx-bs24.server.lan [172.19.170.76]) (via HTTP); Wed, 29 Sep 2021 21:20:35 +0200 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH, part 2] PR 102458 - issues with simplification of SIZE intrinsic applied to automatic arrays Date: Wed, 29 Sep 2021 21:20:35 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:NZU/h6sB1acxmKCXn8gNw9PugBWzYZ+/vxhIT14RJQhRPjr2TbQtHPcQnP79zUXo71GEn syLv4XC4zfma8hY2I8JxuqqbaMjZuvPybeysQM4H5Mi8qoUml1QAYKpI6byXCqqIPa9Rqb+f+H/A wm6olJ2mGbrJm0en3TTpraRISBBdv4/AalxgVzX4gODTwHXGtgVLnAGI1do8m68+ZB4ynEwYIE1e zNwc7r6K3Xqt8zzKLU9COLt+AF5ogCiE9jhxZSbqD8vAvSc/Ma3vjcgmFTjpdc4kbNYwvTHKqcLh OY= X-UI-Out-Filterresults: notjunk:1;V03:K0:KCP8CDuPSkg=:DUfqh/rH41pBvorbZaC1vf bYR2/zctfkQuIsa7h1Y15h92+P8AUjSjYbm4LQlmmsTw0qpShGu8TRVVFfk0Hv2CtGkdmvDaX M56ojyosQ2nCrp6TS1IDcze5aKh6PWhSNLjTnZExP+TKSn6U+f0FlSUusZ5586kUZChtrDsZ0 4wZa7/JXjtgk5MyVDZf4hpAEpdOTXOuOxJ3kbcWdhQI1+U0kM1Ccq95goQ2bgih20uTKXPOB8 9p7Z5GYCJkFZLC+MLO6GvXCBQR/j553Xu9ZdzC+tC5WEaYcTivuqRPY/HcbT+9PUvZ3+4q6C7 8zr4NYn7xv5gGemHGzjynD9VkMg3EZfrFn5mYN9AvtjA2alPZ8CE340OTNa2FsWk4QqDBOkc4 v4Cmdv/sOeow7BAt6FaspzjJJtCiXXhwlfFEplMLbGgRs6Xp0LTQkhol+t8sZ6VfvQaK/XD05 dzoy/gpZffXKdmkIeF6a9HI/tSdNOI8dkKdjX+v/vmGNrInbCqfFakpWFwbk2bp8DRJBY4tpv v8Ld01ii+k7iTObim1EFg5F4wAsJDZ9mOgzb5+M9oxeaXxt0rN8ySqNxlKjw8uZ0IZ91W87jG hERuJL5eeTxRMEWFpG5s2+0pp1SJIWHceTpEdn2K4bbKY23N3Bo+EvfrHIZQ/j+P4b03FCR8a WXQSloyvb+N7w6sQxvF9F6cKCOdyYKUm+uC9MQ0zAmYjSFkHPUa0ZtkMOQAAI7zZmx1u9Kum1 kKm4isESxh9Szxg2jv4Tftf4TNJ7NX42MSSiCSqUajVzNT3QRUS2R10lUCB75f9E67RnLniP4 T0sN+it 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 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, I think I have solved the remaining issue in PR 102458 that prevented the simplification of an expression involving a static initialization and the evaluation of the SIZE of an automatic array which has provable constant size. My previous related query to the ML has thus become obsolete. My solution is to attempt the resolution of the array specification within simplify_size so that the simplification actually works. Regtested on x86_64-pc-linux-gnu. OK for mainline and same branches as the patch for part1? Thanks, Harald Fortran: resolve expressions during SIZE simplification gcc/fortran/ChangeLog: PR fortran/102458 * simplify.c (simplify_size): Resolve expressions used in array specifications so that SIZE can be simplified. gcc/testsuite/ChangeLog: PR fortran/102458 * gfortran.dg/pr102458b.f90: New test. diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index b46cbfa90ab..f40e4930b58 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -7471,6 +7471,7 @@ simplify_size (gfc_expr *array, gfc_expr *dim, int k) mpz_t size; gfc_expr *return_value; int d; + gfc_ref *ref; /* For unary operations, the size of the result is given by the size of the operand. For binary ones, it's the size of the first operand @@ -7527,6 +7528,10 @@ simplify_size (gfc_expr *array, gfc_expr *dim, int k) return simplified; } + for (ref = array->ref; ref; ref = ref->next) + if (ref->type == REF_ARRAY && ref->u.ar.as) + gfc_resolve_array_spec (ref->u.ar.as, 0); + if (dim == NULL) { if (!gfc_array_size (array, &size)) diff --git a/gcc/testsuite/gfortran.dg/pr102458b.f90 b/gcc/testsuite/gfortran.dg/pr102458b.f90 new file mode 100644 index 00000000000..3e1026e635a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr102458b.f90 @@ -0,0 +1,21 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! { dg-final { scan-tree-dump-times "_gfortran_stop_numeric" 0 "original" } } +! PR fortran/102458 + +subroutine s4 + integer, parameter :: n = 4 + integer :: w(transfer(n, n)) = 1 + integer :: x(transfer(n, n)) + integer :: y(2*int(n) - n) + type t + integer :: z(int(n)) + end type t + type(t) :: tt, uu(3) + integer, parameter :: i = size (w) + integer, parameter :: k = size (x) + integer, parameter :: m = size (y) + integer, parameter :: j = size (tt% z) + integer, parameter :: l = size (uu(2)% z) + if (i /= n .or. k /= n .or. m /= n .or. j /= n .or. l /= n) stop 1 +end