From 30bf22a0ee6f89f241714483c24417e45392ffdf Mon Sep 17 00:00:00 2001 From: Mike Stump Date: Sun, 11 Jul 2004 05:13:12 +0000 Subject: [PATCH] decl2.c (import_export_class): Never export/import vtables with inline key functions. * decl2.c (import_export_class): Never export/import vtables with inline key functions. From-SVN: r84493 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/decl2.c | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a9ac0cb8b8f..2639623445d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2004-07-10 Mike Stump + + * decl2.c (import_export_class): Never export/import vtables + with inline key functions. + 2004-07-09 Steven Bosscher * typeck.c (c_expand_asm_operands): Remove. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 191888e1b87..4465873c018 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -1501,7 +1501,14 @@ import_export_class (tree ctype) && TYPE_POLYMORPHIC_P (ctype)) { tree method = CLASSTYPE_KEY_METHOD (ctype); - if (method) + + /* If weak symbol support is not available, then we must be + careful not to emit the vtable when the key function is + inline. An inline function can be defined in multiple + translation units. If we were to emit the vtable in each + translation unit containing a definition, we would get + multiple definition errors at link-time. */ + if (method && (flag_weak || ! DECL_DECLARED_INLINE_P (method))) import_export = (DECL_REALLY_EXTERN (method) ? -1 : 1); } -- 2.30.2