re PR middle-end/38237 (multiple weak directives)
PR middle-end/38237 * tree.h (tree_find_value): New declaration. * tree.c (tree_find_value): New function. * varasm.c (assemble_external): Avoid duplicate entries on lists. From-SVN: r145303
This commit is contained in:
parent
be21df036c
commit
f4d9f129fe
|
@ -1,3 +1,10 @@
|
|||
2009-03-30 Steve Ellcey <sje@cup.hp.com>
|
||||
|
||||
PR middle-end/38237
|
||||
* tree.h (tree_find_value): New declaration.
|
||||
* tree.c (tree_find_value): New function.
|
||||
* varasm.c (assemble_external): Avoid duplicate entries on lists.
|
||||
|
||||
2009-03-30 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/39563
|
||||
|
|
12
gcc/tree.c
12
gcc/tree.c
|
@ -1802,6 +1802,18 @@ tree_last (tree chain)
|
|||
return chain;
|
||||
}
|
||||
|
||||
/* Return the node in a chain of nodes whose value is x, NULL if not found. */
|
||||
|
||||
tree
|
||||
tree_find_value (tree chain, tree x)
|
||||
{
|
||||
tree list;
|
||||
for (list = chain; list; list = TREE_CHAIN (list))
|
||||
if (TREE_VALUE (list) == x)
|
||||
return list;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Reverse the order of elements in the chain T,
|
||||
and return the new head of the chain (old last element). */
|
||||
|
||||
|
|
|
@ -4384,6 +4384,10 @@ extern tree tree_cons_stat (tree, tree, tree MEM_STAT_DECL);
|
|||
|
||||
extern tree tree_last (tree);
|
||||
|
||||
/* Return the node in a chain whose TREE_VALUE is x, NULL if not found. */
|
||||
|
||||
extern tree tree_find_value (tree, tree);
|
||||
|
||||
/* Reverse the order of elements in a chain, and return the new head. */
|
||||
|
||||
extern tree nreverse (tree);
|
||||
|
|
10
gcc/varasm.c
10
gcc/varasm.c
|
@ -2315,12 +2315,14 @@ assemble_external (tree decl ATTRIBUTE_UNUSED)
|
|||
locally emitted, inlined or otherwise not-really-extern, but
|
||||
for declarations that can be weak, it happens to be
|
||||
match. */
|
||||
&& !TREE_STATIC (decl))
|
||||
weak_decls = tree_cons (NULL, decl, weak_decls);
|
||||
&& !TREE_STATIC (decl)
|
||||
&& tree_find_value (weak_decls, decl) == NULL_TREE)
|
||||
weak_decls = tree_cons (NULL, decl, weak_decls);
|
||||
|
||||
#ifdef ASM_OUTPUT_EXTERNAL
|
||||
pending_assemble_externals = tree_cons (0, decl,
|
||||
pending_assemble_externals);
|
||||
if (tree_find_value (pending_assemble_externals, decl) == NULL_TREE)
|
||||
pending_assemble_externals = tree_cons (NULL, decl,
|
||||
pending_assemble_externals);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue