mirror of
https://github.com/verilator/verilator.git
synced 2026-09-02 18:58:51 +02:00
Add error on misused genvar (#408).
This commit is contained in:
@@ -50,6 +50,7 @@ class LinkResolveVisitor final : public VNVisitor {
|
||||
AstNodeFTask* m_ftaskp = nullptr; // Function or task we're inside
|
||||
AstNodeCoverOrAssert* m_assertp = nullptr; // Current assertion
|
||||
int m_senitemCvtNum = 0; // Temporary signal counter
|
||||
bool m_underGenFor = false; // Under GenFor
|
||||
bool m_underGenerate = false; // Under GenFor/GenIf
|
||||
|
||||
// VISITs
|
||||
@@ -105,6 +106,12 @@ class LinkResolveVisitor final : public VNVisitor {
|
||||
void visit(AstNodeVarRef* nodep) override {
|
||||
// VarRef: Resolve its reference
|
||||
if (nodep->varp()) nodep->varp()->usedParam(true);
|
||||
// TODO should look for where genvar is valid, but for now catch
|
||||
// just gross errors of using genvar outside any generate
|
||||
if (nodep->varp() && nodep->varp()->isGenVar() && !m_underGenFor) {
|
||||
nodep->v3error("Genvar " << nodep->prettyNameQ()
|
||||
<< " used outside generate for loop (IEEE 1800-2024 27.4)");
|
||||
}
|
||||
iterateChildren(nodep);
|
||||
}
|
||||
|
||||
@@ -450,7 +457,9 @@ class LinkResolveVisitor final : public VNVisitor {
|
||||
// We keep Modport's themselves around for XML dump purposes
|
||||
|
||||
void visit(AstGenFor* nodep) override {
|
||||
VL_RESTORER(m_underGenFor);
|
||||
VL_RESTORER(m_underGenerate);
|
||||
m_underGenFor = true;
|
||||
m_underGenerate = true;
|
||||
iterateChildren(nodep);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user