diff --git a/elab_expr.cc b/elab_expr.cc index 2615398129..89698a49a6 100644 --- a/elab_expr.cc +++ b/elab_expr.cc @@ -1488,6 +1488,12 @@ NetExpr* PECallFunction::elaborate_expr(Design*des, NetScope*scope, def->port(idx)->data_type(), def->port(idx)->vector_width(), tmp); + if (NetEEvent*evt = dynamic_cast (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) cerr << get_fileline() << ": debug:" << " function " << path_ diff --git a/elaborate.cc b/elaborate.cc index 1ef37368a5..ba18d812e2 100644 --- a/elaborate.cc +++ b/elaborate.cc @@ -2644,6 +2644,13 @@ NetProc* PCallTask::elaborate_usr(Design*des, NetScope*scope) const ivl_variable_type_t lv_type = lv->expr_type(); NetExpr*rv = elaborate_rval_expr(des, scope, lv_type, wid, parms_[idx]); + if (NetEEvent*evt = dynamic_cast (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()) { rv->set_width(wid); rv = pad_to_width(rv, wid, *this); diff --git a/expr_synth.cc b/expr_synth.cc index 6e4a7f8427..444c00bb32 100644 --- a/expr_synth.cc +++ b/expr_synth.cc @@ -1369,6 +1369,10 @@ NetNet* NetEUFunc::synthesize(Design*des, NetScope*scope, NetExpr*root) /* Synthesize the arguments. */ bool errors = false; for (unsigned idx = 0; idx < eparms.count(); idx += 1) { + if (dynamic_cast (parms_[idx])) { + errors = true; + continue; + } NetNet*tmp = parms_[idx]->synthesize(des, scope, root); if (tmp == 0) { cerr << get_fileline() << ": error: Unable to synthesize "