fix makeConcreteParasitics leak+testcase (#439)

* fix makeConcreteParasitics leak

Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>

* simplify test, update the address review comment

Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>

* reduce test verbosity

Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>

---------

Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
This commit is contained in:
Deepashree Sengupta 2026-05-20 16:55:02 -04:00 committed by GitHub
parent 17380215ef
commit 5dbc473186
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 18 additions and 1 deletions

View File

@ -4291,8 +4291,15 @@ Parasitics *
Sta::makeConcreteParasitics(std::string_view name,
std::string_view filename)
{
// Free the prior entry to avoid leaking it on overwrite.
std::string key(name);
auto it = parasitics_name_map_.find(key);
if (it != parasitics_name_map_.end()) {
delete it->second;
parasitics_name_map_.erase(it);
}
Parasitics *parasitics = new ConcreteParasitics(name, filename, this);
parasitics_name_map_[std::string(name)] = parasitics;
parasitics_name_map_[key] = parasitics;
return parasitics;
}

View File

View File

@ -0,0 +1,9 @@
# Sta::makeConcreteParasitics map-overwrite leak repro.
# Run under -fsanitize=address to verify no leak after the fix.
read_liberty asap7_small.lib.gz
read_verilog reg1_asap7.v
link_design top
# 1st read_spef
read_spef -min reg1_asap7.spef
# 2nd read_spef
read_spef -min reg1_asap7.spef

View File

@ -154,6 +154,7 @@ record_public_tests {
liberty_ccsn
liberty_float_as_str
liberty_latch3
make_concrete_parasitics_leak
package_require
path_group_names
power_json