From patchwork Mon Feb 10 18:00:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 106291 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 C52C43856088 for ; Mon, 10 Feb 2025 18:03:27 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C52C43856088 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, secure) header.d=gmx.de header.i=anlauf@gmx.de header.a=rsa-sha256 header.s=s31663417 header.b=FKQ0Osj1 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.18]) by sourceware.org (Postfix) with ESMTPS id CDE26385AC25; Mon, 10 Feb 2025 18:00:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CDE26385AC25 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 CDE26385AC25 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=212.227.15.18 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1739210436; cv=none; b=whsvltzuAFRk53UtnnzIWSb9wG2YIFcsKJXCUMpa7q3kqXYUfpOarFqYI2I5RoHk9jTceu/SJVEhb4l5PvS+XlJKjApWhib/uT1+WJJWG0hxHalthFWkKsKsyfrOE9wVygMA5R4P4Z2AugKHe35yeqUUuk6QOj1OsSaZOx8tBu4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1739210436; c=relaxed/simple; bh=cGb7Xe7rQjkyfMpbGmqk1js9F2ODWio/S0HUdRkvehQ=; h=DKIM-Signature:Message-ID:Date:MIME-Version:To:From:Subject; b=mmhgVbuFn0nu/GsVFXldm6DYvMknJ8oSnnb24isDA6wOxVlCPLbD/MeYNUmGMxw4rGuUs2aQk9rYS2rV5KRoyLKo/MYxbY9bdCjJWM5J0S5Y1rg70zVBfjN7pMBGa91CAvIWN2hU7/hE2mwUHF0l2XsgMsOV0HznjqofT6pBaJg= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CDE26385AC25 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1739210434; x=1739815234; i=anlauf@gmx.de; bh=ZD0wLzkpyVvGl2+cAbwHOaE2oAjg0zqr21QHQC9f/vo=; h=X-UI-Sender-Class:Content-Type:Message-ID:Date:MIME-Version:To: From:Subject:cc:content-transfer-encoding:content-type:date:from: message-id:mime-version:reply-to:subject:to; b=FKQ0Osj1NWJnY9QBJgVRuqZZZPb6yV7tSAWhF5C4uvHHr2f0K0D6UZr+0jq/CJvk /MVEnjL3iixw19g/k5vBYUrjf0ID8+7y/db+47rDEm3FmEYvAYgt6w6/yaJrs1Jnz w1PLWoT/w1Jff7xq9CaGWkool8rFZfZ499y1kZpih6YbBHwNu9gC6s2pjg39ukEb3 ler4Po/i7zg/bz/MSDJaCdurXSas4oKi0yijGnYj6d1X7Ma4dPvQDO6bq0NkDbVNV lNwqXVoMskuOdyCrLlH1sex5XSJg1q3sn3UQuhqEg6a+ltLGrHaWvqgE9Lf21hyHK 0teFyg8CXYp6K8zksA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [192.168.178.29] ([79.251.15.3]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1M4JmN-1thpCN2Civ-007RI6; Mon, 10 Feb 2025 19:00:34 +0100 Message-ID: <264c79e9-0641-4116-91ed-942bda0fbb7b@gmx.de> Date: Mon, 10 Feb 2025 19:00:33 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Newsgroups: gmane.comp.gcc.fortran,gmane.comp.gcc.patches Content-Language: en-US To: fortran , gcc-patches From: Harald Anlauf Subject: [PATCH] Fortran: checking of pointer targets for structure constructors [PR56423] X-Provags-ID: V03:K1:pu/iG8+2KCylEBr99y3sqbta/I28fnbz0+EmPo8w3wCxgYa+acA CEYzjhF3UIEbZBGJW8GH6j/0hwvyySxJT+/364cHInMm2kzhtkxku8R/sl+i2/erD4WVM9l ddA7sr0rumC8482FcNh/ML9PBRtAx6t6tgrs7Llogoi83EDPT3e+wdctZLEVm+FEUZY4Rey 8RoYmDsibkW1WKl1m6QYA== UI-OutboundReport: notjunk:1;M01:P0:68e6k3UITL0=;JHQdjuKBzAYHYKMNovR5NzNFuLL V+SLKxL01E5DcWSaVBU8HHPHALE1FXadNRiSXfHtt0vFFOzXQeaGyErme1mWZo+KtOQSYZ8HP yN6Uwld/AvQ70kpEkotYbPEVPrPqTmas7O7BTaZkB4sApIYjhf4l6VAVtYPEcOhYhbTuX3vub HDy942Nh6jmk1aPga4prjs5BEucVrx6bRDIkBoDhiHHAbrxjYUqFsHMh0x634kUA5SUnUOM1a ew8VzmdS43Adr1RrjEq3nMu4cra0Nm2qXb2pmdpijoEo8uRbWn+ozDY0oDoOVniUyrKlOm2K4 lgKUsOSGZFg+nt8YLuzw0NkIR5L6H8qLawiGVEq+/95QU5x9WFIxBDCMQEQhJXkAoe+7hlePY R2cpUYClyxDYoe5GMS16IOXDfTNwP5Yvt/7BdbZufzlpvcwnInN7FkRHSJ+rnnYy0S7BTRCBg SfrVlod7Fl1afIXxagsB/tILuO5/RNM1s1xN5xA/QM5jpBD9dC0O8eXSYMpWF+uH5Q1VS3zBq 4CpWTvc6ym4COSJi3Cw0qoNta4DEr0MuN1jW3K/6HipV9fETGfZTW4Q2hM/3SuCp+JAx+0lL0 ReqzV34USq0mLEfP+gfX0UfTAQR6MzTxqurh3ibarDEvs8Ts+jsm4vfsrPLRYW6lf0T3KP1qI lT4tC08fK72roB0hbW7/vdSCbX8XzB7u6pOPZI0QW6xt+YRLDnWgn30DGT7eYfaHEYNiEKdTj eFwK24Xpry4UrJJl1BsuPLMu04F5ytZCNWVRrfNxPnSDmatl5zuWwqqgVGltlRrpUOL2HZMk7 GMRU09eYjKyJuiK/B/VI5X5jOaEhjWivxycONWXB3edMo5FePt7WS4HlOy0WCbNpI/96Lak5/ MQ+ZTka+dAoZWsOq9i6Iq0HJM4eliYVzl+cRx2k75Wj/ZML65mw3NCS2qL75vZt88wnH1vHhy s52l5h/9q4bwnD8n3xebsbbhKhp9/RGjCn/l4VAONhF1xbYfgxxtP7BR6i8Qh7DbrmTofuS9J cMH9bv3piKCDQNdXzh+hH6Gb5NoZSc8UbMhwk4wYhJEpJgvviIzyCc/HTwaVfS0VUlKwrfqOY DSv3jfA/xAUoVWzUioAAz0lQpqSLobS/Jja0eYeE1b1BtG6+ZsbE/OhrTpzF9NGF5nD1Jqrh0 9yCqveWm6m0y3kTXjw/e6VttyQS2AFVfTFGQbWqOFPlQfw+Sxhyr6AnhUrtDkGRrXRCadcUFB Syskpa0o9yG9Z8NdOSyKzSay0eB7KdeQ9ltcYY2tgB7rmq/MFN/T6VQUyFCG9p6qz0orQX2XG kU0uM9hMB09ZqNmexjjmsI6n/J/S+cStn1ymZv5BHrKMDi2ol0amO3XZ+W9ZSlPM2xMIzpwp/ dQIvLjTd/j5xHtZIltREUpB3MnsebJfMo07/WODz6t89G2RNSj/uyey1PY X-Spam-Status: No, score=-12.2 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_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=unavailable 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 patch enhances the checking of pointer targets in structure constructors to catch the following invalid cases (before we ICE :) - different rank - vector subscript of target Regtested on x86_64-pc-linux-gnu. OK for mainline? Thanks, Harald From 118a6c3247bb30ef932341cec3ca15e2c6304b69 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Mon, 10 Feb 2025 18:47:45 +0100 Subject: [PATCH] Fortran: checking of pointer targets for structure constructors [PR56423] Check the target of a pointer component in a structure constructor for same ranks, and that the initial-data-target does not have vector subscripts. PR fortran/56423 gcc/fortran/ChangeLog: * resolve.cc (resolve_structure_cons): Check rank of pointer target; reject pointer target with vector subscripts. gcc/testsuite/ChangeLog: * gfortran.dg/derived_constructor_comps_2.f90: Adjust test. * gfortran.dg/derived_constructor_comps_8.f90: New test. --- gcc/fortran/resolve.cc | 12 ++++++++++- .../derived_constructor_comps_2.f90 | 4 ++-- .../derived_constructor_comps_8.f90 | 20 +++++++++++++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/derived_constructor_comps_8.f90 diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index 7adbf958aec..1a4799dac78 100644 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -1370,7 +1370,7 @@ resolve_structure_cons (gfc_expr *expr, int init) gfc_find_vtab (&cons->expr->ts); if (cons->expr->expr_type != EXPR_NULL && rank != cons->expr->rank - && (comp->attr.allocatable || cons->expr->rank)) + && (comp->attr.allocatable || comp->attr.pointer || cons->expr->rank)) { gfc_error ("The rank of the element in the structure " "constructor at %L does not match that of the " @@ -1583,6 +1583,16 @@ resolve_structure_cons (gfc_expr *expr, int init) } } + /* F2023:C770: A designator that is an initial-data-target shall ... + not have a vector subscript. */ + if (comp->attr.pointer && (a.pointer || a.target) + && gfc_has_vector_index (cons->expr)) + { + gfc_error ("Pointer assignment target at %L has a vector subscript", + &cons->expr->where); + t = false; + } + /* F2003, C1272 (3). */ bool impure = cons->expr->expr_type == EXPR_VARIABLE && (gfc_impure_variable (cons->expr->symtree->n.sym) diff --git a/gcc/testsuite/gfortran.dg/derived_constructor_comps_2.f90 b/gcc/testsuite/gfortran.dg/derived_constructor_comps_2.f90 index a5e951ad102..04bd95559ea 100644 --- a/gcc/testsuite/gfortran.dg/derived_constructor_comps_2.f90 +++ b/gcc/testsuite/gfortran.dg/derived_constructor_comps_2.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! Tests fix for PR29115, in which an ICE would be produced by +! Tests fix for PR29115, in which an ICE would be produced by ! non-pointer elements being supplied to the pointer components ! in a derived type constructor. ! @@ -9,7 +9,7 @@ integer, pointer :: bart(:) end type homer type(homer) :: marge - integer :: duff_beer + integer :: duff_beer(1) marge = homer (duff_beer) ! { dg-error "should be a POINTER or a TARGET" } end diff --git a/gcc/testsuite/gfortran.dg/derived_constructor_comps_8.f90 b/gcc/testsuite/gfortran.dg/derived_constructor_comps_8.f90 new file mode 100644 index 00000000000..ce53eef7503 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/derived_constructor_comps_8.f90 @@ -0,0 +1,20 @@ +! { dg-do compile } +! PR fortran/56423 +! +! Check constraints on pointer targets for derived type constructors +! +! Contributed by Tobias Burnus and Gerhard Steinmetz + +program p + integer, target :: x(3) = [7, 8, 9] + type t + integer, pointer :: a(:) + end type + type(t) :: z + z = t(x) + z = t(x(1:3)) + z = t(x(3:1:-1)) + z = t(x(2)) ! { dg-error "rank of the element in the structure constructor" } + z = t(x([1,3])) ! { dg-error "has a vector subscript" } + print *, z%a +end -- 2.43.0