diff options
Diffstat (limited to 'gcc/cp/class.c')
| -rw-r--r-- | gcc/cp/class.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 7361b5a1ba9..fa11606f2d1 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)); + } } } |

