aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanny Smith <dannysmith@users.sourceforge.net>2006-09-20 23:27:05 +0000
committerDanny Smith <dannysmith@gcc.gnu.org>2006-09-20 23:27:05 +0000
commit756ccd2a4082c570a8dc553fc2aa09b548416870 (patch)
tree074e7c0e511e2707eeadd787851db0351973d428
parent1bded8e1a0abebabf1f2d6323ec859b10641b45b (diff)
downloadgcc-756ccd2a4082c570a8dc553fc2aa09b548416870.zip
gcc-756ccd2a4082c570a8dc553fc2aa09b548416870.tar.gz
gcc-756ccd2a4082c570a8dc553fc2aa09b548416870.tar.bz2
re PR target/27650 (internal compiler error while compiling Gecode)
PR target/27650 * class.c (check_for_override): Remove dllimport from virtual methods. From-SVN: r117096
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/class.c10
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index a5d403a..fed109f 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2006-09-20 Danny Smith <dannysmith@users.sourceforge.net>
+
+ PR target/27650
+ * class.c (check_for_override): Remove dllimport from virtual
+ methods.
+
2006-09-18 Steven Bosscher <steven@gcc.gnu.org>
PR c++/29087
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 7361b5a..fa11606 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -2342,6 +2342,16 @@ check_for_override (tree decl, tree ctype)
if (!DECL_VINDEX (decl))
DECL_VINDEX (decl) = error_mark_node;
IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)) = 1;
+ if (DECL_DLLIMPORT_P (decl))
+ {
+ /* When we handled the dllimport attribute we may not have known
+ that this function is virtual We can't use dllimport
+ semantics for a virtual method because we need to initialize
+ the vtable entry with a constant address. */
+ DECL_DLLIMPORT_P (decl) = 0;
+ DECL_ATTRIBUTES (decl)
+ = remove_attribute ("dllimport", DECL_ATTRIBUTES (decl));
+ }
}
}