diff options
author | Martin Liska <mliska@suse.cz> | 2021-02-10 09:39:54 +0100 |
---|---|---|
committer | Martin Liska <mliska@suse.cz> | 2021-02-10 13:20:51 +0100 |
commit | 57d1b68d6582efec5a7ca63ea56a1cedbfe6e874 (patch) | |
tree | b8369683a8f68c196135dcd7814464e62629c366 /gcc/gimple-if-to-switch.cc | |
parent | 72932511053596091ad291539022b51d9f2ba418 (diff) | |
download | gcc-57d1b68d6582efec5a7ca63ea56a1cedbfe6e874.zip gcc-57d1b68d6582efec5a7ca63ea56a1cedbfe6e874.tar.gz gcc-57d1b68d6582efec5a7ca63ea56a1cedbfe6e874.tar.bz2 |
if-to-switch: fix memory leak in case merging
gcc/ChangeLog:
PR tree-optimization/99002
PR tree-optimization/99026
* gimple-if-to-switch.cc (if_chain::is_beneficial): Fix memory
leak when adjacent cases are merged.
* tree-switch-conversion.c (switch_decision_tree::analyze_switch_statement): Use
release_clusters.
(make_pass_lower_switch): Remove trailing whitespace.
* tree-switch-conversion.h (release_clusters): New.
Diffstat (limited to 'gcc/gimple-if-to-switch.cc')
-rw-r--r-- | gcc/gimple-if-to-switch.cc | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/gcc/gimple-if-to-switch.cc b/gcc/gimple-if-to-switch.cc index f39662b..16fabef 100644 --- a/gcc/gimple-if-to-switch.cc +++ b/gcc/gimple-if-to-switch.cc @@ -227,6 +227,7 @@ if_chain::is_beneficial () (left->get_high ()), wi::one (TYPE_PRECISION (type)))) { left->set_high (right->get_high ()); + delete right; continue; } } @@ -241,20 +242,20 @@ if_chain::is_beneficial () = jump_table_cluster::find_jump_tables (filtered_clusters); bool r = output.length () < filtered_clusters.length (); if (r) - dump_clusters (&output, "JT can be built"); - output.release (); - if (r) - return true; + { + dump_clusters (&output, "JT can be built"); + release_clusters (output); + return true; + } + else + output.release (); output = bit_test_cluster::find_bit_tests (filtered_clusters); r = output.length () < filtered_clusters.length (); if (r) dump_clusters (&output, "BT can be built"); - for (unsigned i = 0; i < output.length (); i++) - delete output[i]; - - output.release (); + release_clusters (output); return r; } |