public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH][stage1] Remove conditionals around free()
@ 2023-03-01 21:28 Bernhard Reutner-Fischer
  2023-03-01 21:58 ` Bernhard Reutner-Fischer
                   ` (5 more replies)
  0 siblings, 6 replies; 17+ messages in thread
From: Bernhard Reutner-Fischer @ 2023-03-01 21:28 UTC (permalink / raw)
  To: gcc-patches; +Cc: Bernhard Reutner-Fischer, ian, charlet, fortran

[-- Attachment #1: Type: text/plain, Size: 2146 bytes --]

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,

[-- Attachment #2: free-prune-conditional.0.patch --]
[-- Type: text/x-patch, Size: 11160 bytes --]

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2023-05-08  6:02 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-01 21:28 [PATCH][stage1] Remove conditionals around free() Bernhard Reutner-Fischer
2023-03-01 21:58 ` Bernhard Reutner-Fischer
2023-03-01 22:54   ` Bernhard Reutner-Fischer
2023-03-01 22:59 ` Andrew Pinski
2023-03-01 23:52   ` Bernhard Reutner-Fischer
2023-03-02  0:39     ` Andrew Pinski
2023-03-02  0:07 ` Steve Kargl
2023-03-02  1:23   ` Jerry D
2023-03-03 23:11     ` Bernhard Reutner-Fischer
2023-03-03 23:32       ` Iain Sandoe
2023-03-04  3:14         ` Jerry D
2023-03-24  6:30           ` NightStrike
2023-05-08  6:01   ` Bernhard Reutner-Fischer
2023-03-02  3:23 ` Ian Lance Taylor
2023-03-04 10:15 ` Janne Blomqvist
2023-03-22  7:21   ` Eric Gallager
2023-03-08 21:56 ` Thomas Schwinge

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).