mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-11 17:54:48 +08:00
re PR tree-optimization/37095 (Trouble with covariant return)
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. From-SVN: r139887
This commit is contained in:
parent
900e887f6d
commit
1aeaf0f764
@ -1,3 +1,10 @@
|
||||
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.
|
||||
|
||||
2008-09-01 Paul Brook <paul@codesourcery.com>
|
||||
|
||||
* doc/invoke.texi: Document -mword-relocations.
|
||||
|
14
gcc/cgraph.c
14
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;
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2008-09-02 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/37095
|
||||
* g++.dg/inherit/thunk9.C: New test.
|
||||
|
||||
2008-09-01 Jerry DeLisle <jvdelisle@gcc.gnu.org>
|
||||
|
||||
PR fortran/37228
|
||||
|
14
gcc/testsuite/g++.dg/inherit/thunk9.C
Normal file
14
gcc/testsuite/g++.dg/inherit/thunk9.C
Normal file
@ -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;
|
Loading…
Reference in New Issue
Block a user