@@ -4880,6 +4880,8 @@ Sdc::findMergeMatch(ExceptionPath *exception)
48804880void
48814881Sdc::deleteExceptions ()
48824882{
4883+ for (ExceptionPath *exception : exceptions_)
4884+ delete exception;
48834885 exceptions_.clear ();
48844886 exception_id_ = 0 ;
48854887
@@ -4964,6 +4966,7 @@ Sdc::unrecordException(ExceptionPath *exception)
49644966{
49654967 unrecordMergeHashes (exception);
49664968 unrecordExceptionFirstPts (exception);
4969+ unrecordExceptionPins (exception);
49674970 exceptions_.erase (exception);
49684971}
49694972
@@ -5022,6 +5025,22 @@ Sdc::unrecordExceptionFirstPts(ExceptionPath *exception)
50225025 }
50235026}
50245027
5028+ void
5029+ Sdc::unrecordExceptionPins (ExceptionPath *exception)
5030+ {
5031+ ExceptionFrom *from = exception->from ();
5032+ if (from)
5033+ unrecordExceptionPins (exception, from->pins (), pin_exceptions_);
5034+ ExceptionThruSeq *thrus = exception->thrus ();
5035+ if (thrus) {
5036+ for (ExceptionThru *thru : *thrus)
5037+ unrecordExceptionPins (exception, thru->pins (), pin_exceptions_);
5038+ }
5039+ ExceptionTo *to = exception->to ();
5040+ if (to)
5041+ unrecordExceptionPins (exception, to->pins (), pin_exceptions_);
5042+ }
5043+
50255044void
50265045Sdc::unrecordExceptionClks (ExceptionPath *exception,
50275046 ClockSet *clks,
@@ -5666,22 +5685,22 @@ Sdc::connectPinAfter(const Pin *pin)
56665685}
56675686
56685687void
5669- Sdc::disconnectPinBefore (const Pin *pin)
5688+ Sdc::deletePinBefore (const Pin *pin)
56705689{
56715690 auto itr = pin_exceptions_.find (pin);
56725691 if (itr != pin_exceptions_.end ()) {
56735692 for (ExceptionPath *exception : itr->second ) {
56745693 ExceptionFrom *from = exception->from ();
56755694 if (from)
5676- from->disconnectPinBefore (pin, network_);
5695+ from->deletePinBefore (pin, network_);
56775696 ExceptionTo *to = exception->to ();
56785697 if (to)
5679- to->disconnectPinBefore (pin, network_);
5698+ to->deletePinBefore (pin, network_);
56805699 ExceptionPt *first_pt = exception->firstPt ();
56815700 ExceptionThruSeq *thrus = exception->thrus ();
56825701 if (thrus) {
56835702 for (ExceptionThru *thru : *exception->thrus ()) {
5684- thru->disconnectPinBefore (pin, network_);
5703+ thru->deletePinBefore (pin, network_);
56855704 if (thru == first_pt)
56865705 recordExceptionEdges (exception, thru->edges (),
56875706 first_thru_edge_exceptions_);
0 commit comments