Merge pull request #160 from openroadie/master
Latest OpenSTA (fixed crash with thru exceptions).
This commit is contained in:
commit
555493cba6
|
|
@ -1487,7 +1487,9 @@ ExceptionThru::deletePinEdges(const Pin *pin,
|
|||
}
|
||||
else {
|
||||
// erase prevents range iteration.
|
||||
for (const EdgePins &edge_pins : *edges_) {
|
||||
EdgePinsSet::Iterator edge_iter(edges_);
|
||||
while (edge_iter.hasNext()) {
|
||||
const EdgePins &edge_pins = edge_iter.next();
|
||||
if (edge_pins.first == pin
|
||||
|| edge_pins.second == pin) {
|
||||
edges_->erase(edge_pins);
|
||||
|
|
|
|||
30
sdc/Sdc.cc
30
sdc/Sdc.cc
|
|
@ -5663,12 +5663,15 @@ Sdc::connectPinAfter(const Pin *pin)
|
|||
PinSet *drvrs = network_->drivers(pin);
|
||||
for (ExceptionPath *exception : exceptions_) {
|
||||
ExceptionPt *first_pt = exception->firstPt();
|
||||
for (ExceptionThru *thru : *exception->thrus()) {
|
||||
if (thru->edges()) {
|
||||
thru->connectPinAfter(drvrs, network_);
|
||||
if (first_pt == thru)
|
||||
recordExceptionEdges(exception, thru->edges(),
|
||||
first_thru_edge_exceptions_);
|
||||
ExceptionThruSeq *thrus = exception->thrus();
|
||||
if (thrus) {
|
||||
for (ExceptionThru *thru : *exception->thrus()) {
|
||||
if (thru->edges()) {
|
||||
thru->connectPinAfter(drvrs, network_);
|
||||
if (first_pt == thru)
|
||||
recordExceptionEdges(exception, thru->edges(),
|
||||
first_thru_edge_exceptions_);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5681,12 +5684,15 @@ Sdc::disconnectPinBefore(const Pin *pin)
|
|||
if (have_thru_hpin_exceptions_) {
|
||||
for (ExceptionPath *exception : exceptions_) {
|
||||
ExceptionPt *first_pt = exception->firstPt();
|
||||
for (ExceptionThru *thru : *exception->thrus()) {
|
||||
if (thru->edges()) {
|
||||
thru->disconnectPinBefore(pin, network_);
|
||||
if (thru == first_pt)
|
||||
recordExceptionEdges(exception, thru->edges(),
|
||||
first_thru_edge_exceptions_);
|
||||
ExceptionThruSeq *thrus = exception->thrus();
|
||||
if (thrus) {
|
||||
for (ExceptionThru *thru : *exception->thrus()) {
|
||||
if (thru->edges()) {
|
||||
thru->disconnectPinBefore(pin, network_);
|
||||
if (thru == first_pt)
|
||||
recordExceptionEdges(exception, thru->edges(),
|
||||
first_thru_edge_exceptions_);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -433,12 +433,12 @@ PrevPathVisitor::unfilteredTag(const Tag *tag) const
|
|||
}
|
||||
}
|
||||
return search_->findTag(tag->transition(),
|
||||
corners_->findPathAnalysisPt(tag->pathAPIndex()),
|
||||
tag->clkInfo(),
|
||||
tag->isClock(),
|
||||
tag->inputDelay(),
|
||||
tag->isSegmentStart(),
|
||||
unfiltered_states, true);
|
||||
corners_->findPathAnalysisPt(tag->pathAPIndex()),
|
||||
tag->clkInfo(),
|
||||
tag->isClock(),
|
||||
tag->inputDelay(),
|
||||
tag->isSegmentStart(),
|
||||
unfiltered_states, true);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
|
|
|||
Loading…
Reference in New Issue