From 1b60eaedde85fc88a15e9b5353d8d15eb500a540 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 15 Jul 2014 17:38:48 -0400 Subject: [PATCH] re PR c++/61811 (Firefox LTO build error due to undefined symbols) PR c++/61811 * decl2.c (maybe_emit_vtables): Return true for -fuse-all-virtuals. From-SVN: r212576 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/decl2.c | 14 +++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1d5b7d6423c..231b315321c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2014-07-15 Jason Merrill + 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 0926dbc60fc..83a07e64d72 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; } -- 2.30.2