diff mbox

Fix PR ipa/65432

Message ID 55097C8A.80002@suse.cz
State New
Headers show

Commit Message

Martin Liška March 18, 2015, 1:24 p.m. UTC
Hello.

Following patch wraps symtab_node::{asm_}name with xstrdup_for_dump.

Ready for trunk?
Thanks,
Martin

Comments

Richard Biener March 18, 2015, 1:33 p.m. UTC | #1
On Wed, Mar 18, 2015 at 2:24 PM, Martin Liška <mliska@suse.cz> wrote:
> Hello.
>
> Following patch wraps symtab_node::{asm_}name with xstrdup_for_dump.
>
> Ready for trunk?

   /* Gets symbol name of the item.  */
   const char *name (void)
   {
-    return node->name ();
+    return xstrdup_for_dump (node->name ());

shouldn't the methods be called dump_name () then?  And why's
node->name () not already dup-ing the string?

That said, I wonder where we use ->name / ->asm_name.  And why
that's different for ICF.

The patch would be more obvious if all fixes were to dumping sites.

Richard.

> Thanks,
> Martin
Jakub Jelinek March 18, 2015, 1:35 p.m. UTC | #2
On Wed, Mar 18, 2015 at 02:24:26PM +0100, Martin Liška wrote:
> >From 06d7667b7e2be23e21b3ea6599ebb2303074b310 Mon Sep 17 00:00:00 2001
> From: mliska <mliska@suse.cz>
> Date: Wed, 18 Mar 2015 13:59:49 +0100
> Subject: [PATCH] Fix PR ipa/65432
> 
> gcc/ChangeLog:
> 
> 2015-03-18  Martin Liska  <mliska@suse.cz>
> 
> 	PR ipa/65432
> 	* ipa-icf.c (sem_item_optimizer::read_section): Wrap symtab_node::name and
> 	symtab_node::asm_name with xstrdup_for_dump.
> 	* ipa-icf.h: Likewise.
> ---
>  gcc/ipa-icf.c | 3 ++-
>  gcc/ipa-icf.h | 4 ++--
>  2 files changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
> index 25b8306..476076d 100644
> --- a/gcc/ipa-icf.c
> +++ b/gcc/ipa-icf.c
> @@ -1995,7 +1995,8 @@ sem_item_optimizer::read_section (lto_file_decl_data *file_data,
>        gcc_assert (node->definition);
>  
>        if (dump_file)
> -	fprintf (dump_file, "Symbol added:%s (tree: %p, uid:%u)\n", node->asm_name (),
> +	fprintf (dump_file, "Symbol added:%s (tree: %p, uid:%u)\n",
> +		 xstrdup_for_dump (node->asm_name ()),
>  		 (void *) node->decl, node->order);

This doesn't make much sense (unless say operator * has side effects or
similar mess I hope will never show up in GCC).  There is just one call
among the arguments, so I fail to see what could clobber it.
xstrdup_for_dump is for the case where you have two or more function calls
in the *printf arguments that can produce transient strings.

It seems cgraph_node::get_create has similar bug though (using
xstrdup_for_dump when it shouldn't).

> --- a/gcc/ipa-icf.h
> +++ b/gcc/ipa-icf.h
> @@ -174,13 +174,13 @@ public:
>    /* Gets symbol name of the item.  */
>    const char *name (void)
>    {
> -    return node->name ();
> +    return xstrdup_for_dump (node->name ());
>    }
>  
>    /* Gets assembler name of the item.  */
>    const char *asm_name (void)
>    {
> -    return node->asm_name ();
> +    return xstrdup_for_dump (node->asm_name ());
>    }
>  
>    /* Fast equality function based on knowledge known in WPA.  */

But for this reason I must say I don't like this change either,
if you use sem_item::name or asm_name just once (happens in various places),
there is no need to preserve it any way.
IMNSHO you should instead stick it in the calls that have
more than one %s format specifiers (and only those that can have more than
one transient strings).
That is probably just the call in sem_function::equals (4x),
sem_variable::equals (ditto), sem_item_optimizer::merge_classes (twice 2x)
and that's it.

	Jakub
diff mbox

Patch

From 06d7667b7e2be23e21b3ea6599ebb2303074b310 Mon Sep 17 00:00:00 2001
From: mliska <mliska@suse.cz>
Date: Wed, 18 Mar 2015 13:59:49 +0100
Subject: [PATCH] Fix PR ipa/65432

gcc/ChangeLog:

2015-03-18  Martin Liska  <mliska@suse.cz>

	PR ipa/65432
	* ipa-icf.c (sem_item_optimizer::read_section): Wrap symtab_node::name and
	symtab_node::asm_name with xstrdup_for_dump.
	* ipa-icf.h: Likewise.
---
 gcc/ipa-icf.c | 3 ++-
 gcc/ipa-icf.h | 4 ++--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index 25b8306..476076d 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -1995,7 +1995,8 @@  sem_item_optimizer::read_section (lto_file_decl_data *file_data,
       gcc_assert (node->definition);
 
       if (dump_file)
-	fprintf (dump_file, "Symbol added:%s (tree: %p, uid:%u)\n", node->asm_name (),
+	fprintf (dump_file, "Symbol added:%s (tree: %p, uid:%u)\n",
+		 xstrdup_for_dump (node->asm_name ()),
 		 (void *) node->decl, node->order);
 
       if (is_a<cgraph_node *> (node))
diff --git a/gcc/ipa-icf.h b/gcc/ipa-icf.h
index c51bb4a..6d03758 100644
--- a/gcc/ipa-icf.h
+++ b/gcc/ipa-icf.h
@@ -174,13 +174,13 @@  public:
   /* Gets symbol name of the item.  */
   const char *name (void)
   {
-    return node->name ();
+    return xstrdup_for_dump (node->name ());
   }
 
   /* Gets assembler name of the item.  */
   const char *asm_name (void)
   {
-    return node->asm_name ();
+    return xstrdup_for_dump (node->asm_name ());
   }
 
   /* Fast equality function based on knowledge known in WPA.  */
-- 
2.1.2