diff options
| -rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
| -rw-r--r-- | gcc/cp/decl2.c | 14 |
2 files changed, 12 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1d5b7d6..231b315 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2014-07-15 Jason Merrill <jason@redhat.com> + PR c++/61811 + * decl2.c (maybe_emit_vtables): Return true for -fuse-all-virtuals. + PR c++/60848 PR c++/61723 * call.c (is_std_init_list): Don't check CLASSTYPE_TEMPLATE_INFO. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 0926dbc..83a07e6 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -2014,11 +2014,15 @@ maybe_emit_vtables (tree ctype) if (DECL_COMDAT (primary_vtbl) && CLASSTYPE_DEBUG_REQUESTED (ctype)) note_debug_info_needed (ctype); - if (mark_all_virtuals) - /* Make sure virtual functions get instantiated/synthesized so that - they can be inlined after devirtualization even if the vtable is - never emitted. */ - mark_vtable_entries (primary_vtbl); + if (mark_all_virtuals && !DECL_ODR_USED (primary_vtbl)) + { + /* Make sure virtual functions get instantiated/synthesized so that + they can be inlined after devirtualization even if the vtable is + never emitted. */ + mark_used (primary_vtbl); + mark_vtable_entries (primary_vtbl); + return true; + } return false; } |
