vpr: Fix segfault when reporting errors with no timing graph
diff --git a/vpr/src/base/vpr_tatum_error.cpp b/vpr/src/base/vpr_tatum_error.cpp
index 61504da..37dfaa4 100644
--- a/vpr/src/base/vpr_tatum_error.cpp
+++ b/vpr/src/base/vpr_tatum_error.cpp
@@ -45,24 +45,27 @@
}
if (error.edge) {
- tatum::NodeId src_node = timing_ctx.graph->edge_src_node(error.edge);
- tatum::NodeId sink_node = timing_ctx.graph->edge_sink_node(error.edge);
- AtomPinId src_pin = atom_ctx.lookup.tnode_atom_pin(src_node);
- AtomPinId sink_pin = atom_ctx.lookup.tnode_atom_pin(sink_node);
+ if (timing_ctx.graph) {
+ tatum::NodeId src_node = timing_ctx.graph->edge_src_node(error.edge);
+ tatum::NodeId sink_node = timing_ctx.graph->edge_sink_node(error.edge);
- if (src_pin && sink_pin) {
- msg += "Between netlist pins ";
+ AtomPinId src_pin = atom_ctx.lookup.tnode_atom_pin(src_node);
+ AtomPinId sink_pin = atom_ctx.lookup.tnode_atom_pin(sink_node);
- msg += "'" + atom_ctx.nlist.pin_name(src_pin) + "' -> '" + atom_ctx.nlist.pin_name(sink_pin) + "'";
+ if (src_pin && sink_pin) {
+ msg += "Between netlist pins ";
- AtomNetId src_net = atom_ctx.nlist.pin_net(src_pin);
- AtomNetId sink_net = atom_ctx.nlist.pin_net(sink_pin);
- if (src_net && src_net == sink_net) {
- msg += " via net '" + atom_ctx.nlist.net_name(src_net) + "'";
+ msg += "'" + atom_ctx.nlist.pin_name(src_pin) + "' -> '" + atom_ctx.nlist.pin_name(sink_pin) + "'";
+
+ AtomNetId src_net = atom_ctx.nlist.pin_net(src_pin);
+ AtomNetId sink_net = atom_ctx.nlist.pin_net(sink_pin);
+ if (src_net && src_net == sink_net) {
+ msg += " via net '" + atom_ctx.nlist.net_name(src_net) + "'";
+ }
+
+ msg += ", ";
}
-
- msg += ", ";
}
msg += "Timing Graph Edge: " + std::to_string(size_t(error.edge));