Hi, On Wed, May 16 2018, Jason Merrill wrote: > On Wed, May 16, 2018 at 6:35 AM, Martin Jambor <mjam...@suse.cz> wrote: >> On Tue, May 15 2018, Jason Merrill wrote: >>> In C++11 and up, the implicitly-declared copy constructor and >>> assignment operator are deprecated if one of them, or the destructor, >>> is user-provided. Implementing that in G++ turned up a few dodgy uses >>> in the compiler. >>> >>> In general it's unsafe to copy an ipa_edge_args, because if one of the >>> pointers is non-null you get two copies of a vec pointer, and when one >>> of the objects is destroyed it frees the vec and leaves the other >>> object pointing to freed memory. This specific example is safe >>> because it only copies from an object with null pointers, but it would >>> be better to avoid the copy. OK for trunk? >> >> I have had a look and found out that the function in question >> (ipa_free_edge_args_substructures) has no uses, apparently I forgot to >> remove it when I did the conversion of jump functions to be stored in >> call graph edge summaries. So thanks lot for spotting this but I'd >> prefer the following (compiled but untested) patch: >> >> Martin >> >> >> 2018-05-16 Martin Jambor <mjam...@suse.cz> >> >> * ipa-prop.c (ipa_free_all_edge_args): Remove. >> * ipa-prop.h (ipa_free_all_edge_args): Likewise. > > That works for me, too. > > Jason
OK, so after bootstrapping and testing on x86_64, I committed the patch as obvious. Thanks, Martin 2018-05-16 Martin Jambor <mjam...@suse.cz> * ipa-prop.c (ipa_free_all_edge_args): Remove. * ipa-prop.h (ipa_free_all_edge_args): Likewise. --- gcc/ipa-prop.c | 10 ---------- gcc/ipa-prop.h | 1 - 2 files changed, 11 deletions(-) diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 38441cc49bc..19d55cda009 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -3708,16 +3708,6 @@ ipa_check_create_edge_args (void) ipa_vr_hash_table = hash_table<ipa_vr_ggc_hash_traits>::create_ggc (37); } -/* Frees all dynamically allocated structures that the argument info points - to. */ - -void -ipa_free_edge_args_substructures (struct ipa_edge_args *args) -{ - vec_free (args->jump_functions); - *args = ipa_edge_args (); -} - /* Free all ipa_edge structures. */ void diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index a61e06135e3..dc45cea9c71 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -664,7 +664,6 @@ extern GTY(()) vec<ipcp_transformation_summary, va_gc> *ipcp_transformations; void ipa_create_all_node_params (void); void ipa_create_all_edge_args (void); void ipa_check_create_edge_args (void); -void ipa_free_edge_args_substructures (struct ipa_edge_args *); void ipa_free_all_node_params (void); void ipa_free_all_edge_args (void); void ipa_free_all_structures_after_ipa_cp (void); -- 2.16.3