From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x62c.google.com (mail-ej1-x62c.google.com [IPv6:2a00:1450:4864:20::62c]) by sourceware.org (Postfix) with ESMTPS id 3AE713858C2C; Mon, 17 Apr 2023 19:48:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3AE713858C2C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-x62c.google.com with SMTP id vc20so12334937ejc.10; Mon, 17 Apr 2023 12:48:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681760909; x=1684352909; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=fSTsPZzxbMiyIZXZJCRm7TYqntMAbBe1Fh/jiWvoTVc=; b=GxuIDKsnSgenMo3fDZe4c4DaaTSnLb69rxUmIqe13xl8nv+tboDXtSp5yXywlgbAqG nVjjTBeT5dLaCWy2D3HouCwz8MguppDmbHwyn2w8x5M3TI9EB16rFyHRo0aHVBbSEn4e oL/MEMRZ2nloWaZejPBsdwuc/FR5tIgWCfx6ySHJD1ZcmLII8dI1rSFGsVctTYUGQuTh 0zsUYvAfuT/uoTg+okpCAFZ3f4dnDVmE2eUq5o6RApNtA8r5MmPZB9w6XSZo1tibJaO2 OTkAsBTGQD0BvmyDhup/URC8hDQJ4P9vRTmnFTBkoaIh24WkAmKfVmv0AOPVkHMQv9p2 R+/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681760909; x=1684352909; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fSTsPZzxbMiyIZXZJCRm7TYqntMAbBe1Fh/jiWvoTVc=; b=T5cRbabI7WuexAwPHNgF/tJBLcLbECJoirtooUUUIuFOCyHjPhBVKn6USl3zCyybue Eetk1jbF0twrdAFSSYPrYcTCkIBLhsONzsUrvTehyuJWZ5KRJrI2Zh7jBDiPyXsEScGW h6PO7W8JBQZbVHD+s7M2k8UZWFpuYTkL+cFmD9Qw8cCvVPQ4+8nmppB7u+jIHXnlwejy 4eavwsT6+mxFRDV80Vuc5vrs2BttxYCQyGdiccm+3Lh9iQBzxjy0NHhgPEJVU4IUqfVq DJsMtwexnW0w/JXeKqk19ZlfeSuwe/AnHcePwxlUzehai+9nOaxC4ZTz1fTjOx/yxAy2 owSw== X-Gm-Message-State: AAQBX9cJgSiPyPyiYg78Pl/LKsHypXb/2Yx1nNn+rLQ5Puk4C7IrgP5T zXJXhqyVXP/OEh/L7ymJjWg= X-Google-Smtp-Source: AKy350aWyWUWG7el3md+mbqfjU2STosFeosvTvHoyIt/9t8GXeis6csUTqxFRHQHtRSCcItpXUKAQA== X-Received: by 2002:a17:907:210e:b0:879:ab3:93cd with SMTP id qn14-20020a170907210e00b008790ab393cdmr7049997ejb.46.1681760908772; Mon, 17 Apr 2023 12:48:28 -0700 (PDT) Received: from nbbrfq (80-110-214-113.static.upcbusiness.at. [80.110.214.113]) by smtp.gmail.com with ESMTPSA id a19-20020a50e713000000b004fbdfbb5acesm6219976edn.89.2023.04.17.12.48.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Apr 2023 12:48:28 -0700 (PDT) Date: Mon, 17 Apr 2023 21:47:50 +0200 From: Bernhard Reutner-Fischer To: gcc-patches@gcc.gnu.org, fortran@gcc.gnu.org Cc: rep.dot.nop@gmail.com, Harald Anlauf , Bernhard Reutner-Fischer Subject: ping Re: [PATCH 3/3] Fortran: Fix mpz and mpfr memory leaks Message-ID: <20230417214750.539e74dc@nbbrfq> In-Reply-To: References: <20230402150515.40826-4-rep.dot.nop@gmail.com> <57162b6a-95e0-35c6-386a-3687908fce05@gmx.de> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Ping! Harald fixed the leak in set_exponent in the meantime. As stated in the cover-letter, it was bootstrapped and regtested without regression on x86_64-foo-linux. I consider it obvious, but never the less, OK for trunk (as in gcc-14) so far? thanks, On Mon, 03 Apr 2023 23:42:06 +0200 Bernhard Reutner-Fischer wrote: > On 3 April 2023 21:50:49 CEST, Harald Anlauf wrote: > >Hi Bernhard, > > > >there is neither context nor a related PR with a testcase showing > >that this patch fixes issues seen there. > > Yes, i forgot to mention the PR: > > PR fortran/68800 > > I did not construct individual test cases but it should be obvious that we should not leak these. > > > > >On 4/2/23 17:05, Bernhard Reutner-Fischer via Gcc-patches wrote: > >> From: Bernhard Reutner-Fischer > >> > >> Cc: fortran@gcc.gnu.org > >> > >> gcc/fortran/ChangeLog: > >> > >> * array.cc (gfc_ref_dimen_size): Free mpz memory before ICEing. > >> * expr.cc (find_array_section): Fix mpz memory leak. > >> * simplify.cc (gfc_simplify_reshape): Fix mpz memory leaks in > >> error paths. > >> (gfc_simplify_set_exponent): Fix mpfr memory leak. > >> --- > >> gcc/fortran/array.cc | 3 +++ > >> gcc/fortran/expr.cc | 8 ++++---- > >> gcc/fortran/simplify.cc | 7 ++++++- > >> 3 files changed, 13 insertions(+), 5 deletions(-) > >> > >> diff --git a/gcc/fortran/array.cc b/gcc/fortran/array.cc > >> index be5eb8b6a0f..8b1e816a859 100644 > >> --- a/gcc/fortran/array.cc > >> +++ b/gcc/fortran/array.cc > >> @@ -2541,6 +2541,9 @@ gfc_ref_dimen_size (gfc_array_ref *ar, int dimen, mpz_t *result, mpz_t *end) > >> return t; > >> > >> default: > >> + mpz_clear (lower); > >> + mpz_clear (stride); > >> + mpz_clear (upper); > >> gfc_internal_error ("gfc_ref_dimen_size(): Bad dimen_type"); > >> } > > > >What is the point of clearing variables before issuing a gfc_internal_error? > > To make it obvious that we are aware that we allocated these. > > thanks, > > > >> diff --git a/gcc/fortran/expr.cc b/gcc/fortran/expr.cc > >> index 7fb33f81788..b4736804eda 100644 > >> --- a/gcc/fortran/expr.cc > >> +++ b/gcc/fortran/expr.cc > >> @@ -1539,6 +1539,7 @@ find_array_section (gfc_expr *expr, gfc_ref *ref) > >> mpz_init_set_ui (delta_mpz, one); > >> mpz_init_set_ui (nelts, one); > >> mpz_init (tmp_mpz); > >> + mpz_init (ptr); > >> > >> /* Do the initialization now, so that we can cleanup without > >> keeping track of where we were. */ > >> @@ -1682,7 +1683,6 @@ find_array_section (gfc_expr *expr, gfc_ref *ref) > >> mpz_mul (delta_mpz, delta_mpz, tmp_mpz); > >> } > >> > >> - mpz_init (ptr); > >> cons = gfc_constructor_first (base); > >> > >> /* Now clock through the array reference, calculating the index in > >> @@ -1735,7 +1735,8 @@ find_array_section (gfc_expr *expr, gfc_ref *ref) > >> "at %L requires an increase of the allowed %d " > >> "upper limit. See %<-fmax-array-constructor%> " > >> "option", &expr->where, flag_max_array_constructor); > >> - return false; > >> + t = false; > >> + goto cleanup; > >> } > >> > >> cons = gfc_constructor_lookup (base, limit); > >> @@ -1750,8 +1751,6 @@ find_array_section (gfc_expr *expr, gfc_ref *ref) > >> gfc_copy_expr (cons->expr), NULL); > >> } > >> > >> - mpz_clear (ptr); > >> - > >> cleanup: > >> > >> mpz_clear (delta_mpz); > >> @@ -1765,6 +1764,7 @@ cleanup: > >> mpz_clear (ctr[d]); > >> mpz_clear (stride[d]); > >> } > >> + mpz_clear (ptr); > >> gfc_constructor_free (base); > >> return t; > >> } > >> diff --git a/gcc/fortran/simplify.cc b/gcc/fortran/simplify.cc > >> index ecf0e3558df..d1f06335e79 100644 > >> --- a/gcc/fortran/simplify.cc > >> +++ b/gcc/fortran/simplify.cc > >> @@ -6866,6 +6866,7 @@ gfc_simplify_reshape (gfc_expr *source, gfc_expr *shape_exp, > >> gfc_error ("The SHAPE array for the RESHAPE intrinsic at %L has a " > >> "negative value %d for dimension %d", > >> &shape_exp->where, shape[rank], rank+1); > >> + mpz_clear (index); > >> return &gfc_bad_expr; > >> } > >> > >> @@ -6889,6 +6890,7 @@ gfc_simplify_reshape (gfc_expr *source, gfc_expr *shape_exp, > >> { > >> gfc_error ("Shapes of ORDER at %L and SHAPE at %L are different", > >> &order_exp->where, &shape_exp->where); > >> + mpz_clear (index); > >> return &gfc_bad_expr; > >> } > >> > >> @@ -6902,6 +6904,7 @@ gfc_simplify_reshape (gfc_expr *source, gfc_expr *shape_exp, > >> { > >> gfc_error ("Sizes of ORDER at %L and SHAPE at %L are different", > >> &order_exp->where, &shape_exp->where); > >> + mpz_clear (index); > >> return &gfc_bad_expr; > >> } > >> > >> @@ -6918,6 +6921,7 @@ gfc_simplify_reshape (gfc_expr *source, gfc_expr *shape_exp, > >> "in the range [1, ..., %d] for the RESHAPE intrinsic " > >> "near %L", order[i], &order_exp->where, rank, > >> &shape_exp->where); > >> + mpz_clear (index); > >> return &gfc_bad_expr; > >> } > >> > >> @@ -6926,6 +6930,7 @@ gfc_simplify_reshape (gfc_expr *source, gfc_expr *shape_exp, > >> { > >> gfc_error ("ORDER at %L is not a permutation of the size of " > >> "SHAPE at %L", &order_exp->where, &shape_exp->where); > >> + mpz_clear (index); > >> return &gfc_bad_expr; > >> } > >> x[order[i]] = 1; > >> @@ -7408,7 +7413,7 @@ gfc_simplify_set_exponent (gfc_expr *x, gfc_expr *i) > >> exp2 = (unsigned long) mpz_get_d (i->value.integer); > >> mpfr_mul_2exp (result->value.real, frac, exp2, GFC_RND_MODE); > >> > >> - mpfr_clears (absv, log2, pow2, frac, NULL); > >> + mpfr_clears (exp, absv, log2, pow2, frac, NULL); > >> > >> return range_check (result, "SET_EXPONENT"); > >> } > > >