From 9716cc3efff27109cc0ac293f0a1356c2fcf249d Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Sun, 3 Aug 2014 14:02:19 +0000 Subject: [PATCH] ipa-devirt.c (odr_type_warn_count): Add type. * ipa-devirt.c (odr_type_warn_count): Add type. (possible_polymorphic_call_targets): Set it. (ipa_devirt): Use it. From-SVN: r213526 --- gcc/ChangeLog | 10 ++++++++-- gcc/ipa-devirt.c | 10 +++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 832c89b16848..f193068343e1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-08-01 Jan Hubicka + + * ipa-devirt.c (odr_type_warn_count): Add type. + (possible_polymorphic_call_targets): Set it. + (ipa_devirt): Use it. + 2014-08-01 Jan Hubicka * doc/invoke.texi (Wsuggest-final-types, Wsuggest-final-methods): Document. @@ -24,14 +30,14 @@ * hash-map.h (default_hashmap_traits::mark_key_deleted): Fix cast. (hash_map::remove): New method. -(hash_map::traverse): New method. + (hash_map::traverse): New method. * cgraph.h, except.c, except.h, gimple-ssa-strength-reduction.c, ipa-utils.c, lto-cgraph.c, lto-streamer.h, omp-low.c, predict.c, tree-cfg.c, tree-cfgcleanup.c, tree-eh.c, tree-eh.h, tree-inline.c, tree-inline.h, tree-nested.c, tree-sra.c, tree-ssa-loop-im.c, tree-ssa-loop-ivopts.c, tree-ssa-reassoc.c, tree-ssa-structalias.c, tree-ssa.c, tree-ssa.h, var-tracking.c: Use hash_map instead of - pointer_map. + pointer_map. 2014-08-02 Trevor Saunders diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c index ca74d3bb4fdb..56eeaf5c9c2d 100644 --- a/gcc/ipa-devirt.c +++ b/gcc/ipa-devirt.c @@ -2518,6 +2518,7 @@ devirt_variable_node_removal_hook (varpool_node *n, /* Record about how many calls would benefit from given type to be final. */ struct odr_type_warn_count { + tree type; int count; gcov_type dyn_count; }; @@ -2738,6 +2739,7 @@ possible_polymorphic_call_targets (tree otr_type, if (binfo) matched_vtables.add (BINFO_VTABLE (binfo)); + /* Next walk recursively all derived types. */ if (context.speculative_maybe_derived_type) for (i = 0; i < speculative_outer_type->derived_types.length(); i++) @@ -2818,6 +2820,8 @@ possible_polymorphic_call_targets (tree otr_type, final_warning_records->type_warnings[outer_type->id].count++; final_warning_records->type_warnings[outer_type->id].dyn_count += final_warning_records->dyn_count; + final_warning_records->type_warnings[outer_type->id].type + = outer_type->type; (*slot)->type_warning = outer_type->id + 1; } if (complete @@ -3274,12 +3278,12 @@ ipa_devirt (void) i < final_warning_records->type_warnings.length (); i++) if (final_warning_records->type_warnings[i].count) { - odr_type type = odr_types[i]; - warning_at (DECL_SOURCE_LOCATION (TYPE_NAME (type->type)), + tree type = final_warning_records->type_warnings[i].type; + warning_at (DECL_SOURCE_LOCATION (TYPE_NAME (type)), OPT_Wsuggest_final_types, "Declaring type %qD final " "would enable devirtualization of %i calls", - type->type, + type, final_warning_records->type_warnings[i].count); } } -- 2.47.3