decl2.c (import_export_class): Never export/import vtables with inline key functions.
authorMike Stump <mrs@apple.com>
Sun, 11 Jul 2004 05:13:12 +0000 (05:13 +0000)
committerMike Stump <mrs@gcc.gnu.org>
Sun, 11 Jul 2004 05:13:12 +0000 (05:13 +0000)
        * decl2.c (import_export_class): Never export/import vtables
        with inline key functions.

From-SVN: r84493

gcc/cp/ChangeLog
gcc/cp/decl2.c

index a9ac0cb8b8f7a5c7560b030e8d0c6ead509188e1..2639623445db61f01b237c9ba827d7ac79350388 100644 (file)
@@ -1,3 +1,8 @@
+2004-07-10  Mike Stump  <mrs@apple.com>
+
+       * decl2.c (import_export_class): Never export/import vtables
+       with inline key functions.
+
 2004-07-09  Steven Bosscher  <stevenb@suse.de>
 
        * typeck.c (c_expand_asm_operands): Remove.
index 191888e1b8786ec767529507be2eeead3c7b1efc..4465873c01806ab857a548ffacf192df64ac9dda 100644 (file)
@@ -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);
     }