# 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;