diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7c4df92df85e..f873898368a6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-09-02 Jakub Jelinek + + 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. + 2008-09-01 Paul Brook * doc/invoke.texi: Document -mword-relocations. diff --git a/gcc/cgraph.c b/gcc/cgraph.c index fdc156dfe33a..54d5fad23ee8 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -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; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 83d310fba7bb..2b4495cdc4e2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-09-02 Jakub Jelinek + + PR tree-optimization/37095 + * g++.dg/inherit/thunk9.C: New test. + 2008-09-01 Jerry DeLisle PR fortran/37228 diff --git a/gcc/testsuite/g++.dg/inherit/thunk9.C b/gcc/testsuite/g++.dg/inherit/thunk9.C new file mode 100644 index 000000000000..9eb9999f340c --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/thunk9.C @@ -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;