aboutsummaryrefslogtreecommitdiff
path: root/gcc/cgraph.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2008-09-02 12:33:46 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2008-09-02 12:33:46 +0200
commit1aeaf0f764b0be261e12be19f8b73977440994cb (patch)
tree429456a11bd954fe29706c1e6896e3981d44fd2a /gcc/cgraph.c
parent900e887f6d2dd21c118f5de7cbcf3d56173a02a7 (diff)
downloadgcc-1aeaf0f764b0be261e12be19f8b73977440994cb.zip
gcc-1aeaf0f764b0be261e12be19f8b73977440994cb.tar.gz
gcc-1aeaf0f764b0be261e12be19f8b73977440994cb.tar.bz2
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
Diffstat (limited to 'gcc/cgraph.c')
-rw-r--r--gcc/cgraph.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index fdc156d..54d5fad 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;
}