From d6d989fc197ee6387bfd2e0ea2652ff69d1f61bc Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Mon, 26 Aug 2013 17:42:10 +0200 Subject: [PATCH] cgraph.c (cgraph_propagate_frequency): Do not assume that virtual methods can not be called indirectly when... * cgraph.c (cgraph_propagate_frequency): Do not assume that virtual methods can not be called indirectly when their address is not taken. From-SVN: r202003 --- gcc/ChangeLog | 5 +++++ gcc/cgraph.c | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 29a8d558588..f296c376cbc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-08-26 Jan Hubicka + + * cgraph.c (cgraph_propagate_frequency): Do not assume that virtual + methods can not be called indirectly when their address is not taken. + 2013-08-26 Jan Hubicka * gimple-fold.c (gimple_get_virt_method_for_binfo): Use ctor_for_folding. diff --git a/gcc/cgraph.c b/gcc/cgraph.c index efd30abb4a0..063c5245fef 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -2348,7 +2348,10 @@ cgraph_propagate_frequency (struct cgraph_node *node) struct cgraph_propagate_frequency_data d = {true, true, true, true}; bool changed = false; - if (!node->local.local) + /* We can not propagate anything useful about externally visible functions + nor about virtuals. */ + if (!node->local.local + || (flag_devirtualize && DECL_VIRTUAL_P (node->symbol.decl))) return false; gcc_assert (node->symbol.analyzed); if (dump_file && (dump_flags & TDF_DETAILS)) -- 2.30.2