summaryrefslogtreecommitdiff
path: root/gcc/varasm.c
diff options
context:
space:
mode:
authorespindola <espindola@138bc75d-0d04-0410-961f-82ee72b054a4>2008-08-19 14:11:18 +0000
committerespindola <espindola@138bc75d-0d04-0410-961f-82ee72b054a4>2008-08-19 14:11:18 +0000
commitd36229a0741fd8e220b83417502d2d78b82f764d (patch)
tree8597de88ec65628070ba508f4bd324cbe3d772d3 /gcc/varasm.c
parenta6142438c0dfb23e5983e7f796c3172c313dc3b3 (diff)
downloadgcc-d36229a0741fd8e220b83417502d2d78b82f764d.tar.gz
2008-08-19 Rafael Espindola <espindola@google.com>
* varasm.c (weak_decls): Move earlier in the file. (assemble_external): Add weak decls to the weak_decls list. (declare_weak): Don't add decls to the weak_decls list. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@139233 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r--gcc/varasm.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 941716f73bd..863ffd010f1 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -2286,6 +2286,10 @@ process_pending_assemble_externals (void)
#endif
}
+/* This TREE_LIST contains any weak symbol declarations waiting
+ to be emitted. */
+static GTY(()) tree weak_decls;
+
/* Output something to declare an external symbol to the assembler.
(Most assemblers don't need this, so we normally output nothing.)
Do nothing if DECL is not external. */
@@ -2303,6 +2307,9 @@ assemble_external (tree decl ATTRIBUTE_UNUSED)
if (!DECL_P (decl) || !DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl))
return;
+ if (SUPPORTS_WEAK && DECL_WEAK (decl))
+ weak_decls = tree_cons (NULL, decl, weak_decls);
+
/* We want to output external symbols at very last to check if they
are references or not. */
pending_assemble_externals = tree_cons (0, decl,
@@ -4846,10 +4853,6 @@ output_constructor (tree exp, unsigned HOST_WIDE_INT size,
assemble_zeros (size - total_bytes);
}
-/* This TREE_LIST contains any weak symbol declarations waiting
- to be emitted. */
-static GTY(()) tree weak_decls;
-
/* Mark DECL as weak. */
static void
@@ -4942,12 +4945,7 @@ declare_weak (tree decl)
error ("weak declaration of %q+D must be public", decl);
else if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
error ("weak declaration of %q+D must precede definition", decl);
- else if (SUPPORTS_WEAK)
- {
- if (! DECL_WEAK (decl))
- weak_decls = tree_cons (NULL, decl, weak_decls);
- }
- else
+ else if (!SUPPORTS_WEAK)
warning (0, "weak declaration of %q+D not supported", decl);
mark_weak (decl);