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.
This commit is contained in:
Stephen Williams 2008-06-10 13:25:40 -07:00
parent 6f61cf2e4e
commit 7f0c6b9c21
1 changed files with 5 additions and 1 deletions

View File

@ -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;
}
}