From patchwork Tue Jul 20 19:49:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 1507726 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+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=RXzx3aQe; 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 4GTq7H6xZKz9sRR for ; Wed, 21 Jul 2021 05:50:03 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 65E0B398AC0C for ; Tue, 20 Jul 2021 19:50:01 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 65E0B398AC0C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1626810601; bh=lDzsxTpb59nrbiBSKeucJ/OmsWoiKsz8qSJwNYK98c8=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=RXzx3aQerZtjw1v6c/Cxh9LmV2fWzpodKvj8env16DgUjkDkNLdkK19m8t9+bkcyO CyNtWyZEKyD084zXbqMiwGDnIuv9ruedlbozOedTSHgHBOCk21njJzxKJbzF5CjFez Mp4LPb8V7M8Z5Bu2sVBz/FHVN3sS5QR9Wnf1KX1A= 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.22]) by sourceware.org (Postfix) with ESMTPS id 412963858424; Tue, 20 Jul 2021 19:49:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 412963858424 X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [79.251.12.166] ([79.251.12.166]) by web-mail.gmx.net (3c-app-gmx-bap54.server.lan [172.19.172.124]) (via HTTP); Tue, 20 Jul 2021 21:49:14 +0200 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH] PR fortran/101514 - ICE: out of memory allocating 18446744073709551600 bytes Date: Tue, 20 Jul 2021 21:49:14 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:5vuPyKBk0DPENlC0hFVvxXG6GceWL9+u2Q4E0/+Xf2dG9Vza1JkSwm/zwKu4LxxHWxyqV DWlsEz358DYcbAHV2k1g3k3MOU5QMHWN7DG2uyVvh2BuaVwLwQRhC04+R3ZUDW3CM+Db8Q20OPdW 8/JzO0gkwipLuLFNFqbLjcntRXsfxjIygFSLx+1SRPSZgFZlC5q5QS6G8d+8iRoblD2WXWzvtTj/ nWsM8UyDlWZ/8ibG6fuTVesUj2dQkV9x8q5rAURrhlCB+c+lwgHlQSwZQtYkJnrtXfrudRbU2d/8 hQ= X-UI-Out-Filterresults: notjunk:1;V03:K0:y00maERDyHo=:BYsi1pSNLb3rGTKf2PKDhS 7ccqD33I5SiqIsqDE2OtYlPkCG7Y1RJU/jqzRy724qQ8cGTkaAZQjfd5n/YPbaS5k1dCrzHLz vzxEWqKmed8PLLnPPRivL7/ikPDELTN1Yo50stfSEtJjONJkgcqIz/7XtjzxDZWVzY8abWH5Y EKt9s1KJV93LRZBebIjGGG78xxcsU8z1+H50veonI9fDsVGJYKNa8YOGOFjvhAycf/Mz5nmpB ykX8ptkVy/NUIkG7v0O+my+4JIu1cRTxMFE9EL0WLUj0dPDPXjeh3UYXlHHs+lHs+DK0HD3it /tVpICbM9C5TCVzm3sp9PZpfxJwG+WpG4jpq1BeOdcBrxkkixiejmnd0JMgITeBIXAtzMWRez B3Xm4a75hgxH88x+mknF+67dg5vtEnr81T3ul8m3UA1tK0+BENRChou2U6S01UvkHkrFzeDeE 82AbfWuQuQbPqG0fmNAY/pBzh/fP7A8CHF1l5NEBba2DwPhh2DWTIf8q+uvj4j9/cnkyqaGrn zD37RxS0txj1FEjevglQOXDsL3sMjC0gibMgo6xQmYF35mWZJrBHu6A0qgwwu90h2A5A6W7uT 6HwPo4EjasApp00Tc2K+DZpjUmUVYtYZ+VO24M7D12AXXbP8pZLuQQMDz58l2yQyfSvpBqNlW bGTbMginUAKTnTxYQUBxj/wfkfM7MbeUkUF5WCL+eGPAYgZeR+mAmFnFuy53UtiJmZgkDF2O3 Mqp3Gz9evFJkGxvUvwC0wCmEK92SMsIZvNaSpxZaR4fdwsMG3JWS23fOqEyfXbo662IbmVoLf sZUYx664ylX0oKbWPtaFOK7r4GACw== X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_MSPIKE_H4, 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+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" While investigating one of Gerhard's latest bug reports, which was almost obvious to fix after a hint by Richard Biener, I found further variants of valid and invalid code that lead to either NULL pointer dereferences or similar OOM situations. Regtested on x86_64-pc-linux-gnu. OK for mainline / 11-branch? Thanks, Harald Fortran: ICE, OOM while calculating sizes of derived type array components gcc/fortran/ChangeLog: PR fortran/101514 * target-memory.c (gfc_interpret_derived): Size of array component of derived type can only be computed here for explicit size. * trans-types.c (gfc_get_nodesc_array_type): Do not dereference NULL pointers. gcc/testsuite/ChangeLog: PR fortran/101514 * gfortran.dg/pr101514.f90: New test. diff --git a/gcc/fortran/target-memory.c b/gcc/fortran/target-memory.c index cfa8402dd3f..7b21a9e04e8 100644 --- a/gcc/fortran/target-memory.c +++ b/gcc/fortran/target-memory.c @@ -534,6 +534,9 @@ gfc_interpret_derived (unsigned char *buffer, size_t buffer_size, gfc_expr *resu { int n; + if (cmp->as->type != AS_EXPLICIT) + return 0; + e->expr_type = EXPR_ARRAY; e->rank = cmp->as->rank; diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c index d715838a046..50fda4328f7 100644 --- a/gcc/fortran/trans-types.c +++ b/gcc/fortran/trans-types.c @@ -1644,7 +1644,7 @@ gfc_get_nodesc_array_type (tree etype, gfc_array_spec * as, gfc_packed packed, GFC_TYPE_ARRAY_STRIDE (type, n) = tmp; expr = as->lower[n]; - if (expr->expr_type == EXPR_CONSTANT) + if (expr && expr->expr_type == EXPR_CONSTANT) { tmp = gfc_conv_mpz_to_tree (expr->value.integer, gfc_index_integer_kind); @@ -1694,7 +1694,7 @@ gfc_get_nodesc_array_type (tree etype, gfc_array_spec * as, gfc_packed packed, for (n = as->rank; n < as->rank + as->corank; n++) { expr = as->lower[n]; - if (expr->expr_type == EXPR_CONSTANT) + if (expr && expr->expr_type == EXPR_CONSTANT) tmp = gfc_conv_mpz_to_tree (expr->value.integer, gfc_index_integer_kind); else diff --git a/gcc/testsuite/gfortran.dg/pr101514.f90 b/gcc/testsuite/gfortran.dg/pr101514.f90 new file mode 100644 index 00000000000..51fbf8a7e85 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr101514.f90 @@ -0,0 +1,35 @@ +! { dg-do compile } +! PR fortran/101514 - ICE: out of memory allocating ... bytes + +subroutine s + type t1 + integer :: a(..) ! { dg-error "must have an explicit shape" } + end type + type t2 + integer :: a(*) ! { dg-error "must have an explicit shape" } + end type + type t3 + integer :: a(:) ! { dg-error "must have an explicit shape" } + end type + type t4 + integer :: a(0:) ! { dg-error "must have an explicit shape" } + end type + type t5 + integer, allocatable :: a(:) + end type + type t6 + integer, pointer :: a(:) + end type + type(t1) :: a1 + type(t2) :: a2 + type(t3) :: a3 + type(t4) :: a4 + type(t5) :: a5 + type(t6) :: a6 + a1 = transfer(1, a1) + a2 = transfer(1, a2) + a3 = transfer(1, a3) + a4 = transfer(1, a4) + a5 = transfer(1, a5) + a6 = transfer(1, a6) +end