From patchwork Tue May 18 18:36:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 1480386 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=PzuVpII0; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Fl4TV3kV3z9sPf for ; Wed, 19 May 2021 04:36:29 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7C23D39578CC; Tue, 18 May 2021 18:36:24 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7C23D39578CC DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1621362984; bh=XCbjKn+Tp0whmQi8N+7VttBknuKYhMSvmXaL5eMolYo=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=PzuVpII01cN8gZ5bJTR0S156c4XBZbdGQ6U52AhE6QBe+i1colxaXZ7XQTKZAAWDk W03DYsYWYJDKIfBgmpVAm9fKLgE5tl2b+7IdzuPJWNbKjSdJjM0uWUfUVF8q1bPSIi 7do46MQLh8IATByCB0iUg1gF6Yv6K5cQrt4rBAOc= 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 E7FE3393A436; Tue, 18 May 2021 18:36:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org E7FE3393A436 X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [93.207.80.164] ([93.207.80.164]) by web-mail.gmx.net (3c-app-gmx-bap67.server.lan [172.19.172.67]) (via HTTP); Tue, 18 May 2021 20:36:18 +0200 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH] PR fortran/100602 - [11/12 Regression] Erroneous "pointer argument is not associated" runtime error Date: Tue, 18 May 2021 20:36:18 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:6cYTe09ZO/1u7+Was4V/M6dkg5j3gLyfWhs/4bbAN8cvpt9j7jD42ULILfGEjPvDfeSoJ uh5A6tV2yKq9AGAtQgfMRagZqK4qtwi6Tw9fq7d/uC1bxKgvX4AOoZuRlTNYxuq/91FGJAmXQ2QP JlsK3jO1awoM1GhhMTC8Xl29Gi3sgk2SGxO65wywqZvrYYFyVJe3O4ul7CQWEoP+opFw3faMHszN N5YKj/Ttg2W09TEVTt3rpDGPW/WRorc5TANuLgOh+zD2akLR3Sv9ScmN9Rmaq4lvrt9K84ZXecAx XM= X-UI-Out-Filterresults: notjunk:1;V03:K0:YTAzBvz1wLs=:KOwcZdTq/KLIOh3CeXtzk9 SRixcfdWCYgqXqhqM7R+Of8uAHJ2VeiHSVH/MV4ErOnPH5QBQCD7yLLkun8W1v7SbT550x16z a7appVEePNQfl0PkLPR29HDTN51URW0CSfNJ1x3Ll+EYfgOSM0bIvefxKuQmrF5qAA5Pm8QM0 ZnTXsw3Gkg5ktQ/uHYZOvtHLV1GjiNh+c5ecGMcA0M0JzOA6QtdiKls6kgp3vWpQge8krnDyk s2I+4t4xEKmN1hx2SYdNVW9SLej51QhkqijGOylGMOQoDfY1Aft63xl13xzORrL2Mek9HGaNZ Lb1+PccczrQnquqzz7XjWcSdWkWBzMorXvvk+s4hMFgOtTIr09juw6kcVA61onBR5We4gOkWL 9OKh0DFrFT+6ss4orO6P/oeCaCNWe8MCbiBLNXh+n2DPYVdATLJAh0yw4+lXFx6433y8+wAm+ z9uKvoUf8Y68TWiMgfH5KuBIPGn+LMW/mTXRMEC06HuMLJ6+mGxt2oXnc1u/62o7+MfkELMqS Unj+CoS/bzWF3WrwMtA3aIlojCPgDC8pfI8lSZfMIPMS8C1DyUGdDre1+DlLWfbU8uViQR00p GIi1Z9ecBqzBtidorehl2n/bEIDxHpZHHLpvXq6AFMDnyjuDRbUg0Si2MEGRDi630wu2KCkSK D2YCDsxsUHf5AdOG47b2vqFIHP89cNNVjvoVQLT9LPOlSTUlojEuNlDBqFRxX7E9lg7jSDJw7 EHn61pwoDpwW7mXq/YqUyxrj6AI82h1d3ULvzm6I+5mZEuzPzrFWw5DQj7FlH9m8LIfZK0naK iJ93wpq0UFTyCyMfDiBFfivHj+euPSG79sUsQe0phE6+u3corOPzZPXw+yusof2xXCCbilXnk dBcLV5N3BNME8gR/kVTatQb/awr7gs5Y1rpSpHq4ctyhFHft31MC9X4lDVNTmU 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.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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@gcc.gnu.org Sender: "Gcc-patches" The generation of the new runtime check picked up the wrong attributes in the case of CLASS array arguments. There is related new code in gfc_conv_procedure_call which served as reference for the fix. Regtested on x86_64-pc-linux-gnu. OK for mainline / 11-branch? Thanks, Harald Fortran: Fix erroneous "pointer argument is not associated" runtime error For CLASS arrays we need to use the CLASS data attributes to determine which runtime check to generate. gcc/fortran/ChangeLog: PR fortran/100602 * trans-intrinsic.c (gfc_conv_intrinsic_size): Use CLASS data attributes for CLASS arrays for generation of runtime error. gcc/testsuite/ChangeLog: PR fortran/100602 * gfortran.dg/pointer_check_14.f90: New test. diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index 4d7451479d3..7ad297905b5 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -7999,7 +7999,14 @@ gfc_conv_intrinsic_size (gfc_se * se, gfc_expr * expr) tree temp; tree cond; - attr = sym ? sym->attr : gfc_expr_attr (e); + if (e->symtree->n.sym && IS_CLASS_ARRAY (e->symtree->n.sym)) + { + attr = CLASS_DATA (e->symtree->n.sym)->attr; + attr.pointer = attr.class_pointer; + } + else + attr = gfc_expr_attr (e); + if (attr.allocatable) msg = xasprintf ("Allocatable argument '%s' is not allocated", e->symtree->n.sym->name); diff --git a/gcc/testsuite/gfortran.dg/pointer_check_14.f90 b/gcc/testsuite/gfortran.dg/pointer_check_14.f90 new file mode 100644 index 00000000000..8ef6b3611fa --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pointer_check_14.f90 @@ -0,0 +1,28 @@ +! { dg-do run } +! { dg-options "-fcheck=pointer -fdump-tree-original" } +! PR100602 - Erroneous "pointer argument is not associated" runtime error + +module m + type :: T + end type +contains + subroutine f(this) + class(T), intent(in) :: this(:) + class(T), allocatable :: ca(:) + class(T), pointer :: cp(:) + if (size (this) == 0) return + write(*,*) size (this) + stop 1 + write(*,*) size (ca) ! Check #1 + write(*,*) size (cp) ! Check #2 + end subroutine f +end module + +program main + use m + call f([T::]) +end program + +! { dg-final { scan-tree-dump-times "_gfortran_runtime_error_at" 2 "original" } } +! { dg-final { scan-tree-dump-times "Allocatable argument .*ca" 1 "original" } } +! { dg-final { scan-tree-dump-times "Pointer argument .*cp" 1 "original" } }