Hi, In PR 113476 we have discovered that ipcp_param_lattices is no longer a POD and should be destructed. This patch does that, calling destructor on each element of the array containing them when the corresponding summary of a node is freed. An alternative would be to change the XCNEWVEC-and-placement-new to initializations in constructors of all things in ipcp_param_lattices and then simply use normal operators new and delete. I am not sure, the initialization through XCNEWVEC may be a bit more efficient although that is probably not a big concern. In the end, I opted for a simpler solution for stage 4.
I have verified that valgrind no longer reports lost memory blocks allocated within ipcp_vr_lattice::meet_with_1 on the preprocessed source (dwarf2out.i) attached to Bugzilla. The patch also passes bootstrap and LTO bootstrap and testing on x86_64-linux. OK for master? Thanks, Martin gcc/ChangeLog: 2024-02-09 Martin Jambor <mjam...@suse.cz> PR tree-optimization/113476 * ipa-prop.h (ipa_node_params::~ipa_node_params): Moved... * ipa-cp.cc (ipa_node_params::~ipa_node_params): ...here. Added destruction of lattices. --- gcc/ipa-cp.cc | 17 +++++++++++++++++ gcc/ipa-prop.h | 9 --------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/gcc/ipa-cp.cc b/gcc/ipa-cp.cc index e85477df32d..9864ff052de 100644 --- a/gcc/ipa-cp.cc +++ b/gcc/ipa-cp.cc @@ -399,6 +399,23 @@ public: bool virt_call; }; +/* Destructor of node function summary, placed here because it mainly must + destruct value range lattices not known outside of this source file. */ + +ipa_node_params::~ipa_node_params () +{ + if (lattices) + { + int count = ipa_get_param_count (this); + for (int i = 0; i < count; i++) + lattices[i].~ipcp_param_lattices (); + free (lattices); + } + vec_free (descriptors); + known_csts.release (); + known_contexts.release (); +} + /* Allocation pools for values and their sources in ipa-cp. */ object_allocator<ipcp_value<tree> > ipcp_cst_values_pool diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index 9c78dc9f486..fe401640824 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -670,15 +670,6 @@ ipa_node_params::ipa_node_params () { } -inline -ipa_node_params::~ipa_node_params () -{ - free (lattices); - vec_free (descriptors); - known_csts.release (); - known_contexts.release (); -} - /* Intermediate information that we get from alias analysis about a particular parameter in a particular basic_block. When a parameter or the memory it references is marked modified, we use that information in all dominated -- 2.43.0