diff options
author | Rafael Avila de Espindola <espindola@google.com> | 2008-08-19 14:11:18 +0000 |
---|---|---|
committer | Rafael Espindola <espindola@gcc.gnu.org> | 2008-08-19 14:11:18 +0000 |
commit | 21fe7edcee8a8e39cb4ba5f8b49e759c48f76bce (patch) | |
tree | 8597de88ec65628070ba508f4bd324cbe3d772d3 | |
parent | b8aaf5063d697ee0346ffb820e41d9d842c91b05 (diff) | |
download | gcc-21fe7edcee8a8e39cb4ba5f8b49e759c48f76bce.zip gcc-21fe7edcee8a8e39cb4ba5f8b49e759c48f76bce.tar.gz gcc-21fe7edcee8a8e39cb4ba5f8b49e759c48f76bce.tar.bz2 |
varasm.c (weak_decls): Move earlier in the file.
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.
From-SVN: r139233
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/varasm.c | 18 |
2 files changed, 14 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8d30516..a325889 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +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. + 2008-08-19 H.J. Lu <hongjiu.lu@intel.com> PR target/37157 diff --git a/gcc/varasm.c b/gcc/varasm.c index 941716f..863ffd0 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); |