From 7f0c6b9c210f946aa81d4b4ebefab5ffddc35772 Mon Sep 17 00:00:00 2001 From: Stephen Williams Date: Tue, 10 Jun 2008 13:25:40 -0700 Subject: [PATCH] Fix access to deleted memory. When parameters are replaced, the expression that is replaced is deleted so make sure the pointer in the map is properly updated. Also, make sure the defparam expression itself is not deleted because it is used to print messages, such as design dumps. --- net_design.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/net_design.cc b/net_design.cc index 05cd2cfb8..03929d6cd 100644 --- a/net_design.cc +++ b/net_design.cc @@ -227,6 +227,10 @@ void NetScope::run_defparams(Design*des) continue; } + // Once placed in the parameter map, the expression may + // be deleted when evaluated, so give it a copy of this + // expression, not the original. + val = val->dup_expr(); bool flag = targ_scope->replace_parameter(perm_name, val); if (! flag) { cerr << val->get_fileline() << ": warning: parameter " @@ -348,7 +352,7 @@ void NetScope::evaluate_parameter_logic_(Design*des, param_ref_t cur) tmp.has_sign ( (*cur).second.signed_flag ); delete val; val = new NetEConst(tmp); - expr = val; + (*cur).second.expr = expr = val; } }