* tree.h (tree_find_value): New declaration.
* tree.c (tree_find_value): New function.
* varasm.c (assemble_external): Avoid duplicate entries on lists.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145303
138bc75d-0d04-0410-961f-
82ee72b054a4
+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
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). */
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);
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
}