Using auto_vec rather than vec for means the vectors are release automatically upon return, to stop the leak. The problem seems is that auto_vec<T, N> is not really move-aware, only the <T, 0> specialization is.
This is actually Jan's original suggestion https://gcc.gnu.org/pipermail/gcc-patches/2024-June/655600.html which I improvised on by also using embedded storage. I think it should fix this regression: https://gcc.gnu.org/pipermail/gcc-regression/2024-June/080152.html I could not reproduce it on x86-64 linux, so if someone could help me test it on aarch64 that would be much appreciated. -- gcc/ChangeLog: * tree-profile.cc (find_conditions): Use auto_vec without embedded storage. --- gcc/tree-profile.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/tree-profile.cc b/gcc/tree-profile.cc index 8c9945847ca..153c9323040 100644 --- a/gcc/tree-profile.cc +++ b/gcc/tree-profile.cc @@ -876,7 +876,7 @@ find_conditions (struct function *fn) make_top_index (fnblocks, ctx.B1, ctx.top_index); /* Bin the Boolean expressions so that exprs[id] -> [x1, x2, ...]. */ - hash_map<int_hash<unsigned, 0>, auto_vec<basic_block, 8>> exprs; + hash_map<int_hash<unsigned, 0>, auto_vec<basic_block>> exprs; for (basic_block b : fnblocks) { const unsigned uid = condition_uid (fn, b); -- 2.39.2