aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/tree.c8
2 files changed, 11 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 8dfd5c1..e1d559f 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2004-02-05 Jan Hubicka <jh@suse.cz>
+
+ * tree.c (cp_cannot_inline_tree_fn): Allow inlining of comdat
+ functions.
+
2003-02-05 Giovanni Bajo <giovannibajo@gcc.gnu.org>
PR c++/14008
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 3413ede..e07ecd8 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -2080,8 +2080,12 @@ cp_cannot_inline_tree_fn (tree* fnp)
return 1;
/* Don't auto-inline anything that might not be bound within
- this unit of translation. */
- if (!DECL_DECLARED_INLINE_P (fn) && !(*targetm.binds_local_p) (fn))
+ this unit of translation.
+ Exclude comdat functions from this rule. While they can be bound
+ to the other unit, they all must be the same. This is especilly
+ important so templates can inline. */
+ if (!DECL_DECLARED_INLINE_P (fn) && !(*targetm.binds_local_p) (fn)
+ && !DECL_COMDAT (fn))
{
DECL_UNINLINABLE (fn) = 1;
return 1;