winnt.c (associated_type): Artificial methods are not affected by the import/export...
authorDanny Smith <dannysmith@users.sourceforge.net>
Wed, 16 Jul 2003 01:04:10 +0000 (01:04 +0000)
committerDanny Smith <dannysmith@gcc.gnu.org>
Wed, 16 Jul 2003 01:04:10 +0000 (01:04 +0000)
* 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
gcc/config/i386/winnt.c

index 24c45c7458411ec34d85597195a30cdc194d2d5c..c8b853fc83c4f00c5f11dab43e112ccef46bfb24 100644 (file)
@@ -1,3 +1,12 @@
+2003-07-16  Danny Smith  <dannysmith@users.sourceforge.net>
+
+       * 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  <gcc@integrable-solutions.net>
 
        PR c++/11531
index 2c1e47fdd567002e40d865baf0cb7cb8a36c7b7b..a2219bd61269271153decf8c5a327d675cde3965 100644 (file)
@@ -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;