diff --git a/network/Network.i b/network/Network.i index e0f59b6b..2d63b9e2 100644 --- a/network/Network.i +++ b/network/Network.i @@ -563,6 +563,20 @@ net_load_pins(Net *net) return pins; } +PinSet +net_pins(Net *net) +{ + Network *network = Sta::sta()->ensureLinked(); + PinSet pins(network); + NetConnectedPinIterator *pin_iter = network->connectedPinIterator(net); + while (pin_iter->hasNext()) { + const Pin *pin = pin_iter->next(); + pins.insert(pin); + } + delete pin_iter; + return pins; +} + const char * pin_location(const Pin *pin) { diff --git a/search/Sta.cc b/search/Sta.cc index 12685f9b..5ae35760 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -4960,9 +4960,7 @@ Sta::findFaninPins(PinSeq *to, ensureLevelized(); PinSet fanin(network_); FaninSrchPred pred(thru_disabled, thru_constants, this); - PinSeq::Iterator to_iter(to); - while (to_iter.hasNext()) { - const Pin *pin = to_iter.next(); + for (const Pin *pin : *to) { if (network_->isHierarchical(pin)) { EdgesThruHierPinIterator edge_iter(pin, network_, graph_); while (edge_iter.hasNext()) { diff --git a/tcl/Sta.tcl b/tcl/Sta.tcl index 76fd474f..60c9cc2b 100644 --- a/tcl/Sta.tcl +++ b/tcl/Sta.tcl @@ -47,7 +47,12 @@ proc get_fanin { args } { } parse_port_pin_net_arg $keys(-to) pins nets foreach net $nets { - lappend pins [net_driver_pins $net] + set net_pins [net_pins $net] + if { $net_pins != {} } { + lappend pins $net_pins + } else { + sta_warn 541 "No load pins connected to net [get_full_name $net]." + } } set flat [info exists flags(-flat)] set only_insts [info exists flags(-only_cells)]