From 59ee700634585d93211b0facf0bb1d9bda708d4e Mon Sep 17 00:00:00 2001 From: Stephen Williams Date: Tue, 15 Jan 2008 19:39:53 -0800 Subject: [PATCH] Net arrays that are addressed are not dangling The nodangle functor tries to delete NetNet objects that are not used. But NetNet objects that are addressed by a NetArrayDq should never be dangling. So make sure the NetArrayDq marks the target NetNet correctly. --- design_dump.cc | 1 + netlist.cc | 3 +++ 2 files changed, 4 insertions(+) diff --git a/design_dump.cc b/design_dump.cc index b9ce6ad04..d0213725b 100644 --- a/design_dump.cc +++ b/design_dump.cc @@ -1217,6 +1217,7 @@ void Design::dump(ostream&o) const if (nodes_) { NetNode*cur = nodes_->node_next_; do { + assert(cur); cur->dump_node(o, 0); cur = cur->node_next_; } while (cur != nodes_->node_next_); diff --git a/netlist.cc b/netlist.cc index 00c1dae11..a403a3f1b 100644 --- a/netlist.cc +++ b/netlist.cc @@ -1132,6 +1132,9 @@ NetArrayDq::NetArrayDq(NetScope*s, perm_string n, NetNet*mem, unsigned awid) pin(0).set_name(perm_string::literal("Result"), 0); pin(1).set_dir(Link::INPUT); pin(1).set_name(perm_string::literal("Address"), 0); + // Increment the expression reference count for the target + // memory so that it is not deleted underneath me. + mem->incr_eref(); } NetArrayDq::~NetArrayDq()