summaryrefslogtreecommitdiff
path: root/gcc/tree.h
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2010-07-10 08:35:58 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2010-07-10 08:35:58 +0000
commit96fbe9dde2cd3dc9e6e5cea6905f8f98fdda1b4d (patch)
tree47fefa28d0e5dd7ef562214409a73540f77eb359 /gcc/tree.h
parentc4796e8b8649d96c83c98806f9e39dd729b23df1 (diff)
downloadgcc-96fbe9dde2cd3dc9e6e5cea6905f8f98fdda1b4d.tar.gz
gcc/
* tree.h (DECL_REPLACEABLE_P): Strengthen check for weak symbols. gcc/testsuite/ * gcc.dg/attr-weak-hidden-1.c, gcc.dg/attr-weak-hidden-1a.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162031 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree.h')
-rw-r--r--gcc/tree.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/tree.h b/gcc/tree.h
index 59f6b3a96b8..e749d696ec4 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -3012,6 +3012,11 @@ struct GTY(()) tree_parm_decl {
not be treated as replaceable so that use of C++ template
instantiations is not penalized.
+ In other respects, the condition is usually equivalent to whether
+ the function binds to the current module (shared library or executable).
+ However, weak functions can always be overridden by earlier TUs
+ in the same module, even if they bind locally to that module.
+
For example, DECL_REPLACEABLE is used to determine whether or not a
function (including a template instantiation) which is not
explicitly declared "inline" can be inlined. If the function is
@@ -3020,7 +3025,7 @@ struct GTY(()) tree_parm_decl {
function that is not DECL_REPLACEABLE can be inlined, since all
versions of the function will be functionally identical. */
#define DECL_REPLACEABLE_P(NODE) \
- (!DECL_COMDAT (NODE) && !targetm.binds_local_p (NODE))
+ (!DECL_COMDAT (NODE) && (DECL_WEAK (NODE) || !targetm.binds_local_p (NODE)))
/* The name of the object as the assembler will see it (but before any
translations made by ASM_OUTPUT_LABELREF). Often this is the same