rtl-optimization/99054 - fix leak in fixup_partitions

This fixes a leak of the vector retured by find_partition_fixes
by turning it into an auto_vec.

2021-02-10  Richard Biener  <rguenther@suse.de>

	PR rtl-optimization/99054
	* cfgrtl.c (rtl-optimization/99054): Return an auto_vec.
	(fixup_partitions): Adjust.
	(rtl_verify_edges): Likewise.
This commit is contained in:
Richard Biener 2021-02-10 10:17:15 +01:00
parent bd0e37f68a
commit 7293251105

View File

@ -2381,11 +2381,11 @@ find_bbs_reachable_by_hot_paths (hash_set<basic_block> *set)
cfg optimizations that may make hot blocks previously reached cfg optimizations that may make hot blocks previously reached
by both hot and cold blocks now only reachable along cold paths. */ by both hot and cold blocks now only reachable along cold paths. */
static vec<basic_block> static auto_vec<basic_block>
find_partition_fixes (bool flag_only) find_partition_fixes (bool flag_only)
{ {
basic_block bb; basic_block bb;
vec<basic_block> bbs_to_fix = vNULL; auto_vec<basic_block> bbs_to_fix;
hash_set<basic_block> set; hash_set<basic_block> set;
/* Callers check this. */ /* Callers check this. */
@ -2431,7 +2431,7 @@ fixup_partitions (void)
  a cold partition cannot dominate a basic block in a hot partition.   a cold partition cannot dominate a basic block in a hot partition.
Fixup any that now violate this requirement, as a result of edge Fixup any that now violate this requirement, as a result of edge
forwarding and unreachable block deletion.  */ forwarding and unreachable block deletion.  */
vec<basic_block> bbs_to_fix = find_partition_fixes (false); auto_vec<basic_block> bbs_to_fix = find_partition_fixes (false);
/* Do the partition fixup after all necessary blocks have been converted to /* Do the partition fixup after all necessary blocks have been converted to
cold, so that we only update the region crossings the minimum number of cold, so that we only update the region crossings the minimum number of
@ -2682,7 +2682,7 @@ rtl_verify_edges (void)
if (crtl->has_bb_partition && !err if (crtl->has_bb_partition && !err
&& current_ir_type () == IR_RTL_CFGLAYOUT) && current_ir_type () == IR_RTL_CFGLAYOUT)
{ {
vec<basic_block> bbs_to_fix = find_partition_fixes (true); auto_vec<basic_block> bbs_to_fix = find_partition_fixes (true);
err = !bbs_to_fix.is_empty (); err = !bbs_to_fix.is_empty ();
} }