From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by sourceware.org (Postfix) with ESMTPS id 5CA1B38555A2; Wed, 1 Mar 2023 21:29:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5CA1B38555A2 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-wr1-x433.google.com with SMTP id bx12so11509541wrb.11; Wed, 01 Mar 2023 13:29:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:message-id:subject:cc:to:from:date:from:to:cc:subject :date:message-id:reply-to; bh=XD2S5YeJiogkDTABJQ7Iagyu0hD0D7M8tE9PYR4hq9w=; b=gIqLPcoFmKU56PVn7wReZ57A7A0qqVnS5l3IgWwjpuEnDK33zaklfzguLJ8iu1GP/x 5/ijVVw2b82feZsHHEAAJnj+IpLDieEA0MR5c9MAqX20Jd/VaSKFpW6Mpaxk4/94TXnZ MoF5h4A3eVEsRo7c/fFsX4KmApKCXE29aqFrU5JsPkphZ9Owzbom1wnpGTXUIzFW9GCB uHJmsbOSniOq8lxmLAPLgUojD73j6Yu6ASDjHgMD5iUoxu8SzNMbMRRmsa+xmZzuJN1Q dCopvdE9paghSJ8ng1UKFWuEUeyDaQmALtSURiHTqX5c7t3mifdJ4mbNFUyEjdkYqBux AwfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:message-id:subject:cc:to:from:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=XD2S5YeJiogkDTABJQ7Iagyu0hD0D7M8tE9PYR4hq9w=; b=JrJmJ6r/0vH7EyfUERM4Ct+WjWvVJS2eSDXcLza8pxVbAo+EjYEdEMJNkwjpL1r74S j0byUUa4nt2bBWhteyKjJ1cnh++xREHQd2XKAnEQMYPTW8biCNDB7nt8QKiEzN4WU7ne x1Y6KbiInAjYHPr1z5uRoquBsZqLAIkY6Xt/rSuVWx+mUtLcOpNx8Nigk1ASnCGDhSm6 ybU4xZ8XvoB+GtpU80wboWo9ykpj+oU8920XUH+FvOSGmBA7rWMrO/6g5JVCiWIRwXND v6dlEZZSvY645yfA5Rhek0+/8AULQoduMRPkNF1ZFH/nhKyE1oIJeY8JmCS9f69BGi1e a8zA== X-Gm-Message-State: AO0yUKVVbQc33mQM+Pxupmsyut4S5EhlpAkaxZRDA3oq3rmFijQFf6CY xyT3Ht9NmCA3vkWBgpfw0lc= X-Google-Smtp-Source: AK7set+KQY1aCKrfr1Ms3oH7KDpOlRZpkiHmym3Uyb8YwGem7pKW8e2RMnbgcl+mwaBCZDQjdRrSgA== X-Received: by 2002:a5d:648b:0:b0:2c5:532a:98c4 with SMTP id o11-20020a5d648b000000b002c5532a98c4mr13057274wri.33.1677706140795; Wed, 01 Mar 2023 13:29:00 -0800 (PST) Received: from nbbrfq (80-110-214-113.static.upcbusiness.at. [80.110.214.113]) by smtp.gmail.com with ESMTPSA id s2-20020a5d6a82000000b002c53cc7504csm13958070wru.78.2023.03.01.13.29.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Mar 2023 13:29:00 -0800 (PST) Date: Wed, 1 Mar 2023 22:28:56 +0100 From: Bernhard Reutner-Fischer To: gcc-patches@gcc.gnu.org Cc: Bernhard Reutner-Fischer , ian@airs.com, charlet@adacore.com, fortran@gcc.gnu.org Subject: [PATCH][stage1] Remove conditionals around free() Message-ID: <20230301222856.12300c64@nbbrfq> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/NYqTQKQcypXSb=Xi40bQi58" X-Spam-Status: No, score=-9.8 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 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: --MP_/NYqTQKQcypXSb=Xi40bQi58 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi! Mere cosmetics. - if (foo != NULL) free (foo); With the caveat that coccinelle ruins replacement whitespace or i'm uneducated enough to be unable to _not_ run the diff through sed -e 's/^+\([[:space:]]*\)free(/+\1free (/' at least. If anybody knows how to improve replacement whitespace, i'd be interrested but didn't look nor ask. ISTM that leading whitespace is somewhat ruined, too, so beware (8 spaces versus tab as far as i have spot-checked). Would touch gcc/ada/rtinit.c | 3 +-- intl/bindtextdom.c | 3 +-- intl/loadmsgcat.c | 6 ++---- intl/localcharset.c | 3 +-- libbacktrace/xztest.c | 9 +++------ libbacktrace/zstdtest.c | 9 +++------ libbacktrace/ztest.c | 9 +++------ libgfortran/caf/single.c | 6 ++---- libgfortran/io/async.c | 6 ++---- libgfortran/io/format.c | 3 +-- libgfortran/io/transfer.c | 6 ++---- libgfortran/io/unix.c | 3 +-- libgo/runtime/go-setenv.c | 6 ++---- libgo/runtime/go-unsetenv.c | 3 +-- libgomp/target.c | 3 +-- libiberty/concat.c | 3 +-- zlib/contrib/minizip/unzip.c | 2 +- zlib/contrib/minizip/zip.c | 2 +- zlib/examples/enough.c | 6 ++---- zlib/examples/gun.c | 2 +- zlib/examples/gzjoin.c | 3 +-- zlib/examples/gzlog.c | 6 ++---- coccinelle script and invocation inline. Would need to be split for the respective maintainers and run through mklog with subject changelog and should of course be compiled and tested before that. Remarks: 1) We should do this in if-conversion (?) on our own. I suppose. Independently of -fdelete-null-pointer-checks 2) Maybe not silently, but raise language awareness nowadays. By now it's been a long time since this was first mandated. 3) fallout from looking at something completely different 4) i most likely will not remember to split it apart and send proper patches, tested patches, in stage 1 to maintainers proper, so if anyone feels like pursuing this, be my guest. I thought i'd just mention it. cheers, --MP_/NYqTQKQcypXSb=Xi40bQi58 Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=free-prune-conditional.0.patch # cat ~/coccinelle/free-without-if-null.0.cocci ; echo EOF // POSIX: free(NULL) is perfectly valid // quote: If ptr is a null pointer, no action shall occur. @ rule1 @ expression e; @@ - if (e != NULL) - { free(e); } + free (e); EOF # find ./ \( -name "*.[ch]" -o -name "*.cpp" \) -a \( ! -path "./gcc/testsuite/*" -a ! -path "./gcc/contrib/*" \) -exec spatch --sp-file ~/coccinelle/free-without-if-null.0.cocci --in-place diff --git a/gcc/ada/rtinit.c b/gcc/ada/rtinit.c index f1607b3c8b0..bbf02b1c2ae 100644 --- a/gcc/ada/rtinit.c +++ b/gcc/ada/rtinit.c @@ -481,8 +481,7 @@ __gnat_runtime_initialize (int install_handler) FindClose (hDir); - if (dir != NULL) - free (dir); + free (dir); } } else diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c index 6faac5756a3..c71c728401b 100644 --- a/intl/bindtextdom.c +++ b/intl/bindtextdom.c @@ -204,8 +204,7 @@ set_binding_values (domainname, dirnamep, codesetp) if (__builtin_expect (result != NULL, 1)) { - if (binding->codeset != NULL) - free (binding->codeset); + free (binding->codeset); binding->codeset = result; binding->codeset_cntr++; diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c index 536ee12621d..e55d095ec56 100644 --- a/intl/loadmsgcat.c +++ b/intl/loadmsgcat.c @@ -1273,8 +1273,7 @@ _nl_load_domain (domain_file, domainbinding) /* This is an invalid revision. */ invalid: /* This is an invalid .mo file. */ - if (domain->malloced) - free (domain->malloced); + free (domain->malloced); #ifdef HAVE_MMAP if (use_mmap) munmap ((caddr_t) data, size); @@ -1307,8 +1306,7 @@ _nl_unload_domain (domain) _nl_free_domain_conv (domain); - if (domain->malloced) - free (domain->malloced); + free (domain->malloced); # ifdef _POSIX_MAPPED_FILES if (domain->use_mmap) diff --git a/intl/localcharset.c b/intl/localcharset.c index 8ece6e39f69..8d34dcb0918 100644 --- a/intl/localcharset.c +++ b/intl/localcharset.c @@ -199,8 +199,7 @@ get_charset_aliases () } } - if (file_name != NULL) - free (file_name); + free (file_name); #else diff --git a/libbacktrace/xztest.c b/libbacktrace/xztest.c index ed90066470a..6f4a5c73a00 100644 --- a/libbacktrace/xztest.c +++ b/libbacktrace/xztest.c @@ -479,12 +479,9 @@ test_large (struct backtrace_state *state ATTRIBUTE_UNUSED) printf ("FAIL: lzma large\n"); ++failures; - if (orig_buf != NULL) - free (orig_buf); - if (compressed_buf != NULL) - free (compressed_buf); - if (uncompressed_buf != NULL) - free (uncompressed_buf); + free (orig_buf); + free (compressed_buf); + free (uncompressed_buf); #else /* !HAVE_LIBLZMA */ diff --git a/libbacktrace/zstdtest.c b/libbacktrace/zstdtest.c index 1b4158a50eb..8a0b27977b5 100644 --- a/libbacktrace/zstdtest.c +++ b/libbacktrace/zstdtest.c @@ -494,12 +494,9 @@ test_large (struct backtrace_state *state ATTRIBUTE_UNUSED) printf ("FAIL: zstd large\n"); ++failures; - if (orig_buf != NULL) - free (orig_buf); - if (compressed_buf != NULL) - free (compressed_buf); - if (uncompressed_buf != NULL) - free (uncompressed_buf); + free (orig_buf); + free (compressed_buf); + free (uncompressed_buf); #else /* !HAVE_ZSTD */ diff --git a/libbacktrace/ztest.c b/libbacktrace/ztest.c index 63f4f58885b..dd518f30426 100644 --- a/libbacktrace/ztest.c +++ b/libbacktrace/ztest.c @@ -512,12 +512,9 @@ test_large (struct backtrace_state *state ATTRIBUTE_UNUSED) printf ("FAIL: inflate large\n"); ++failures; - if (orig_buf != NULL) - free (orig_buf); - if (compressed_buf != NULL) - free (compressed_buf); - if (uncompressed_buf != NULL) - free (uncompressed_buf); + free (orig_buf); + free (compressed_buf); + free (uncompressed_buf); #else /* !HAVE_ZLIB */ diff --git a/libgfortran/caf/single.c b/libgfortran/caf/single.c index bb06bd36db5..fea8b0cc204 100644 --- a/libgfortran/caf/single.c +++ b/libgfortran/caf/single.c @@ -163,10 +163,8 @@ _gfortran_caf_register (size_t size, caf_register_t type, caf_token_t *token, /* Freeing the memory conditionally seems pointless, but caf_internal_error () may return, when a stat is given and then the memory may be lost. */ - if (local) - free (local); - if (*token) - free (*token); + free (local); + free (*token); caf_internal_error (alloc_fail_msg, stat, errmsg, errmsg_len); return; } diff --git a/libgfortran/io/async.c b/libgfortran/io/async.c index 81d1d8175aa..01adf8f3f78 100644 --- a/libgfortran/io/async.c +++ b/libgfortran/io/async.c @@ -71,8 +71,7 @@ update_pdt (st_parameter_dt **old, st_parameter_dt *new) { NOTE ("Changing pdts, current_unit = %p", (void *) (new->u.p.current_unit)); temp = *old; *old = new; - if (temp) - free (temp); + free (temp); } /* Destroy an adv_cond structure. */ @@ -106,8 +105,7 @@ async_io (void *arg) /* Loop over the queue entries until they are finished. */ while (ctq) { - if (prev) - free (prev); + free (prev); prev = ctq; if (!au->error.has_error) { diff --git a/libgfortran/io/format.c b/libgfortran/io/format.c index 9e06902ddb7..66acbf04d08 100644 --- a/libgfortran/io/format.c +++ b/libgfortran/io/format.c @@ -269,8 +269,7 @@ free_format_data (format_data *fmt) fnp->format != FMT_NONE; fnp++) if (fnp->format == FMT_DT) { - if (GFC_DESCRIPTOR_DATA(fnp->u.udf.vlist)) - free (GFC_DESCRIPTOR_DATA(fnp->u.udf.vlist)); + free (GFC_DESCRIPTOR_DATA(fnp->u.udf.vlist)); free (fnp->u.udf.vlist); } diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index 8bb5d1101ca..19b0b9a9324 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -4522,8 +4522,7 @@ st_read_done_worker (st_parameter_dt *dtp, bool unlock) { free (dtp->u.p.current_unit->filename); dtp->u.p.current_unit->filename = NULL; - if (dtp->u.p.current_unit->ls) - free (dtp->u.p.current_unit->ls); + free (dtp->u.p.current_unit->ls); dtp->u.p.current_unit->ls = NULL; } free_newunit = true; @@ -4619,8 +4618,7 @@ st_write_done_worker (st_parameter_dt *dtp, bool unlock) { free (dtp->u.p.current_unit->filename); dtp->u.p.current_unit->filename = NULL; - if (dtp->u.p.current_unit->ls) - free (dtp->u.p.current_unit->ls); + free (dtp->u.p.current_unit->ls); dtp->u.p.current_unit->ls = NULL; } free_newunit = true; diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index ba12be08252..ef35b85570f 100644 --- a/libgfortran/io/unix.c +++ b/libgfortran/io/unix.c @@ -1028,8 +1028,7 @@ mem_flush (unix_stream *s __attribute__ ((unused))) static int mem_close (unix_stream *s) { - if (s) - free (s); + free (s); return 0; } diff --git a/libgo/runtime/go-setenv.c b/libgo/runtime/go-setenv.c index 08987def8af..d3eaf6b4251 100644 --- a/libgo/runtime/go-setenv.c +++ b/libgo/runtime/go-setenv.c @@ -72,8 +72,6 @@ setenv_c (String k, String v) #endif /* !defined(HAVE_SETENV) */ - if (kn != NULL) - free (kn); - if (vn != NULL) - free (vn); + free (kn); + free (vn); } diff --git a/libgo/runtime/go-unsetenv.c b/libgo/runtime/go-unsetenv.c index 4b5058a220f..a7cfb364ace 100644 --- a/libgo/runtime/go-unsetenv.c +++ b/libgo/runtime/go-unsetenv.c @@ -42,6 +42,5 @@ unsetenv_c (String k) #endif /* !defined(HAVE_UNSETENV) */ - if (kn != NULL) - free (kn); + free (kn); } diff --git a/libgomp/target.c b/libgomp/target.c index 483851c95ac..e643c050bda 100644 --- a/libgomp/target.c +++ b/libgomp/target.c @@ -1860,8 +1860,7 @@ gomp_remove_splay_tree_key (splay_tree sp, splay_tree_key k) { if (k->aux->link_key) splay_tree_insert (sp, (splay_tree_node) k->aux->link_key); - if (k->aux->attach_count) - free (k->aux->attach_count); + free (k->aux->attach_count); free (k->aux); k->aux = NULL; } diff --git a/libiberty/concat.c b/libiberty/concat.c index 4cb1df3baf3..c22d280fafc 100644 --- a/libiberty/concat.c +++ b/libiberty/concat.c @@ -187,8 +187,7 @@ reconcat (char *optr, const char *first, ...) /* Now copy the individual pieces to the result string. */ va_start (args, first); vconcat_copy (newstr, first, args); - if (optr) /* Done before VA_CLOSE so optr stays in scope for K&R C. */ - free (optr); + free (optr); va_end (args); return newstr; diff --git a/zlib/contrib/minizip/unzip.c b/zlib/contrib/minizip/unzip.c index bcfb9416ec3..16490c6a9e4 100644 --- a/zlib/contrib/minizip/unzip.c +++ b/zlib/contrib/minizip/unzip.c @@ -112,7 +112,7 @@ # define ALLOC(size) (malloc(size)) #endif #ifndef TRYFREE -# define TRYFREE(p) {if (p) free(p);} +# define TRYFREE(p) {free(p);} #endif #define SIZECENTRALDIRITEM (0x2e) diff --git a/zlib/contrib/minizip/zip.c b/zlib/contrib/minizip/zip.c index 44e88a9cb98..7182014193d 100644 --- a/zlib/contrib/minizip/zip.c +++ b/zlib/contrib/minizip/zip.c @@ -62,7 +62,7 @@ # define ALLOC(size) (malloc(size)) #endif #ifndef TRYFREE -# define TRYFREE(p) {if (p) free(p);} +# define TRYFREE(p) {free(p);} #endif /* diff --git a/zlib/examples/enough.c b/zlib/examples/enough.c index b9911443052..3de58c873cd 100644 --- a/zlib/examples/enough.c +++ b/zlib/examples/enough.c @@ -189,10 +189,8 @@ local void cleanup(void) free(done[n].vec); free(done); } - if (num != NULL) - free(num); - if (code != NULL) - free(code); + free (num); + free (code); } /* Return the number of possible Huffman codes using bit patterns of lengths diff --git a/zlib/examples/gun.c b/zlib/examples/gun.c index be44fa51ff5..cc3fbb40c94 100644 --- a/zlib/examples/gun.c +++ b/zlib/examples/gun.c @@ -690,7 +690,7 @@ int main(int argc, char **argv) outname[len] = 0; } ret = gunzip(&strm, *argv, outname, test); - if (outname != NULL) free(outname); + free (outname); if (ret) break; } while (argv++, --argc); else diff --git a/zlib/examples/gzjoin.c b/zlib/examples/gzjoin.c index 89e8098441b..dbf08e4382b 100644 --- a/zlib/examples/gzjoin.c +++ b/zlib/examples/gzjoin.c @@ -89,8 +89,7 @@ local void bclose(bin *in) if (in != NULL) { if (in->fd != -1) close(in->fd); - if (in->buf != NULL) - free(in->buf); + free (in->buf); free(in); } } diff --git a/zlib/examples/gzlog.c b/zlib/examples/gzlog.c index b8c29274e8b..67f0aa98539 100644 --- a/zlib/examples/gzlog.c +++ b/zlib/examples/gzlog.c @@ -787,8 +787,7 @@ local int log_recover(struct log *log, int op) log_log(log, op, ret ? "failure" : "complete"); /* clean up */ - if (data != NULL) - free(data); + free (data); return ret; } @@ -1051,8 +1050,7 @@ int gzlog_close(gzlog *logd) log_close(log); /* free structure and return */ - if (log->path != NULL) - free(log->path); + free (log->path); strcpy(log->id, "bad"); free(log); return 0; --MP_/NYqTQKQcypXSb=Xi40bQi58--