From patchwork Wed Jul 21 20:36:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 1508450 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=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@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=gjS5+zui; dkim-atps=neutral Received: from sourceware.org (ip-8-43-85-97.sourceware.org [8.43.85.97]) (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 4GVS6x2T0rz9sWw for ; Thu, 22 Jul 2021 06:36:56 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 803A23890415 for ; Wed, 21 Jul 2021 20:36:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 803A23890415 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1626899813; bh=cNXd1S+l2IdCskyPfOVV6PVoJuTobuZb8zVNiyI1eME=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=gjS5+zuiN5W1OKuBVdQhOaHOmXRYO0cyEPoL98WJS4kosPU5n6D6nBIBjmzpqfIXm XYYn5vzboKKP3x5WmlJHB2KVIqsMA5MACY/UVpxBuG2y4p7/qSHalcvw/Vr44T6u7D G5+VwkbZSLnplp6W4NKCG05P06YkqA5+uwXgfH6Y= 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 50015389443E; Wed, 21 Jul 2021 20:36:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 50015389443E X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [79.251.11.232] ([79.251.11.232]) by web-mail.gmx.net (3c-app-gmx-bap01.server.lan [172.19.172.71]) (via HTTP); Wed, 21 Jul 2021 22:36:10 +0200 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH] PR fortrsn/101564 - ICE in resolve_allocate_deallocate, at fortran/resolve.c:8169 Date: Wed, 21 Jul 2021 22:36:10 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:J2Y/QqLS5duCa/+jfYTWpJ/5d0UyhbKm+Oy2HpAI4UQNt/QCL5WPN2UbsRk1hLh9uwENV iSXfV2oAWjYorTR/MUx0nGNgDuDv7qMlhmPNE1qsyE9hWEAGM4MKls1W/uM+HzKoK4OWJTDsbMoF NukZKvc+9AwAX6G0RZLJZhodHG29kdKhdfwLIw9R2ANOJ4Zk/NOjYDJg2NugUiv6gbW9fAz/LVhK BJzb5ZPNC3NZX5QirZxdm06abMOdmdmyJC1f0hP0vI0wovXEWSHrJyEZBBYAKftFyVLVI2YSOFEB yg= X-UI-Out-Filterresults: notjunk:1;V03:K0:kda+DBkxHyI=:3xXSkqJgc8eE0O/Lxs7sm3 0c4BdDSYBtnayXbOVyPC1Yx5BcWXvFQ+Qgi3y4h5w1hzMhMfdLDfV+iUgDNCavFIWLGvtMDdj xtZrRunxhEmHKtMdhksxcfvQm3a85y7xunj7RGA7vhVk82zWbRseMTXMP/supIxaEzur+WnSj 3V7rr/BAfWis64rGP6LNaspYmfFalJKubOQRNHNbjtj92OEdqdth6f8yXleq4BWbti6AdIrmm QEIyOYL2ISB9jEUafFHDYfUpwwXXAKu1zsn1VyqYrvVBXSIjvkDVs2r4YwtYDbWbkQNrkiSSS c+zjxVw9PKl1EnzguRxn8BEww1XemRfTXp70mHcM8VbAstD8YssmpIIDjgFhpZXx5ktxCZa6c 0CmxAbAPfzSX5yHG7oLmQmDD6fSR+KcegX7DJlpFDJvQNdGG/bb8vcsjypqNF/7Ii1bHdhgQS nzmYNIShpvFBia9ZeqDzi7i/6fLpeiZRLnhw5Kn+2Huh4GosISVe/grYfSXJoStSZeQaOEuRz EWbOLQovJSL5cS/9BDVGSPR1CVDGzPL7BPOyitJnFAh4AqOFF7r/caUj96VsZHWKXIFZrcbJr FWWjQ3LHURwwWyJnwnffQa5z6oPy2BNz7W6wPmDBGYH70YJZcN5sgnr9+jXNV9PP0ojXKklb2 cUcgv3wNJKoddued9ZNIPNlYFzzLglNOdtJsCN0ljOaSERSszygm9p6iSX3VZEWOyCAPNQj1m v4S/wh61A2BzjpUBjTNX5Onhy+S8OIyx/V+tQ6es5UcEGfN1Q/ttv0aW30vm9L3bDviV40umI 9kf/rXooT8lVHE5Wp/QmUZsLEKRwg== X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, KAM_NUMSUBJECT, RCVD_IN_MSPIKE_H2, 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+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" I have the impression that Gerhard is a hydra: one PR down, he submits two new ones... :-( Anyway, here's a straightforward fix for a NULL pointer dereference for an invalid argument to STAT. For an alternative patch by Steve see PR. Regtested on x86_64-pc-linux-gnu. OK for mainline / 11-branch when it reopens? Thanks, Harald Fortran: ICE in resolve_allocate_deallocate for invalid STAT argument gcc/fortran/ChangeLog: PR fortran/101564 * resolve.c (resolve_allocate_deallocate): Avoid NULL pointer dereference and shortcut for bad STAT argument to (DE)ALLOCATE. gcc/testsuite/ChangeLog: PR fortran/101564 * gfortran.dg/pr101564.f90: New test. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 45c3ad387ac..51d312116eb 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -8165,6 +8165,9 @@ resolve_allocate_deallocate (gfc_code *code, const char *fcn) gfc_error ("Stat-variable at %L must be a scalar INTEGER " "variable", &stat->where); + if (stat->expr_type == EXPR_CONSTANT || stat->symtree == NULL) + goto done_stat; + for (p = code->ext.alloc.list; p; p = p->next) if (p->expr->symtree->n.sym->name == stat->symtree->n.sym->name) { @@ -8192,6 +8195,8 @@ resolve_allocate_deallocate (gfc_code *code, const char *fcn) } } +done_stat: + /* Check the errmsg variable. */ if (errmsg) { diff --git a/gcc/testsuite/gfortran.dg/pr101564.f90 b/gcc/testsuite/gfortran.dg/pr101564.f90 new file mode 100644 index 00000000000..1e7c9911ce6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr101564.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +! PR fortran/101564 - ICE in resolve_allocate_deallocate + +program p + integer, allocatable :: x(:) + integer :: stat + allocate (x(2), stat=stat) + deallocate (x, stat=stat%kind) ! { dg-error "(STAT variable)" } +end