diff --git a/elab_expr.cc b/elab_expr.cc index f47ec86fb..844c1e89c 100644 --- a/elab_expr.cc +++ b/elab_expr.cc @@ -6594,14 +6594,21 @@ NetExpr* PENewClass::elaborate_expr_constructor_(Design*des, NetScope*scope, NetExpr* PENewClass::elaborate_expr(Design*des, NetScope*scope, ivl_type_t ntype, unsigned flags) const { - NetExpr*obj = new NetENew(ntype); - obj->set_line(*this); - // Find the constructor for the class. If there is no // constructor then the result of this expression is the // allocation alone. const netclass_t*ctype = dynamic_cast (ntype); + if (!ctype) { + cerr << get_fileline() << ": error: class new not allowed here. " + << "Left-hand side is not of class type." << endl; + des->errors++; + return 0; + } + + NetExpr*obj = new NetENew(ntype); + obj->set_line(*this); + obj = elaborate_expr_constructor_(des, scope, ctype, obj, flags); return obj; }