public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] gdb: remove unnecessary NULL checks before xfree
@ 2020-05-21 15:10 Simon Marchi
  2020-05-21 15:23 ` Tom Tromey
  2020-05-21 16:59 ` Pedro Alves
  0 siblings, 2 replies; 5+ messages in thread
From: Simon Marchi @ 2020-05-21 15:10 UTC (permalink / raw)
  To: gdb-patches; +Cc: Simon Marchi

I was inspired by a series of patches merged by Alan Modra in the other
projects, so I did the same in GDB with a bit of Coccinelle and grep.

This patch removes the unnecessary NULL checks before calls to xfree.
They are unnecessary because xfree already does a NULL check.  Since
free is supposed to handle NULL values correctly, the NULL check in
xfree itself is also questionable, but I've left it there for now.

gdb/ChangeLog:

	* coffread.c (patch_type): Remove NULL check before xfree.
	* corefile.c (set_gnutarget): Likewise.
	* cp-abi.c (set_cp_abi_as_auto_default): Likewise.
	* exec.c (build_section_table): Likewise.
	* remote.c (remote_target::pass_signals): Likewise.
	* utils.c (n_spaces): Likewise.
	* cli/cli-script.c (document_command): Likewise.
	* i386-windows-tdep.c (core_process_module_section): Likewise.
	* linux-fork.c (struct fork_info) <~fork_info>: Likewise.
---
 gdb/cli/cli-script.c    | 3 +--
 gdb/coffread.c          | 3 +--
 gdb/corefile.c          | 3 +--
 gdb/cp-abi.c            | 6 ++----
 gdb/exec.c              | 3 +--
 gdb/i386-windows-tdep.c | 3 +--
 gdb/linux-fork.c        | 4 ++--
 gdb/remote.c            | 3 +--
 gdb/symfile.c           | 3 +--
 gdb/utils.c             | 3 +--
 10 files changed, 12 insertions(+), 22 deletions(-)

diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c
index c9d23789068d..90ee67a5f3d3 100644
--- a/gdb/cli/cli-script.c
+++ b/gdb/cli/cli-script.c
@@ -1528,8 +1528,7 @@ document_command (const char *comname, int from_tty)
   counted_command_line doclines = read_command_lines (prompt.c_str (),
 						      from_tty, 0, 0);
 
-  if (c->doc)
-    xfree ((char *) c->doc);
+  xfree ((char *) c->doc);
 
   {
     struct command_line *cl1;
diff --git a/gdb/coffread.c b/gdb/coffread.c
index fc44e53cc4c4..0f7a6e3e5ad0 100644
--- a/gdb/coffread.c
+++ b/gdb/coffread.c
@@ -1467,8 +1467,7 @@ patch_type (struct type *type, struct type *real_type)
     {
       /* The previous copy of TYPE_NAME is allocated by
 	 process_coff_symbol.  */
-      if (target->name ())
-	xfree ((char*) target->name ());
+      xfree ((char *) target->name ());
       target->set_name (xstrdup (real_target->name ()));
     }
 }
diff --git a/gdb/corefile.c b/gdb/corefile.c
index 4ce1bb78f282..996e5301b27a 100644
--- a/gdb/corefile.c
+++ b/gdb/corefile.c
@@ -472,8 +472,7 @@ complete_set_gnutarget (struct cmd_list_element *cmd,
 void
 set_gnutarget (const char *newtarget)
 {
-  if (gnutarget_string != NULL)
-    xfree (gnutarget_string);
+  xfree (gnutarget_string);
   gnutarget_string = xstrdup (newtarget);
   set_gnutarget_command (NULL, 0, NULL);
 }
diff --git a/gdb/cp-abi.c b/gdb/cp-abi.c
index 6997a7bdbe9b..3e2edad45ca3 100644
--- a/gdb/cp-abi.c
+++ b/gdb/cp-abi.c
@@ -273,10 +273,8 @@ set_cp_abi_as_auto_default (const char *short_name)
 		    _("Cannot find C++ ABI \"%s\" to set it as auto default."),
 		    short_name);
 
-  if (auto_cp_abi.longname != NULL)
-    xfree ((char *) auto_cp_abi.longname);
-  if (auto_cp_abi.doc != NULL)
-    xfree ((char *) auto_cp_abi.doc);
+  xfree ((char *) auto_cp_abi.longname);
+  xfree ((char *) auto_cp_abi.doc);
 
   auto_cp_abi = *abi;
 
diff --git a/gdb/exec.c b/gdb/exec.c
index 93dd157e583e..14c77495a38f 100644
--- a/gdb/exec.c
+++ b/gdb/exec.c
@@ -648,8 +648,7 @@ build_section_table (struct bfd *some_bfd, struct target_section **start,
   unsigned count;
 
   count = bfd_count_sections (some_bfd);
-  if (*start)
-    xfree (* start);
+  xfree (*start);
   *start = XNEWVEC (struct target_section, count);
   *end = *start;
   bfd_map_over_sections (some_bfd, add_to_section_table, (char *) end);
diff --git a/gdb/i386-windows-tdep.c b/gdb/i386-windows-tdep.c
index 7233b1f28f51..f5965399abce 100644
--- a/gdb/i386-windows-tdep.c
+++ b/gdb/i386-windows-tdep.c
@@ -142,8 +142,7 @@ core_process_module_section (bfd *abfd, asection *sect, void *obj)
   data->module_count++;
 
 out:
-  if (buf)
-    xfree (buf);
+  xfree (buf);
   return;
 }
 
diff --git a/gdb/linux-fork.c b/gdb/linux-fork.c
index 2233d4429ce0..e232d9c263a2 100644
--- a/gdb/linux-fork.c
+++ b/gdb/linux-fork.c
@@ -61,8 +61,8 @@ struct fork_info
 
     if (savedregs)
       delete savedregs;
-    if (filepos)
-      xfree (filepos);
+
+    xfree (filepos);
   }
 
   ptid_t ptid = null_ptid;
diff --git a/gdb/remote.c b/gdb/remote.c
index 312a03c8fb42..c73eb6e9e136 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -2615,8 +2615,7 @@ remote_target::pass_signals (gdb::array_view<const unsigned char> pass_signals)
 	  putpkt (pass_packet);
 	  getpkt (&rs->buf, 0);
 	  packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
-	  if (rs->last_pass_packet)
-	    xfree (rs->last_pass_packet);
+	  xfree (rs->last_pass_packet);
 	  rs->last_pass_packet = pass_packet;
 	}
       else
diff --git a/gdb/symfile.c b/gdb/symfile.c
index b02a9235663b..b29f864b3735 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -3404,8 +3404,7 @@ enum ovly_index
 static void
 simple_free_overlay_table (void)
 {
-  if (cache_ovly_table)
-    xfree (cache_ovly_table);
+  xfree (cache_ovly_table);
   cache_novlys = 0;
   cache_ovly_table = NULL;
   cache_ovly_table_base = 0;
diff --git a/gdb/utils.c b/gdb/utils.c
index 989b13d0e0f3..d2290c30a78b 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -2260,8 +2260,7 @@ n_spaces (int n)
 
   if (n > max_spaces)
     {
-      if (spaces)
-	xfree (spaces);
+      xfree (spaces);
       spaces = (char *) xmalloc (n + 1);
       for (t = spaces + n; t != spaces;)
 	*--t = ' ';
-- 
2.26.2


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

* Re: [PATCH] gdb: remove unnecessary NULL checks before xfree
  2020-05-21 15:10 [PATCH] gdb: remove unnecessary NULL checks before xfree Simon Marchi
@ 2020-05-21 15:23 ` Tom Tromey
  2020-05-21 17:12   ` Simon Marchi
  2020-05-21 16:59 ` Pedro Alves
  1 sibling, 1 reply; 5+ messages in thread
From: Tom Tromey @ 2020-05-21 15:23 UTC (permalink / raw)
  To: Simon Marchi via Gdb-patches; +Cc: Simon Marchi

>>>>> "Simon" == Simon Marchi via Gdb-patches <gdb-patches@sourceware.org> writes:

Simon> This patch removes the unnecessary NULL checks before calls to xfree.
Simon> They are unnecessary because xfree already does a NULL check.  Since
Simon> free is supposed to handle NULL values correctly, the NULL check in
Simon> xfree itself is also questionable, but I've left it there for now.

Looks good.  I think it's fine to remove the one from xfree as well.

Note this same thing applies to delete.  I don't know whether we have
instances of that.

Tom

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

* Re: [PATCH] gdb: remove unnecessary NULL checks before xfree
  2020-05-21 15:10 [PATCH] gdb: remove unnecessary NULL checks before xfree Simon Marchi
  2020-05-21 15:23 ` Tom Tromey
@ 2020-05-21 16:59 ` Pedro Alves
  2020-05-21 17:11   ` Simon Marchi
  1 sibling, 1 reply; 5+ messages in thread
From: Pedro Alves @ 2020-05-21 16:59 UTC (permalink / raw)
  To: Simon Marchi, gdb-patches

On 5/21/20 4:10 PM, Simon Marchi via Gdb-patches wrote:
> I was inspired by a series of patches merged by Alan Modra in the other
> projects, so I did the same in GDB with a bit of Coccinelle and grep.
> 
> This patch removes the unnecessary NULL checks before calls to xfree.
> They are unnecessary because xfree already does a NULL check.  Since
> free is supposed to handle NULL values correctly, the NULL check in
> xfree itself is also questionable, but I've left it there for now.

xfree was invented exactly because some ancient hosts did not handle
free(NULL) gracefully:

  https://sourceware.org/legacy-ml/gdb/2000-11/msg00276.html

I'd like to believe that such hosts are long gone.

(It's a reasonable micro-optimization to check for NULL
before calling free, to avoid the function call overhead,
but I don't think this is the motivation for any of the
cases here.  Since xfree is inline, I guess we're applying
that micro-optimization everywhere, by chance.)

Thanks,
Pedro Alves


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

* Re: [PATCH] gdb: remove unnecessary NULL checks before xfree
  2020-05-21 16:59 ` Pedro Alves
@ 2020-05-21 17:11   ` Simon Marchi
  0 siblings, 0 replies; 5+ messages in thread
From: Simon Marchi @ 2020-05-21 17:11 UTC (permalink / raw)
  To: Pedro Alves, Simon Marchi, gdb-patches

On 2020-05-21 12:59 p.m., Pedro Alves via Gdb-patches wrote:
> On 5/21/20 4:10 PM, Simon Marchi via Gdb-patches wrote:
>> I was inspired by a series of patches merged by Alan Modra in the other
>> projects, so I did the same in GDB with a bit of Coccinelle and grep.
>>
>> This patch removes the unnecessary NULL checks before calls to xfree.
>> They are unnecessary because xfree already does a NULL check.  Since
>> free is supposed to handle NULL values correctly, the NULL check in
>> xfree itself is also questionable, but I've left it there for now.
> 
> xfree was invented exactly because some ancient hosts did not handle
> free(NULL) gracefully:
> 
>   https://sourceware.org/legacy-ml/gdb/2000-11/msg00276.html
> 
> I'd like to believe that such hosts are long gone.
> 
> (It's a reasonable micro-optimization to check for NULL
> before calling free, to avoid the function call overhead,
> but I don't think this is the motivation for any of the
> cases here.  Since xfree is inline, I guess we're applying
> that micro-optimization everywhere, by chance.)

I'm fine leaving it in xfree for that reason, it doesn't really hurt.

Simon

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

* Re: [PATCH] gdb: remove unnecessary NULL checks before xfree
  2020-05-21 15:23 ` Tom Tromey
@ 2020-05-21 17:12   ` Simon Marchi
  0 siblings, 0 replies; 5+ messages in thread
From: Simon Marchi @ 2020-05-21 17:12 UTC (permalink / raw)
  To: Tom Tromey, Simon Marchi via Gdb-patches; +Cc: Simon Marchi

On 2020-05-21 11:23 a.m., Tom Tromey wrote:
>>>>>> "Simon" == Simon Marchi via Gdb-patches <gdb-patches@sourceware.org> writes:
> 
> Simon> This patch removes the unnecessary NULL checks before calls to xfree.
> Simon> They are unnecessary because xfree already does a NULL check.  Since
> Simon> free is supposed to handle NULL values correctly, the NULL check in
> Simon> xfree itself is also questionable, but I've left it there for now.
> 
> Looks good.  I think it's fine to remove the one from xfree as well.
> 
> Note this same thing applies to delete.  I don't know whether we have
> instances of that.

I've spotted some, but I won't change them as part of this patch, as I was focussing
on xfree.

Thanks to you and Pedro for reviewing, I'll push the patch.

Simon

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

end of thread, other threads:[~2020-05-21 17:12 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-21 15:10 [PATCH] gdb: remove unnecessary NULL checks before xfree Simon Marchi
2020-05-21 15:23 ` Tom Tromey
2020-05-21 17:12   ` Simon Marchi
2020-05-21 16:59 ` Pedro Alves
2020-05-21 17:11   ` Simon Marchi

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).