This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix C++ thunk aliases (PR tree-optimization/37095)
- From: "Richard Guenther" <richard dot guenther at gmail dot com>
- To: "Jakub Jelinek" <jakub at redhat dot com>
- Cc: "Jan Hubicka" <jh at suse dot cz>, gcc-patches at gcc dot gnu dot org
- Date: Tue, 2 Sep 2008 11:35:04 +0200
- Subject: Re: [PATCH] Fix C++ thunk aliases (PR tree-optimization/37095)
- References: <20080902091242.GU32376@hs20-bc2-1.build.redhat.com>
On Tue, Sep 2, 2008 at 11:12 AM, Jakub Jelinek <jakub@redhat.com> wrote:
> Hi!
>
> thunks are created only after cgraph_global_info_ready = 1, but the newly
> added assembler_name_hash hashtable assumes that no new nodes are created
> after cgraph_node_for_asm is called for the first time.
> The following patch fixes it by maintaining the hash table in cgraph_node
> once it has been created.
>
> Bootstrapped/regtested on x86_64-linux, ok for trunk?
Ok.
Thanks,
Richard.
> 2008-09-02 Jakub Jelinek <jakub@redhat.com>
>
> PR tree-optimization/37095
> * cgraph.c (cgraph_node): When creating new cgraph node after
> assembler_name_hash has been populated, record it in the hash
> table.
>
> * g++.dg/inherit/thunk9.C: New test.
>
> --- gcc/cgraph.c.jj 2008-08-29 20:31:50.000000000 +0200
> +++ gcc/cgraph.c 2008-09-01 20:57:26.000000000 +0200
> @@ -453,7 +453,21 @@ cgraph_node (tree decl)
> node->origin->nested = node;
> node->master_clone = node;
> }
> + if (assembler_name_hash)
> + {
> + void **aslot;
> + tree name = DECL_ASSEMBLER_NAME (decl);
>
> + aslot = htab_find_slot_with_hash (assembler_name_hash, name,
> + decl_assembler_name_hash (name),
> + INSERT);
> + /* We can have multiple declarations with same assembler name. For C++
> + it is __builtin_strlen and strlen, for instance. Do we need to
> + record them all? Original implementation marked just first one
> + so lets hope for the best. */
> + if (*aslot == NULL)
> + *aslot = node;
> + }
> return node;
> }
>
> --- gcc/testsuite/g++.dg/inherit/thunk9.C.jj 2008-09-01 21:00:21.000000000 +0200
> +++ gcc/testsuite/g++.dg/inherit/thunk9.C 2008-09-01 20:59:30.000000000 +0200
> @@ -0,0 +1,14 @@
> +// PR tree-optimization/37095
> +// { dg-options "-O" }
> +
> +struct A
> +{
> + virtual A *foo ();
> +};
> +
> +struct B : virtual A
> +{
> + virtual B *foo () { return 0; }
> +};
> +
> +B b;
>
> Jakub
>