From patchwork Tue Nov 9 20:21:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 47335 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 3EED2385841C for ; Tue, 9 Nov 2021 20:21:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3EED2385841C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1636489310; bh=npaPXl4zgtCxymXPdT72QjUGBxPpcvHTrhXyv2rD8oY=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=bilQzPU5DboS/qXegYhh3f7nSxaz4+tmd+oCFdBx/vOZGVBJS49pV3pxVVcOgCO5R qsTRj4gVqetmtcBl1VEneMo0kiT3j/GWQQ4Ui2PLgsulUjAnrrlpy2+S9y71AWLam6 akCAHtwfJwlzVtHh71EcDRtftJLfwpziQ/xvEYJU= 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 0E12C3858404; Tue, 9 Nov 2021 20:21:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0E12C3858404 X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [79.251.10.200] ([79.251.10.200]) by web-mail.gmx.net (3c-app-gmx-bap54.server.lan [172.19.172.124]) (via HTTP); Tue, 9 Nov 2021 21:21:17 +0100 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH] PR fortran/103217 & 103218 - ICEs during simplification after r12-4967-gbcf3728abe848888 Date: Tue, 9 Nov 2021 21:21:17 +0100 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:ToA84TNcEPorwgHqqwkby5AT02cnfmKR4gSTHMOoPLKw551e9FvTwXb4B0F3hYyx/D2LF SpruY5/fXvuyRMrja8rY+7SIIxgHM5X9GSLkxGEJQtcKKIj3GaJ9RYaBo+TmvBAPuN1NtLLLRLrd cVRV2p0+Yobp8EMM+27VWteiXwtcsPbrpFGqfGROlk2gdZSYWqZDSj3G57T5WJgdBddIpFxEkECa uNy62D6l6IpJ2SW2/laz5yYLRvQ8Vh+6Ql9C+KWNTsRUgIvhDdH/9HdUmnzqVN8vzA6yYZbYQgrS 08= X-UI-Out-Filterresults: notjunk:1;V03:K0:DW/KDWBLzAI=:J0WJKJEWt2pw4xxRB75Aml WoIaWYSa/5GbjCeIswL69mOciB49RyEM6Mwrn4RVroT23yipbuY2NfKa8vuIUoyEB42XT8H37 oDV0rGH7XeLEH85RJmxLB5KJU6hMmH1eh2oNf2d/MbzTnmGZbgfRuD3DjyEjheazNfEfmYt5z MQkkiFcuNcC2lggN+Xrb9/UXFPWMAstj7D+LdMDTRDwfhmvJBwfnk2JCBEi5QKmDru92X+TZ/ Kf+ipRwTV90Is4VNmh/oQSswkfUoDJkxR7MxNW62EktXm0V6O8vi3g4cmj+GOhE4C1fcLxukK fP+iVG8AKXakOaLazyLNhL4OhlRp9yv5TKav2jd0dCY2vXcQ+QkTe9I784u6ZaxsHpmPDj8hc RA2B8JeP7FxgZ4xlIKS+hiE7eQL87umTToLfYQdw/Uu7wNCAN8M2KqRYlH2gt6LbV1vbRxyFL P42RcfkpC6BZRfc1UvVZ2AoOx8LOpO7igXn3jZ6NOQgtGSkdfXwkaHZqDDObVfZ84wS9BUBMM P9cyFTuAJi9Fa90pOx5V7YbGMRj9Yy/pPNL2/cvHM4nQIAH3OgmyMAFLW1CLRWQlDwA8e4PCp jglJ2DZAp3zYFRBQhFpLHo+jmMO43n0/GUa3+pSlz/7kHhyg7prmAIVVX6/bChxFFv+jUwEvU EkZSCj6Qax48kxhw8ujkl2Rtv1bgtGGcLoWgcOkKzFGfCgrKIKYGccnoFPujUt2SEV/A57iP/ E2L18MyhX4Dxc2NEPRPQwUlZoyt9U8LvknZEgG52iKbbOyzAddkPEug+24o= 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_MSPIKE_H3, RCVD_IN_MSPIKE_WL, 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 all, I'd like to commit the attached patch as obvious within the next 24 hours unless anybody objects, or earlier if there is positive feedback. The patch only fixes three obvious NULL pointer dereferences that were latent before the referenced commit and exhibited in the testcases, see PRs. The submitted testcases in the PRs hint at unimplemented parts of the F2018 standard in gfortran. I consider it unlikely that these parts are written before 12-release, so fixing the ICE is something that can be done now. After that, either the regression marker can be removed from the PRs, or they are closed and the remaining issues moved to a new PR. Regtested on x86_64-pc-linux-gnu. Comments welcome. Thanks, Harald From a40cbf2b28db7824740ff1cff3eaffcd768fe456 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Tue, 9 Nov 2021 21:02:44 +0100 Subject: [PATCH] Fortran: avoid NULL pointer dereferences gcc/fortran/ChangeLog: PR fortran/103137 PR fortran/103138 * check.c (gfc_check_shape): Avoid NULL pointer dereference on missing ref. * simplify.c (gfc_simplify_cshift): Avoid NULL pointer dereference when shape not set. (gfc_simplify_transpose): Likewise. --- gcc/fortran/check.c | 3 +++ gcc/fortran/simplify.c | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 15772009af4..ffa07b510cd 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -5096,6 +5096,9 @@ gfc_check_shape (gfc_expr *source, gfc_expr *kind) if (source->rank == 0 || source->expr_type != EXPR_VARIABLE) return true; + if (source->ref == NULL) + return false; + ar = gfc_find_array_ref (source); if (ar->as && ar->as->type == AS_ASSUMED_SIZE && ar->type == AR_FULL) diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index d675f2c3aef..6a6b3fbd037 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -2109,6 +2109,9 @@ gfc_simplify_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim) else which = 0; + if (array->shape == NULL) + return NULL; + gfc_array_size (array, &size); arraysize = mpz_get_ui (size); mpz_clear (size); @@ -8174,6 +8177,9 @@ gfc_simplify_transpose (gfc_expr *matrix) gcc_assert (matrix->rank == 2); + if (matrix->shape == NULL) + return NULL; + result = gfc_get_array_expr (matrix->ts.type, matrix->ts.kind, &matrix->where); result->rank = 2; -- 2.26.2