From 958b8ee9a640cc1bfcefd74daebe77a6d6df36b3 Mon Sep 17 00:00:00 2001 From: mrs Date: Sun, 11 Jul 2004 05:13:12 +0000 Subject: [PATCH] * decl2.c (import_export_class): Never export/import vtables with inline key functions. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@84493 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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 a9ac0cb..2639623 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 191888e..4465873 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.7.4