This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fix C++ thunk aliases (PR tree-optimization/37095)


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
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]