diff --git a/liberty/FuncExpr.cc b/liberty/FuncExpr.cc index 91139a44..67de253c 100644 --- a/liberty/FuncExpr.cc +++ b/liberty/FuncExpr.cc @@ -254,8 +254,12 @@ FuncExpr::bitSubExpr(int bit_offset) return makePort(port); } else { - LibertyPort *port = port_->findLibertyMember(bit_offset); - return makePort(port); + if (bit_offset < port_->size()) { + LibertyPort *port = port_->findLibertyMember(bit_offset); + return makePort(port); + } + else + return nullptr; } } else diff --git a/liberty/Liberty.cc b/liberty/Liberty.cc index aad0a8bd..364e5dae 100644 --- a/liberty/Liberty.cc +++ b/liberty/Liberty.cc @@ -130,15 +130,13 @@ LibertyLibrary::~LibertyLibrary() wireloads_.deleteContents(); wire_load_selections_.deleteContents(); delete units_; + // Also deletes default_ocv_derate_ ocv_derate_map_.deleteContents(); delete buffers_; delete inverters_; driver_waveform_map_.deleteContents(); delete driver_waveform_default_; - - delete default_ocv_derate_; - default_ocv_derate_ = nullptr; } LibertyCell * diff --git a/liberty/LibertyReader.cc b/liberty/LibertyReader.cc index 06288752..dd730770 100644 --- a/liberty/LibertyReader.cc +++ b/liberty/LibertyReader.cc @@ -4909,7 +4909,7 @@ LibertyReader::visitWhen(LibertyAttr *attr) false, "when", attr); } } - if (timing_) { + if (timing_ && !in_ccsn_) { const char *func = getAttrString(attr); if (func) { TimingArcAttrs *attrs = timing_->attrs().get();