diff options
| author | mrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-07-11 05:13:12 +0000 |
|---|---|---|
| committer | mrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-07-11 05:13:12 +0000 |
| commit | 958b8ee9a640cc1bfcefd74daebe77a6d6df36b3 (patch) | |
| tree | 3b2399aa188627c9e88f1d6ad2c117774f3346c7 | |
| parent | 7a876e0d36284e7e47bb7be37680d4d5b8d782ae (diff) | |
| download | ppe42-gcc-958b8ee9a640cc1bfcefd74daebe77a6d6df36b3.tar.gz ppe42-gcc-958b8ee9a640cc1bfcefd74daebe77a6d6df36b3.zip | |
* 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
| -rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/cp/decl2.c | 9 |
2 files changed, 13 insertions, 1 deletions
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 <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. 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); } |

