aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2021-02-09 09:57:04 +0100
committerMartin Liska <mliska@suse.cz>2021-02-10 09:25:38 +0100
commitd44f56f2b2d4f0a827ba6f08aebc715786225c6f (patch)
tree92b2979ebd7f5f45cf6e913f43812d0472a12c95
parente1782d8ad10dc6b556e118fd25fdaff04ce54dde (diff)
downloadgcc-d44f56f2b2d4f0a827ba6f08aebc715786225c6f.zip
gcc-d44f56f2b2d4f0a827ba6f08aebc715786225c6f.tar.gz
gcc-d44f56f2b2d4f0a827ba6f08aebc715786225c6f.tar.bz2
ICF: fix memory leak
gcc/ChangeLog: PR ipa/99003 * ipa-icf.c (sem_item::add_reference): Fix memory leak when a reference exists.
-rw-r--r--gcc/ipa-icf.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index 435f567..687ad8d 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -165,8 +165,11 @@ sem_item::add_reference (ref_map *refs,
unsigned index = reference_count++;
bool existed;
- vec<sem_item *> &v
- = refs->get_or_insert (new sem_usage_pair (target, index), &existed);
+ sem_usage_pair *pair = new sem_usage_pair (target, index);
+ vec<sem_item *> &v = refs->get_or_insert (pair, &existed);
+ if (existed)
+ delete pair;
+
v.safe_push (this);
bitmap_set_bit (target->usage_index_bitmap, index);
refs_set.add (target->node);