Warn that events can not be user task or function arguments.
This patch makes events passed as arguments to user tasks or functions a compile time error with an appropriate error message.
This commit is contained in:
parent
43f41572cb
commit
4d57ede0e5
|
|
@ -1488,6 +1488,12 @@ NetExpr* PECallFunction::elaborate_expr(Design*des, NetScope*scope,
|
||||||
def->port(idx)->data_type(),
|
def->port(idx)->data_type(),
|
||||||
def->port(idx)->vector_width(),
|
def->port(idx)->vector_width(),
|
||||||
tmp);
|
tmp);
|
||||||
|
if (NetEEvent*evt = dynamic_cast<NetEEvent*> (parms[idx])) {
|
||||||
|
cerr << evt->get_fileline() << ": error: An event '"
|
||||||
|
<< evt->event()->name() << "' can not be a user "
|
||||||
|
"function argument." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
}
|
||||||
if (debug_elaborate)
|
if (debug_elaborate)
|
||||||
cerr << get_fileline() << ": debug:"
|
cerr << get_fileline() << ": debug:"
|
||||||
<< " function " << path_
|
<< " function " << path_
|
||||||
|
|
|
||||||
|
|
@ -2644,6 +2644,13 @@ NetProc* PCallTask::elaborate_usr(Design*des, NetScope*scope) const
|
||||||
ivl_variable_type_t lv_type = lv->expr_type();
|
ivl_variable_type_t lv_type = lv->expr_type();
|
||||||
|
|
||||||
NetExpr*rv = elaborate_rval_expr(des, scope, lv_type, wid, parms_[idx]);
|
NetExpr*rv = elaborate_rval_expr(des, scope, lv_type, wid, parms_[idx]);
|
||||||
|
if (NetEEvent*evt = dynamic_cast<NetEEvent*> (rv)) {
|
||||||
|
cerr << evt->get_fileline() << ": error: An event '"
|
||||||
|
<< evt->event()->name() << "' can not be a user "
|
||||||
|
"task argument." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (wid > rv->expr_width()) {
|
if (wid > rv->expr_width()) {
|
||||||
rv->set_width(wid);
|
rv->set_width(wid);
|
||||||
rv = pad_to_width(rv, wid, *this);
|
rv = pad_to_width(rv, wid, *this);
|
||||||
|
|
|
||||||
|
|
@ -1369,6 +1369,10 @@ NetNet* NetEUFunc::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
||||||
/* Synthesize the arguments. */
|
/* Synthesize the arguments. */
|
||||||
bool errors = false;
|
bool errors = false;
|
||||||
for (unsigned idx = 0; idx < eparms.count(); idx += 1) {
|
for (unsigned idx = 0; idx < eparms.count(); idx += 1) {
|
||||||
|
if (dynamic_cast<NetEEvent*> (parms_[idx])) {
|
||||||
|
errors = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
NetNet*tmp = parms_[idx]->synthesize(des, scope, root);
|
NetNet*tmp = parms_[idx]->synthesize(des, scope, root);
|
||||||
if (tmp == 0) {
|
if (tmp == 0) {
|
||||||
cerr << get_fileline() << ": error: Unable to synthesize "
|
cerr << get_fileline() << ": error: Unable to synthesize "
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue