OSDN Git Service

* decl2.c (import_export_class): Never export/import vtables
authormrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 11 Jul 2004 05:13:12 +0000 (05:13 +0000)
committermrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 11 Jul 2004 05:13:12 +0000 (05:13 +0000)
        with inline key functions.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@84493 138bc75d-0d04-0410-961f-82ee72b054a4

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

index a9ac0cb..2639623 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.
 2004-07-09  Steven Bosscher  <stevenb@suse.de>
 
        * typeck.c (c_expand_asm_operands): Remove.
index 191888e..4465873 100644 (file)
@@ -1501,7 +1501,14 @@ import_export_class (tree ctype)
       && TYPE_POLYMORPHIC_P (ctype))
     {
       tree method = CLASSTYPE_KEY_METHOD (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);
     }
 
        import_export = (DECL_REALLY_EXTERN (method) ? -1 : 1);
     }