From f4048cdf3efed83ccdfd79db3391a4e49df75593 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Tue, 24 Mar 2026 10:31:24 -0700 Subject: [PATCH] read_saif ref missing instance resolves #406 Signed-off-by: James Cherry --- power/SaifReader.cc | 4 +++- test/read_saif_null_instance.lib | 14 ++++++++++++++ test/read_saif_null_instance.ok | 1 + test/read_saif_null_instance.saif | 16 ++++++++++++++++ test/read_saif_null_instance.tcl | 5 +++++ test/read_saif_null_instance.v | 2 ++ test/regression_vars.tcl | 1 + 7 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 test/read_saif_null_instance.lib create mode 100644 test/read_saif_null_instance.ok create mode 100644 test/read_saif_null_instance.saif create mode 100644 test/read_saif_null_instance.tcl create mode 100644 test/read_saif_null_instance.v diff --git a/power/SaifReader.cc b/power/SaifReader.cc index c06cb512..72a35926 100644 --- a/power/SaifReader.cc +++ b/power/SaifReader.cc @@ -139,7 +139,9 @@ SaifReader::instancePush(const char *instance_name) else { // Inside annotation scope. Instance *parent = path_.empty() ? sdc_network_->topInstance() : path_.back(); - Instance *child = sdc_network_->findChild(parent, instance_name); + Instance *child = parent + ? sdc_network_->findChild(parent, instance_name) + : nullptr; path_.push_back(child); } stringDelete(instance_name); diff --git a/test/read_saif_null_instance.lib b/test/read_saif_null_instance.lib new file mode 100644 index 00000000..da8ae595 --- /dev/null +++ b/test/read_saif_null_instance.lib @@ -0,0 +1,14 @@ +library(min) { + technology(cmos); + time_unit : "1ns"; + voltage_unit : "1V"; + current_unit : "1mA"; + capacitive_load_unit(1, pf); + cell(BUF) { + pin(A) { direction : input; } + pin(Y) { direction : output; + function : "A"; + timing() { related_pin : "A"; } + } + } +} diff --git a/test/read_saif_null_instance.ok b/test/read_saif_null_instance.ok new file mode 100644 index 00000000..42f6c7a4 --- /dev/null +++ b/test/read_saif_null_instance.ok @@ -0,0 +1 @@ +Annotated 0 pin activities. diff --git a/test/read_saif_null_instance.saif b/test/read_saif_null_instance.saif new file mode 100644 index 00000000..dcaff257 --- /dev/null +++ b/test/read_saif_null_instance.saif @@ -0,0 +1,16 @@ +(SAIFILE +(SAIFVERSION "2.0") +(DIRECTION "backward") +(DIVIDER / ) +(TIMESCALE 1ns) +(DURATION 1000) + (INSTANCE TOP + (INSTANCE child + (INSTANCE grandchild + (NET + (clk (T0 500) (T1 500) (TZ 0) (TX 0) (TB 0) (TC 1000)) + ) + ) + ) + ) +) diff --git a/test/read_saif_null_instance.tcl b/test/read_saif_null_instance.tcl new file mode 100644 index 00000000..59f4d5a3 --- /dev/null +++ b/test/read_saif_null_instance.tcl @@ -0,0 +1,5 @@ +# read_saif references missing instance +read_liberty read_saif_null_instance.lib +read_verilog read_saif_null_instance.v +link_design top +read_saif -scope TOP read_saif_null_instance.saif diff --git a/test/read_saif_null_instance.v b/test/read_saif_null_instance.v new file mode 100644 index 00000000..2f1a84ac --- /dev/null +++ b/test/read_saif_null_instance.v @@ -0,0 +1,2 @@ +module top(input clk); +endmodule diff --git a/test/regression_vars.tcl b/test/regression_vars.tcl index edc16ee0..9b6af334 100644 --- a/test/regression_vars.tcl +++ b/test/regression_vars.tcl @@ -158,6 +158,7 @@ record_public_tests { path_group_names power_json prima3 + read_saif_null_instance report_checks_sorted report_checks_src_attr report_json1