From patchwork Sun Jan 7 21:34:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 83488 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 ECE553858437 for ; Sun, 7 Jan 2024 21:35:05 +0000 (GMT) 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 525793858CDA; Sun, 7 Jan 2024 21:34:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 525793858CDA Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmx.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 525793858CDA Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=212.227.15.15 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704663276; cv=none; b=x7g9IoKRbVmD4BCw2wfGRzSdyhCM+LflH6cgWBXY89bNbVXs0NlarD707OhXdrcBhrfmCqLLGj2rvcJrueu+2YqutyoDl5DJBzcZgPkAGY20jduw2MLy/3ryMuy4oKdIs4Xvo4TyiMinP9/9F9IlRPp8Ibx05KaHx6Bcn8U7Ego= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704663276; c=relaxed/simple; bh=ejWfh/tCcdpMSu3EWxWZQW5yKsDOfandYQKKazY0EXw=; h=DKIM-Signature:MIME-Version:Message-ID:From:To:Subject:Date; b=jiXY/M5Y7IF9tZrXh4qkrqGT7wWVwkLsYi1pU5StlZLfH/u+SsozNHunQ7PiRZD9WoMA+ggXeqHppyCevx86HGjVla5KkzkrPbXKToXdTFisoz8d55WNHmKfUoDgEiEj7rHCShppXwF/hxdOcQ7g+MSawej6vVqkvLGyhfLnwms= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1704663272; x=1705268072; i=anlauf@gmx.de; bh=ejWfh/tCcdpMSu3EWxWZQW5yKsDOfandYQKKazY0EXw=; h=X-UI-Sender-Class:From:To:Subject:Date; b=atJGqbWooTUhUqbimGOBiqlwWxLJbYY21BTDSNtASYXFZZ4cPqxPjD+pU3u4B1g3 oymoIQ9bxnjEqNiJl5PdOL5zr6FCTUA5r02GUFwd9N4ybSR6vY63oXy0iHSbivki5 pM0r11uM8G9NInZxuGLQqlBjTA4FwKu+kqjkvK3xsZ/VOYIbGn7CNRQMoLox2zGnK IDSeQgL6ptthizs5GRd2CLcV6gSTmMjt0JfkWAFQPUQAHb768ii4cpp5c6c19Bkzv a7N+YUA9XvSDH8wKWkB57yKnproegYogyyQ0gNVN1Ev/Mr3BUZU4AUjh2yRfPCgMg jsFWleKFzVJHxN9fOQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [79.232.153.174] ([79.232.153.174]) by web-mail.gmx.net (3c-app-gmx-bs51.server.lan [172.19.170.104]) (via HTTP); Sun, 7 Jan 2024 22:34:32 +0100 MIME-Version: 1.0 Message-ID: From: Harald Anlauf To: fortran , gcc-patches Subject: [PATCH] Fortran: SIZE optional DIM argument having OPTIONAL+VALUE attributes [PR113245] Date: Sun, 7 Jan 2024 22:34:32 +0100 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:TdfsVcETXWV0MepRuQWavIxuRbcKSS7k2rNNtujNPwwGXpiPbQ2Rff7C6Q4xp7w3dEsku eIxhstm407vsEuXhbdlhtL1x8M+JScvxYn/92FIMvfBCeer8cTxg0YjHvEJULJjLdNwk+2/AkhQP 19jjyy9TVjH+yG3fkyvjcwN/smEcgC+og+H3oJ9ya4yu9oobCRprN3Xk3gy6BhJ9HApJeaSWn9pF Xt28wFHQj9lIDkDxOOvAkz4LMBcQAR238jsM2BLWMnJA/O/bDtYzzQysRuCb+CWdGVi3zPFKH29b mo= UI-OutboundReport: notjunk:1;M01:P0:/49ZWvtPO7k=;Rbv2YbXffOW6TtUnhBMDPzr4Rki 5T1fghsb3d8UDvTQbX1vyuD1+eYFymecH1QYhQKaTPRVSvAZYraVNht9MiGmaB+a+WOjsowMk BbadgHCzqjJJfBzFIqV7Ig7B1VyVx7BvBywOjv41xKy/PGq62jdpSlj9yLGOGBY8RXoNIWw/w bvKqd8qq4yKFzTvtZyVqGfx8qzfdef7RXDFiWzMPH6Qtgl2KBJwMqcT9OR6W+qS241hksBsL3 J1kLAxjMP/4F4AzYwd+o0PkHVAmZ5KpliDAfu4FoY/c45PRy5ji5+u/ProOdmGHpmaEuv0pxx jXCKpnlSdyuts4diOm9FpaQj4hSh+PiTfEq9XpZe64mrxo2h9MWHgxwhv7MSiMb/zixayULIV urSWTZLy3QBn4P6k58Xq/k+j+o6dxTUzVOgoCUEvdr9fBHrtixoo4IKaA6pAicDSPVk+KeajC riNJ/asoh50+hsEyOhUtbB5n46I6aRwaTlgOR4bTftJ+ELWlKYHCrjLFyz5jfNyhsq6fcqpHt RNO9/TCG5HN82SN7P3JtJxEWqVPHrIz2XQAZ4jnEc9YYdcMrTSNGHK77YJ1fDYs+AVsgJ8ZMi dhVkq9rxDc1LC7mWwx9Q971zqI9YrhFJLDrh3+KjxIaQxbUfKtaXxRhr0Mgq/paxl0gdMA28Z cVdpGKpglNDSUeGoB68e34P4eUjK9o39R2WAFblKN0B6gccffSLYBZ9XiUB86MdCbfOwY2ZD3 45jweXvT7/VTq8urY5oHWkCi2EiJG7Wq9v2+o6uF8hmm/4qKNwwvVJGMbdNqzsgTmDeO3qepH hmqn9nzgv5cjAYBygys/T18Q== X-Spam-Status: No, score=-11.7 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_H4, RCVD_IN_MSPIKE_WL, 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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Dear all, the attached, actually rather obvious patch fixes an issue when an optional dummy with the value attribute was passed as DIM argument to the SIZE intrinsic. Instead of some hand-crafted, incomplete presence check for the argument, it makes more sense to rely on gfc_conv_expr_present(). Regtested on x86_64-pc-linux-gnu. OK for mainline? Thanks, Harald From 49f5c89f6bdddbb225ca70f8df78a75252b0b2d5 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Sun, 7 Jan 2024 22:24:25 +0100 Subject: [PATCH] Fortran: SIZE optional DIM argument having OPTIONAL+VALUE attributes [PR113245] gcc/fortran/ChangeLog: PR fortran/113245 * trans-intrinsic.cc (gfc_conv_intrinsic_size): Use gfc_conv_expr_present() for proper check of optional DIM argument. gcc/testsuite/ChangeLog: PR fortran/113245 * gfortran.dg/size_optional_dim_2.f90: New test. --- gcc/fortran/trans-intrinsic.cc | 4 +-- .../gfortran.dg/size_optional_dim_2.f90 | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/size_optional_dim_2.f90 diff --git a/gcc/fortran/trans-intrinsic.cc b/gcc/fortran/trans-intrinsic.cc index d973c49380c..74139262657 100644 --- a/gcc/fortran/trans-intrinsic.cc +++ b/gcc/fortran/trans-intrinsic.cc @@ -8025,9 +8025,6 @@ gfc_conv_intrinsic_size (gfc_se * se, gfc_expr * expr) argse.data_not_needed = 1; gfc_conv_expr (&argse, actual->expr); gfc_add_block_to_block (&se->pre, &argse.pre); - cond = fold_build2_loc (input_location, NE_EXPR, logical_type_node, - argse.expr, null_pointer_node); - cond = gfc_evaluate_now (cond, &se->pre); /* 'block2' contains the arg2 absent case, 'block' the arg2 present case; size_var can be used in both blocks. */ tree size_var = gfc_create_var (TREE_TYPE (size), "size"); @@ -8038,6 +8035,7 @@ gfc_conv_intrinsic_size (gfc_se * se, gfc_expr * expr) tmp = fold_build2_loc (input_location, MODIFY_EXPR, TREE_TYPE (size_var), size_var, size); gfc_add_expr_to_block (&block2, tmp); + cond = gfc_conv_expr_present (actual->expr->symtree->n.sym); tmp = build3_v (COND_EXPR, cond, gfc_finish_block (&block), gfc_finish_block (&block2)); gfc_add_expr_to_block (&se->pre, tmp); diff --git a/gcc/testsuite/gfortran.dg/size_optional_dim_2.f90 b/gcc/testsuite/gfortran.dg/size_optional_dim_2.f90 new file mode 100644 index 00000000000..698702b0974 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/size_optional_dim_2.f90 @@ -0,0 +1,31 @@ +! { dg-do run } +! { dg-additional-options "-fdump-tree-original" } +! PR fortran/113245 - SIZE, optional DIM argument, w/ OPTIONAL+VALUE attributes + +program p + implicit none + real :: a(2,3) + integer :: expect + expect = size (a,2) + call ref (a,2) + call val (a,2) + expect = size (a) + call ref (a) + call val (a) +contains + subroutine ref (x, dim) + real, intent(in) :: x(:,:) + integer, optional, intent(in) :: dim + print *, "present(dim), size(a,dim) =", present (dim), size (x,dim=dim) + if (size (x,dim=dim) /= expect) stop 1 + end + subroutine val (x, dim) + real, intent(in) :: x(:,:) + integer, optional, value :: dim + print *, "present(dim), size(a,dim) =", present (dim), size (x,dim=dim) + if (size (x,dim=dim) /= expect) stop 2 + end +end + +! Ensure inline code is generated: +! { dg-final { scan-tree-dump-not "_gfortran_size" "original" } } -- 2.35.3