From d5648e1233d6edd46046ef626a73b8a1d598c4ac Mon Sep 17 00:00:00 2001 From: Danny Smith Date: Wed, 16 Jul 2003 01:04:10 +0000 Subject: [PATCH] winnt.c (associated_type): Artificial methods are not affected by the import/export status of their class... * config/i386/winnt.c (associated_type): Artificial methods are not affected by the import/export status of their class unless they are COMDAT. (i386_pe_dllimport_p): Do not mark artificial methods as dllimport. * config/i386/winnt.c: Fix GCC copyright comment. From-SVN: r69431 --- gcc/ChangeLog | 9 +++++++++ gcc/config/i386/winnt.c | 21 ++++++++++++--------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 24c45c74584..c8b853fc83c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2003-07-16 Danny Smith + + * config/i386/winnt.c (associated_type): Artificial methods are not + affected by the import/export status of their class unless they are + COMDAT. + (i386_pe_dllimport_p): Do not mark artificial methods as dllimport. + + * config/i386/winnt.c: Fix GCC copyright comment. + 2003-07-16 Gabriel Dos Reis PR c++/11531 diff --git a/gcc/config/i386/winnt.c b/gcc/config/i386/winnt.c index 2c1e47fdd56..a2219bd6126 100644 --- a/gcc/config/i386/winnt.c +++ b/gcc/config/i386/winnt.c @@ -16,10 +16,9 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - -along with GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +along with GCC; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ #include "config.h" #include "system.h" @@ -174,9 +173,11 @@ associated_type (decl) to the containing class. So we look at the 'this' arg. */ if (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE) { - /* Artificial methods are not affected by the import/export status of - their class unless they are virtual. */ - if (! DECL_ARTIFICIAL (decl) || DECL_VINDEX (decl)) + /* Artificial methods are not affected by the import/export status + of their class unless they are COMDAT. Implicit copy ctor's and + dtor's are not affected by class status but virtual and + non-virtual thunks are. */ + if (!DECL_ARTIFICIAL (decl) || DECL_COMDAT (decl)) t = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))); } else if (DECL_CONTEXT (decl) @@ -279,9 +280,11 @@ i386_pe_dllimport_p (decl) /* Since we can't treat a pointer to a dllimport'd symbol as a constant address, we turn off the attribute on C++ virtual - methods to allow creation of vtables using thunks. */ + methods to allow creation of vtables using thunks. Don't mark + artificial methods either (in associated_type, only COMDAT + artificial method get import status from class context). */ else if (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE - && (DECL_VIRTUAL_P (decl))) + && (DECL_VIRTUAL_P (decl) || DECL_ARTIFICIAL (decl))) return 0; return 1; -- 2.30.2