forked from github/verilator
Support for-loop increments with commas.
This commit is contained in:
parent
af197f2ceb
commit
0b09636c58
4
Changes
4
Changes
@ -5,12 +5,14 @@ The contributors that suggested a given feature are shown in []. Thanks!
|
|||||||
|
|
||||||
* Verilator 4.037 devel
|
* Verilator 4.037 devel
|
||||||
|
|
||||||
*** Support VPI access to parameters and localparam. [Ludwig Rogiers]
|
*** Support VPI access to parameters and localparam. [Ludwig Rogiers]
|
||||||
|
|
||||||
**** Add new UNSUPPORTED error code to replace most previous Unsupported: messages.
|
**** Add new UNSUPPORTED error code to replace most previous Unsupported: messages.
|
||||||
|
|
||||||
**** With --bbox-unsup continue parsing on many (not all) UVM constructs.
|
**** With --bbox-unsup continue parsing on many (not all) UVM constructs.
|
||||||
|
|
||||||
|
**** Support for-loop increments with commas.
|
||||||
|
|
||||||
**** Fix to flush FST trace on termination due to $stop or assertion failure.
|
**** Fix to flush FST trace on termination due to $stop or assertion failure.
|
||||||
|
|
||||||
**** Fix part select error when multipling by power-of-two (#2413). [Conor McCullough]
|
**** Fix part select error when multipling by power-of-two (#2413). [Conor McCullough]
|
||||||
|
@ -2027,6 +2027,12 @@ private:
|
|||||||
// Generally resolved during Primay, but might be at param time under AstUnlinkedRef
|
// Generally resolved during Primay, but might be at param time under AstUnlinkedRef
|
||||||
UASSERT_OBJ(m_statep->forPrimary() || m_statep->forPrearray(), nodep,
|
UASSERT_OBJ(m_statep->forPrimary() || m_statep->forPrearray(), nodep,
|
||||||
"ParseRefs should no longer exist");
|
"ParseRefs should no longer exist");
|
||||||
|
if (nodep->name() == "this") {
|
||||||
|
nodep->v3warn(E_UNSUPPORTED, "Unsupported: this");
|
||||||
|
}
|
||||||
|
else if (nodep->name() == "super") {
|
||||||
|
nodep->v3warn(E_UNSUPPORTED, "Unsupported: super");
|
||||||
|
}
|
||||||
DotStates lastStates = m_ds;
|
DotStates lastStates = m_ds;
|
||||||
bool start = (m_ds.m_dotPos == DP_NONE); // Save, as m_dotp will be changed
|
bool start = (m_ds.m_dotPos == DP_NONE); // Save, as m_dotp will be changed
|
||||||
if (start) {
|
if (start) {
|
||||||
|
@ -113,7 +113,7 @@ private:
|
|||||||
// Assignment of next value check
|
// Assignment of next value check
|
||||||
AstAssign* incAssp = VN_CAST(incp, Assign);
|
AstAssign* incAssp = VN_CAST(incp, Assign);
|
||||||
if (!incAssp) return cantUnroll(nodep, "no increment assignment");
|
if (!incAssp) return cantUnroll(nodep, "no increment assignment");
|
||||||
UASSERT_OBJ(!incAssp->nextp(), nodep, "increment shouldn't be a list");
|
if (incAssp->nextp()) return cantUnroll(nodep, "multiple increments");
|
||||||
|
|
||||||
m_forVarp = VN_CAST(initAssp->lhsp(), VarRef)->varp();
|
m_forVarp = VN_CAST(initAssp->lhsp(), VarRef)->varp();
|
||||||
m_forVscp = VN_CAST(initAssp->lhsp(), VarRef)->varScopep();
|
m_forVscp = VN_CAST(initAssp->lhsp(), VarRef)->varScopep();
|
||||||
|
@ -3376,7 +3376,7 @@ for_stepE<nodep>: // IEEE: for_step + empty
|
|||||||
|
|
||||||
for_step<nodep>: // IEEE: for_step
|
for_step<nodep>: // IEEE: for_step
|
||||||
for_step_assignment { $$ = $1; }
|
for_step_assignment { $$ = $1; }
|
||||||
| for_step ',' for_step_assignment { $$ = $1; BBUNSUP($2, "Unsupported: for loop step after the first comma"); }
|
| for_step ',' for_step_assignment { $$ = AstNode::addNextNull($1, $3); }
|
||||||
;
|
;
|
||||||
|
|
||||||
for_step_assignment<nodep>: // ==IEEE: for_step_assignment
|
for_step_assignment<nodep>: // ==IEEE: for_step_assignment
|
||||||
|
@ -1,18 +1,3 @@
|
|||||||
%Error-UNSUPPORTED: t/t_for_comma_bad.v:14:21: Unsupported: for loop step after the first comma
|
|
||||||
14 | for (; ; a=a+1, b=b+1) ;
|
|
||||||
| ^
|
|
||||||
%Error-UNSUPPORTED: t/t_for_comma_bad.v:17:24: Unsupported: for loop step after the first comma
|
|
||||||
17 | for (; a<1; a=a+1, b=b+1) ;
|
|
||||||
| ^
|
|
||||||
%Error-UNSUPPORTED: t/t_for_comma_bad.v:20:27: Unsupported: for loop step after the first comma
|
|
||||||
20 | for (a=0; a<1; a=a+1, b=b+1) ;
|
|
||||||
| ^
|
|
||||||
%Error-UNSUPPORTED: t/t_for_comma_bad.v:23:35: Unsupported: for loop step after the first comma
|
|
||||||
23 | for (integer a=0; a<1; a=a+1, b=b+1) ;
|
|
||||||
| ^
|
|
||||||
%Error-UNSUPPORTED: t/t_for_comma_bad.v:26:39: Unsupported: for loop step after the first comma
|
|
||||||
26 | for (var integer a=0; a<1; a=a+1, b=b+1) ;
|
|
||||||
| ^
|
|
||||||
%Error-UNSUPPORTED: t/t_for_comma_bad.v:27:23: Unsupported: for loop initialization after the first comma
|
%Error-UNSUPPORTED: t/t_for_comma_bad.v:27:23: Unsupported: for loop initialization after the first comma
|
||||||
27 | for (integer a=0, integer b=0; a<1; ) ;
|
27 | for (integer a=0, integer b=0; a<1; ) ;
|
||||||
| ^
|
| ^
|
||||||
@ -22,7 +7,4 @@
|
|||||||
%Error-UNSUPPORTED: t/t_for_comma_bad.v:29:23: Unsupported: for loop initialization after the first comma
|
%Error-UNSUPPORTED: t/t_for_comma_bad.v:29:23: Unsupported: for loop initialization after the first comma
|
||||||
29 | for (integer a=0, integer b=0; a<1; a=a+1, b=b+1) ;
|
29 | for (integer a=0, integer b=0; a<1; a=a+1, b=b+1) ;
|
||||||
| ^
|
| ^
|
||||||
%Error-UNSUPPORTED: t/t_for_comma_bad.v:29:48: Unsupported: for loop step after the first comma
|
|
||||||
29 | for (integer a=0, integer b=0; a<1; a=a+1, b=b+1) ;
|
|
||||||
| ^
|
|
||||||
%Error: Exiting due to
|
%Error: Exiting due to
|
||||||
|
@ -101,6 +101,13 @@ module t (/*AUTOARG*/
|
|||||||
if (i != 20) $stop;
|
if (i != 20) $stop;
|
||||||
for (i=30; i<10; i++) ;
|
for (i=30; i<10; i++) ;
|
||||||
if (i != 30) $stop;
|
if (i != 30) $stop;
|
||||||
|
// Comma
|
||||||
|
loops = 0;
|
||||||
|
for (i=0; i<20; ++i, ++loops);
|
||||||
|
if (loops !== 20) $stop;
|
||||||
|
loops = 0;
|
||||||
|
for (i=0; i<20; ++loops, ++i);
|
||||||
|
if (loops !== 20) $stop;
|
||||||
//
|
//
|
||||||
$write("*-* All Finished *-*\n");
|
$write("*-* All Finished *-*\n");
|
||||||
$finish;
|
$finish;
|
||||||
|
Loading…
Reference in New Issue
Block a user