From patchwork Tue Mar 29 21:41:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 52459 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 8B19D3857C43 for ; Tue, 29 Mar 2022 21:42:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8B19D3857C43 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1648590128; bh=k0NXIV4px4Tn9PEpVnnWn60usLuh/rtHPMigHdUkPkc=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=B+twAXtIPaCirr4P/NC0jF3gju5jzTJx5DsqQnuV3SVKPsBAJp2H/n2fQUbJ9JA8g W1HwbOvoOtj9avSVGytN/X+/Xh9ceQx/Pg1kkIItYfIimygs4v/6qAvIaimi16km2V OIH89ukDwYOSrOkgguG1pjP2TYFzZp3+NO9qenis= 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.21]) by sourceware.org (Postfix) with ESMTPS id 240F23858C50; Tue, 29 Mar 2022 21:41:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 240F23858C50 X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [79.251.15.188] ([79.251.15.188]) by web-mail.gmx.net (3c-app-gmx-bs66.server.lan [172.19.170.210]) (via HTTP); Tue, 29 Mar 2022 23:41:19 +0200 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH] PR fortran/104210 - [11/12 Regression] ICE in gfc_zero_size_array, at fortran/arith.cc:1685 Date: Tue, 29 Mar 2022 23:41:19 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:HBEFZnLVkbHyalnAO9HUgF0rptwGPbTiISBx3DEXzufU+TTSW1qUwYBYjJ0MevhVV0ZQl xuScAE+7GQUrI53Gr5Xjc7ZWjn9l52eTaSw1TvO58QlvCzn4h3SgQzvyWLCQ/BIGNpJe730Q2GKd oLUGIIyM+Px8njxCaSs6zdWT60dSM3GtlfEvhLYy+MioXuexBHu90tfE6SAkVn6Dzw/oPW3avC/b P9+6C9PA3KQ5OUrPiUveDsbVCZw6hX7CUqvXYs5jGPihe9jqOxLczcWPt3sunvJ8BYIF8qXNAek/ FQ= X-UI-Out-Filterresults: notjunk:1;V03:K0:wdHdaNVmM1I=:WJb3Fr7hKQfszrjTSq5+ON q5PQPA6E4DTa3HS7+xPofLU49LdH9xrJWqys5NcBjtmjOouo+qu7Li3zUVj20OMWBdNIDtK06 eYoqa3NS/DsxAWLgkJTX+f7whxDU+lArpm1ye8mlK5Ompt/UgXrxIpRh7RRuIobevhyiq9L8v lmANU6R1D2U2uFKrwOqFoDV8cs77ZNllZ3uq3JEikXBtXNryJOyScX9T4KfNAhC7hp/dKuUXG pYiwXoz1ffic9oBYxDtrmN11YCotZl+azUOVg1mjNlu/6M1CooLpJX+fo4KrCs9H5ZhcGCjG4 jYWLFjSqkc7vVfqCcS4LuI6FXrBi60iuY4fEc6sDVKNfVmqJ/vklq2cvFL4WUerB+KTeTSbl6 F/tzcyyJy+AMUPYWXZf/SyIFxy5f1QQBbIYYaj5cMDsZHwpY7VTGRha3ib4bUCeSEozm0faFp 01svTsXVCByJiEWeQrWDB6Hwo2oCxug//yfNhygS2g0qcTAWQlPEADs/dyAiCZyna4Rjg1hd6 ZtmkMRlqCtEW9bPARDCdlf8pI7tJXO88ZgkusyxQCMXmvN5xBULOjFbvDBRXhyQkFmNX5ws/A /Ba7x5e2g8sudtRNrQ/5xKoTtZkYN9KIuOr8P6ij8bxsQ/vyPC4ezpgkaFT2rfi2NoaAgYZ6D eov7aYEh6L5P6z8kInjgaVUY3dCndQpv9BDBP6CaPicm5c8rsLNQULmdG9OOyzsutqL//W1Fx fXAlB6+uu7PajMxNV6OodiYH8evWj2ixdetlVL+9Ev/H11yvKdTAj4gKiqrRlhXYyIfZdoNTn SaoxjQP X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, KAM_NUMSUBJECT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE, WEIRD_PORT 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 all, during error recovery on invalid declarations of functions as coarrays we may hit multiple places with NULL pointer dereferences. The attached patch provides a minimal and conservative solution. Regtested on x86_64-pc-linux-gnu. OK for mainline/11-branch? Thanks, Harald From ce80d4b2ce3f35684f09bbb2f95f6edc5827224b Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Tue, 29 Mar 2022 23:33:23 +0200 Subject: [PATCH] Fortran: improve error recovery for invalid coarray function declarations gcc/fortran/ChangeLog: PR fortran/104210 * arith.cc (eval_intrinsic): Avoid NULL pointer dereference. (gfc_zero_size_array): Likewise. gcc/testsuite/ChangeLog: PR fortran/104210 * gfortran.dg/pr104210.f90: New test. --- gcc/fortran/arith.cc | 9 ++++++--- gcc/testsuite/gfortran.dg/pr104210.f90 | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr104210.f90 diff --git a/gcc/fortran/arith.cc b/gcc/fortran/arith.cc index 06e032e22db..d57059a375f 100644 --- a/gcc/fortran/arith.cc +++ b/gcc/fortran/arith.cc @@ -1489,6 +1489,9 @@ eval_intrinsic (gfc_intrinsic_op op, int unary; arith rc; + if (!op1) + return NULL; + gfc_clear_ts (&temp.ts); switch (op) @@ -1703,11 +1706,11 @@ eval_type_intrinsic0 (gfc_intrinsic_op iop, gfc_expr *op) /* Return nonzero if the expression is a zero size array. */ -static int +static bool gfc_zero_size_array (gfc_expr *e) { - if (e->expr_type != EXPR_ARRAY) - return 0; + if (e == NULL || e->expr_type != EXPR_ARRAY) + return false; return e->value.constructor == NULL; } diff --git a/gcc/testsuite/gfortran.dg/pr104210.f90 b/gcc/testsuite/gfortran.dg/pr104210.f90 new file mode 100644 index 00000000000..182404c265b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr104210.f90 @@ -0,0 +1,15 @@ +! { dg-do compile } +! { dg-options "-fcoarray=single" } +! PR fortran/104210 +! Contributed by G.Steinmetz + +function f() ! { dg-error "shall not be a coarray" } + integer :: f[*] +end +program p + interface + function f() ! { dg-error "shall not be a coarray" } + integer :: f[*] + end + end interface +end -- 2.34.1