diff --git a/elab_net.cc b/elab_net.cc index 7aad33ca2..1eb421ef6 100644 --- a/elab_net.cc +++ b/elab_net.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: elab_net.cc,v 1.43 2000/08/01 22:44:26 steve Exp $" +#ident "$Id: elab_net.cc,v 1.44 2000/08/18 04:38:57 steve Exp $" #endif # include "PExpr.h" @@ -1216,6 +1216,36 @@ NetNet* PEIdent::elaborate_port(Design*des, NetScope*scope) const return 0; } + switch (sig->port_type()) { + case NetNet::PINPUT: + case NetNet::POUTPUT: + case NetNet::PINOUT: + break; + + /* If the name matches, but the signal is not a port, + then the user declared the object but there is no + matching input/output/inout declaration. */ + + case NetNet::NOT_A_PORT: + cerr << get_line() << ": error: signal " << text_ << " in" + << " module " << scope->name() << " is not a port." << endl; + cerr << get_line() << ": : Are you missing an input/" + << "output/inout declaration?" << endl; + des->errors += 1; + return 0; + + /* This should not happen. A PWire can only become + PIMPLICIT if this is a udp reg port, and the make_udp + function should turn it into an output.... I think. */ + + case NetNet::PIMPLICIT: + cerr << get_line() << ": internal error: signal " << text_ + << " in module " << scope->name() << " is left as " + << "port type PIMPLICIT." << endl; + des->errors += 1; + return 0; + } + if (msb_ && lsb_) { /* Detect a part select. Evaluate the bits and elaborate @@ -1632,6 +1662,9 @@ NetNet* PEUnary::elaborate_net(Design*des, const string&path, /* * $Log: elab_net.cc,v $ + * Revision 1.44 2000/08/18 04:38:57 steve + * Proper error messages when port direction is missing. + * * Revision 1.43 2000/08/01 22:44:26 steve * Extend x or z that is top bit of a constant. * diff --git a/elaborate.cc b/elaborate.cc index 9c3544fc7..109fec933 100644 --- a/elaborate.cc +++ b/elaborate.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: elaborate.cc,v 1.182 2000/07/30 18:25:43 steve Exp $" +#ident "$Id: elaborate.cc,v 1.183 2000/08/18 04:38:57 steve Exp $" #endif /* @@ -435,13 +435,9 @@ void PGModule::elaborate_mod_(Design*des, Module*rmod, const string&path) const for (unsigned ldx = 0 ; ldx < mport.count() ; ldx += 1) { PEIdent*pport = mport[ldx]; prts[ldx] = pport->elaborate_port(des, my_scope); - if (prts[ldx] == 0) { - cerr << pport->get_line() << ": internal error: " - << "Failed to elaborate port expr: " - << *pport << endl; - des->errors += 1; + if (prts[ldx] == 0) continue; - } + assert(prts[ldx]); prts_pin_count += prts[ldx]->pin_count(); } @@ -2296,8 +2292,6 @@ bool Module::elaborate(Design*des, NetScope*scope) const NetProc*cur = (*st)->statement()->elaborate(des, path); if (cur == 0) { - cerr << (*st)->get_line() << ": error: Elaboration " - "failed for this process." << endl; result_flag = false; continue; } @@ -2390,6 +2384,9 @@ Design* elaborate(const map&modules, /* * $Log: elaborate.cc,v $ + * Revision 1.183 2000/08/18 04:38:57 steve + * Proper error messages when port direction is missing. + * * Revision 1.182 2000/07/30 18:25:43 steve * Rearrange task and function elaboration so that the * NetTaskDef and NetFuncDef functions are created during