+2013-01-17 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimizations/55264
+ * ipa-inline-transform.c (can_remove_node_now_p_1): Never return true
+ for virtual methods.
+ * ipa.c (symtab_remove_unreachable_nodes): Never return true for
+ virtual methods before inlining is over.
+ * cgraph.h (cgraph_only_called_directly_or_aliased_p): Return false for
+ virtual functions.
+ * cgraphclones.c (cgraph_create_virtual_clone): Mark clones as
+ non-virtual.
+
2013-01-16 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/56005
gcc_assert (!node->global.inlined_to);
return (!node->symbol.force_output && !node->symbol.address_taken
&& !node->symbol.used_from_other_partition
+ && !DECL_VIRTUAL_P (node->symbol.decl)
&& !DECL_STATIC_CONSTRUCTOR (node->symbol.decl)
&& !DECL_STATIC_DESTRUCTOR (node->symbol.decl)
&& !node->symbol.externally_visible);
TREE_PUBLIC (new_node->symbol.decl) = 0;
DECL_COMDAT (new_node->symbol.decl) = 0;
DECL_WEAK (new_node->symbol.decl) = 0;
+ DECL_VIRTUAL_P (new_node->symbol.decl) = 0;
DECL_STATIC_CONSTRUCTOR (new_node->symbol.decl) = 0;
DECL_STATIC_DESTRUCTOR (new_node->symbol.decl) = 0;
new_node->clone.tree_map = tree_map;
those only after all devirtualizable virtual calls are processed.
Lacking may edges in callgraph we just preserve them post
inlining. */
- && (!DECL_VIRTUAL_P (node->symbol.decl)
- || (!DECL_COMDAT (node->symbol.decl)
- && !DECL_EXTERNAL (node->symbol.decl)))
+ && !DECL_VIRTUAL_P (node->symbol.decl)
/* During early inlining some unanalyzed cgraph nodes might be in the
callgraph and they might reffer the function in question. */
&& !cgraph_new_nodes);
&& (!cgraph_can_remove_if_no_direct_calls_and_refs_p (node)
/* Keep around virtual functions for possible devirtualization. */
|| (before_inlining_p
- && DECL_VIRTUAL_P (node->symbol.decl)
- && (DECL_COMDAT (node->symbol.decl) || DECL_EXTERNAL (node->symbol.decl)))))
+ && DECL_VIRTUAL_P (node->symbol.decl))))
{
gcc_assert (!node->global.inlined_to);
pointer_set_insert (reachable, node);
+2013-01-17 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimizations/55264
+ * g++.dg/ipa/pr55264.C: New test.
+
2013-01-16 Janus Weil <janus@gcc.gnu.org>
PR fortran/55983
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-early-inlining -fno-weak" } */
+
+struct S
+{
+ S();
+ virtual inline void foo ()
+ {
+ foo();
+ }
+};
+
+void
+B ()
+{
+ S().foo ();
+}