diff --git a/Changes b/Changes index 26cdaf5d8..773afdf8c 100644 --- a/Changes +++ b/Changes @@ -60,6 +60,7 @@ Verilator 5.045 devel * Fix type assignments for arrays of parameter types (#6955). [Todd Strader] * Fix accessing non-rand struct member in constraints (#6960). [Pawel Kojma, Antmicro Ltd.] * Fix associative array of events causes C++ compile error (#6962). +* Fix non-inlined function return value clearing (#6982). Verilator 5.044 2026-01-01 diff --git a/src/V3AstNodeOther.h b/src/V3AstNodeOther.h index f107d0aea..e6f9767ef 100644 --- a/src/V3AstNodeOther.h +++ b/src/V3AstNodeOther.h @@ -1911,6 +1911,7 @@ class AstVar final : public AstNode { bool m_isDpiOpenArray : 1; // DPI import open array bool m_isHideLocal : 1; // Verilog local bool m_isHideProtected : 1; // Verilog protected + bool m_noCReset : 1; // Do not do automated CReset creation bool m_noReset : 1; // Do not do automated reset/randomization bool m_noSubst : 1; // Do not substitute out references bool m_substConstOnly : 1; // Only substitute if constant @@ -1963,6 +1964,7 @@ class AstVar final : public AstNode { m_isDpiOpenArray = false; m_isHideLocal = false; m_isHideProtected = false; + m_noCReset = false; m_noReset = false; m_noSubst = false; m_substConstOnly = false; @@ -2118,6 +2120,8 @@ public: void isHideLocal(bool flag) { m_isHideLocal = flag; } bool isHideProtected() const { return m_isHideProtected; } void isHideProtected(bool flag) { m_isHideProtected = flag; } + void noCReset(bool flag) { m_noCReset = flag; } + bool noCReset() const { return m_noCReset; } void noReset(bool flag) { m_noReset = flag; } bool noReset() const { return m_noReset; } void noSubst(bool flag) { m_noSubst = flag; } @@ -2264,7 +2268,7 @@ public: } bool needsCReset() const { return !isIfaceParent() && !isIfaceRef() && !noReset() && !isParam() && !isStatementTemp() - && !(basicp() && basicp()->isEvent()); + && !noCReset() && !(basicp() && basicp()->isEvent()); } static AstVar* scVarRecurse(AstNode* nodep); }; diff --git a/src/V3AstNodes.cpp b/src/V3AstNodes.cpp index a28a45209..a9eb62401 100644 --- a/src/V3AstNodes.cpp +++ b/src/V3AstNodes.cpp @@ -2846,6 +2846,7 @@ void AstVar::dump(std::ostream& str) const { if (isLatched()) str << " [LATCHED]"; if (isUsedLoopIdx()) str << " [LOOPIDX]"; if (rand().isRandomizable()) str << " [" << rand() << "]"; + if (noCReset()) str << " [!CRST]"; if (noReset()) str << " [!RST]"; if (attrIsolateAssign()) str << " [aISO]"; if (attrFileDescr()) str << " [aFD]"; @@ -2873,6 +2874,7 @@ void AstVar::dumpJson(std::ostream& str) const { dumpJsonBoolFunc(str, isSigPublic); dumpJsonBoolFunc(str, isLatched); dumpJsonBoolFunc(str, isUsedLoopIdx); + dumpJsonBoolFuncIf(str, noCReset); dumpJsonBoolFunc(str, noReset); dumpJsonBoolFunc(str, attrIsolateAssign); dumpJsonBoolFunc(str, attrFileDescr); diff --git a/src/V3LinkResolve.cpp b/src/V3LinkResolve.cpp index 9c25a3298..a00fe025e 100644 --- a/src/V3LinkResolve.cpp +++ b/src/V3LinkResolve.cpp @@ -174,6 +174,20 @@ class LinkResolveVisitor final : public VNVisitor { } VL_RESTORER(m_ftaskp); m_ftaskp = nodep; + + if (nodep->lifetime().isAutomatic() && nodep->fvarp()) { + // Must clear automatic function output variable on function invocation + AstVar* const fvarp = VN_AS(nodep->fvarp(), Var); + AstNode* const crstp = new AstAssign{ + fvarp->fileline(), new AstVarRef{fvarp->fileline(), fvarp, VAccess::WRITE}, + new AstCReset{fvarp->fileline(), fvarp, false}}; + fvarp->noCReset(true); + if (nodep->stmtsp()) { + nodep->stmtsp()->addHereThisAsNext(crstp); + } else { + nodep->addStmtsp(crstp); + } + } iterateChildren(nodep); if (nodep->dpiExport()) nodep->scopeNamep(new AstScopeName{nodep->fileline(), false}); } diff --git a/src/V3Simulate.h b/src/V3Simulate.h index 8ae79214f..27aec9c54 100644 --- a/src/V3Simulate.h +++ b/src/V3Simulate.h @@ -929,6 +929,11 @@ private: m_anyAssignComb = true; } + if (VN_IS(nodep->rhsp(), CReset)) { + initVar(VN_AS(nodep->lhsp(), VarRef)->varp()); + return; + } + iterateAndNextConstNull(nodep->rhsp()); // Value to assign handleAssignRecurse(nodep, nodep->lhsp(), nodep->rhsp()); // UINFO(9, "set " << fetchConst(nodep->rhsp())->num().ascii() << " for assign " @@ -1215,7 +1220,8 @@ private: initVar(VN_CAST(funcp->fvarp(), Var)); // Clear other automatic variables funcp->foreach([this](AstVar* varp) { - if (varp->lifetime().isAutomatic() && !varp->isIO()) initVar(varp); + if (varp->lifetime().isAutomatic() && (!varp->isIO() || varp->isFuncReturn())) + initVar(varp); }); } diff --git a/src/V3Task.cpp b/src/V3Task.cpp index 540a1e304..dfa248f84 100644 --- a/src/V3Task.cpp +++ b/src/V3Task.cpp @@ -1231,6 +1231,7 @@ class TaskVisitor final : public VNVisitor { unlinkAndClone(nodep, portp, false); rtnvarp = portp; rtnvarp->funcLocal(true); + rtnvarp->noCReset(true); // As made for port in V3LinkResolve rtnvarp->name(rtnvarp->name() + "__Vfuncrtn"); // Avoid conflict with DPI function name if (nodep->dpiImport() || nodep->dpiExport()) rtnvarp->protect(false); diff --git a/src/V3Width.cpp b/src/V3Width.cpp index 480020287..499f17ec7 100644 --- a/src/V3Width.cpp +++ b/src/V3Width.cpp @@ -5394,6 +5394,7 @@ class WidthVisitor final : public VNVisitor { static void checkEventAssignment(const AstNodeAssign* const asgnp) { string unsupEvtAsgn; if (!usesDynamicScheduler(asgnp->lhsp())) unsupEvtAsgn = "to"; + if (VN_IS(asgnp->rhsp(), CReset)) return; if (asgnp->rhsp()->dtypep()->isEvent() && !usesDynamicScheduler(asgnp->rhsp())) { unsupEvtAsgn += (unsupEvtAsgn.empty() ? "from" : " and from"); } @@ -6046,6 +6047,10 @@ class WidthVisitor final : public VNVisitor { nodep->text(newFormat); UINFO(9, " Display out " << nodep->text()); } + void visit(AstCReset* nodep) override { + assertAtExpr(nodep); + nodep->dtypeFrom(m_vup->dtypep()); + } void visit(AstCReturn* nodep) override { nodep->v3fatalSrc("Should not exist yet"); } void visit(AstConstraintRef* nodep) override { userIterateChildren(nodep, nullptr); } void visit(AstDisplay* nodep) override { diff --git a/test_regress/t/t_constraint_json_only.out b/test_regress/t/t_constraint_json_only.out index 701929e88..8bd38aab7 100644 --- a/test_regress/t/t_constraint_json_only.out +++ b/test_regress/t/t_constraint_json_only.out @@ -29,57 +29,64 @@ {"type":"VAR","name":"state","addr":"(Z)","loc":"d,17:11,17:16","dtypep":"(M)","origName":"state","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"isStdRandomizeArg":false,"lifetime":"VAUTOMI","varType":"MEMBER","dtypeName":"string","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []}, {"type":"FUNC","name":"strings_equal","addr":"(AB)","loc":"d,61:17,61:30","dtypep":"(U)","method":true,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"strings_equal", "fvarp": [ - {"type":"VAR","name":"strings_equal","addr":"(BB)","loc":"d,61:17,61:30","dtypep":"(U)","origName":"strings_equal","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"OUTPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":true,"isFuncLocal":true,"isStdRandomizeArg":false,"lifetime":"VAUTOM","varType":"MEMBER","dtypeName":"bit","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []} + {"type":"VAR","name":"strings_equal","addr":"(BB)","loc":"d,61:17,61:30","dtypep":"(U)","origName":"strings_equal","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"OUTPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noCReset":true,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":true,"isFuncLocal":true,"isStdRandomizeArg":false,"lifetime":"VAUTOM","varType":"MEMBER","dtypeName":"bit","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []} ],"classOrPackagep": [], "stmtsp": [ {"type":"VAR","name":"a","addr":"(CB)","loc":"d,61:38,61:39","dtypep":"(M)","origName":"a","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"INPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":true,"isStdRandomizeArg":false,"lifetime":"VAUTOMI","varType":"MEMBER","dtypeName":"string","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []}, {"type":"VAR","name":"b","addr":"(DB)","loc":"d,61:48,61:49","dtypep":"(M)","origName":"b","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"INPUT","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":true,"isStdRandomizeArg":false,"lifetime":"VAUTOMI","varType":"MEMBER","dtypeName":"string","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []}, - {"type":"ASSIGN","name":"","addr":"(EB)","loc":"d,62:7,62:13","dtypep":"(U)", + {"type":"ASSIGN","name":"","addr":"(EB)","loc":"d,61:17,61:30","dtypep":"(U)", "rhsp": [ - {"type":"EQN","name":"","addr":"(FB)","loc":"d,62:16,62:18","dtypep":"(GB)", + {"type":"CRESET","name":"","addr":"(FB)","loc":"d,61:17,61:30","dtypep":"(U)","constructing":false} + ], + "lhsp": [ + {"type":"VARREF","name":"strings_equal","addr":"(GB)","loc":"d,61:17,61:30","dtypep":"(U)","access":"WR","varp":"(BB)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + ],"timingControlp": []}, + {"type":"ASSIGN","name":"","addr":"(HB)","loc":"d,62:7,62:13","dtypep":"(U)", + "rhsp": [ + {"type":"EQN","name":"","addr":"(IB)","loc":"d,62:16,62:18","dtypep":"(JB)", "lhsp": [ - {"type":"VARREF","name":"a","addr":"(HB)","loc":"d,62:14,62:15","dtypep":"(M)","access":"RD","varp":"(CB)","varScopep":"UNLINKED","classOrPackagep":"(O)"} + {"type":"VARREF","name":"a","addr":"(KB)","loc":"d,62:14,62:15","dtypep":"(M)","access":"RD","varp":"(CB)","varScopep":"UNLINKED","classOrPackagep":"(O)"} ], "rhsp": [ - {"type":"VARREF","name":"b","addr":"(IB)","loc":"d,62:19,62:20","dtypep":"(M)","access":"RD","varp":"(DB)","varScopep":"UNLINKED","classOrPackagep":"(O)"} + {"type":"VARREF","name":"b","addr":"(LB)","loc":"d,62:19,62:20","dtypep":"(M)","access":"RD","varp":"(DB)","varScopep":"UNLINKED","classOrPackagep":"(O)"} ]} ], "lhsp": [ - {"type":"VARREF","name":"strings_equal","addr":"(JB)","loc":"d,62:7,62:13","dtypep":"(U)","access":"WR","varp":"(BB)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"strings_equal","addr":"(MB)","loc":"d,62:7,62:13","dtypep":"(U)","access":"WR","varp":"(BB)","varScopep":"UNLINKED","classOrPackagep":"UNLINKED"} ],"timingControlp": []} ],"scopeNamep": []}, - {"type":"FUNC","name":"new","addr":"(KB)","loc":"d,7:1,7:6","dtypep":"(LB)","method":true,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"new","fvarp": [],"classOrPackagep": [],"stmtsp": [],"scopeNamep": []}, - {"type":"VAR","name":"constraint","addr":"(MB)","loc":"d,7:1,7:6","dtypep":"(NB)","origName":"constraint","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"isStdRandomizeArg":false,"lifetime":"NONE","varType":"MEMBER","dtypeName":"VlRandomizer","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []} + {"type":"FUNC","name":"new","addr":"(NB)","loc":"d,7:1,7:6","dtypep":"(OB)","method":true,"dpiExport":false,"dpiImport":false,"dpiOpenChild":false,"dpiOpenParent":false,"isExternDef":false,"isExternProto":false,"prototype":false,"recursive":false,"taskPublic":false,"cname":"new","fvarp": [],"classOrPackagep": [],"stmtsp": [],"scopeNamep": []}, + {"type":"VAR","name":"constraint","addr":"(PB)","loc":"d,7:1,7:6","dtypep":"(QB)","origName":"constraint","isSc":false,"isPrimaryIO":false,"isPrimaryClock":false,"direction":"NONE","isConst":false,"isPullup":false,"isPulldown":false,"isSigPublic":false,"isLatched":false,"isUsedLoopIdx":false,"noReset":false,"attrIsolateAssign":false,"attrFileDescr":false,"isDpiOpenArray":false,"isFuncReturn":false,"isFuncLocal":false,"isStdRandomizeArg":false,"lifetime":"NONE","varType":"MEMBER","dtypeName":"VlRandomizer","isSigUserRdPublic":false,"isSigUserRWPublic":false,"isGParam":false,"isParam":false,"attrScBv":false,"attrSFormat":false,"ignorePostWrite":false,"ignoreSchedWrite":false,"sensIfacep":"UNLINKED","childDTypep": [],"delayp": [],"valuep": [],"attrsp": []} ],"extendsp": []} ]} ],"filesp": [], "miscsp": [ - {"type":"TYPETABLE","name":"","addr":"(C)","loc":"a,0:0,0:0","constraintRefp":"UNLINKED","emptyQueuep":"UNLINKED","queueIndexp":"UNLINKED","streamp":"UNLINKED","voidp":"(LB)", + {"type":"TYPETABLE","name":"","addr":"(C)","loc":"a,0:0,0:0","constraintRefp":"UNLINKED","emptyQueuep":"UNLINKED","queueIndexp":"UNLINKED","streamp":"UNLINKED","voidp":"(OB)", "typesp": [ - {"type":"BASICDTYPE","name":"logic","addr":"(GB)","loc":"d,22:14,22:15","dtypep":"(GB)","keyword":"logic","generic":true,"rangep": []}, - {"type":"BASICDTYPE","name":"logic","addr":"(OB)","loc":"d,25:21,25:22","dtypep":"(OB)","keyword":"logic","range":"31:0","generic":true,"rangep": []}, + {"type":"BASICDTYPE","name":"logic","addr":"(JB)","loc":"d,22:14,22:15","dtypep":"(JB)","keyword":"logic","generic":true,"rangep": []}, + {"type":"BASICDTYPE","name":"logic","addr":"(RB)","loc":"d,25:21,25:22","dtypep":"(RB)","keyword":"logic","range":"31:0","generic":true,"rangep": []}, {"type":"BASICDTYPE","name":"string","addr":"(M)","loc":"d,73:7,73:13","dtypep":"(M)","keyword":"string","generic":true,"rangep": []}, {"type":"BASICDTYPE","name":"int","addr":"(Q)","loc":"d,8:9,8:12","dtypep":"(Q)","keyword":"int","range":"31:0","generic":true,"signed":true,"rangep": []}, {"type":"BASICDTYPE","name":"bit","addr":"(U)","loc":"d,11:9,11:12","dtypep":"(U)","keyword":"bit","generic":true,"rangep": []}, {"type":"UNPACKARRAYDTYPE","name":"","addr":"(Y)","loc":"d,15:18,15:19","dtypep":"(Y)","isCompound":false,"declRange":"[0:1]","generic":false,"signed":true,"refDTypep":"(Q)","childDTypep": [], "rangep": [ - {"type":"RANGE","name":"","addr":"(PB)","loc":"d,15:18,15:19","ascending":true,"fromBracket":true, + {"type":"RANGE","name":"","addr":"(SB)","loc":"d,15:18,15:19","ascending":true,"fromBracket":true, "leftp": [ - {"type":"CONST","name":"32'h0","addr":"(QB)","loc":"d,15:19,15:20","dtypep":"(OB)"} + {"type":"CONST","name":"32'h0","addr":"(TB)","loc":"d,15:19,15:20","dtypep":"(RB)"} ], "rightp": [ - {"type":"CONST","name":"32'h1","addr":"(RB)","loc":"d,15:19,15:20","dtypep":"(OB)"} + {"type":"CONST","name":"32'h1","addr":"(UB)","loc":"d,15:19,15:20","dtypep":"(RB)"} ]} ]}, - {"type":"VOIDDTYPE","name":"","addr":"(LB)","loc":"d,7:1,7:6","dtypep":"(LB)","generic":false}, + {"type":"VOIDDTYPE","name":"","addr":"(OB)","loc":"d,7:1,7:6","dtypep":"(OB)","generic":false}, {"type":"CLASSREFDTYPE","name":"Packet","addr":"(H)","loc":"d,69:4,69:10","dtypep":"(H)","generic":false,"classp":"(O)","classOrPackagep":"(O)","paramsp": []}, - {"type":"BASICDTYPE","name":"VlRandomizer","addr":"(NB)","loc":"d,7:1,7:6","dtypep":"(NB)","keyword":"VlRandomizer","generic":true,"rangep": []} + {"type":"BASICDTYPE","name":"VlRandomizer","addr":"(QB)","loc":"d,7:1,7:6","dtypep":"(QB)","keyword":"VlRandomizer","generic":true,"rangep": []} ]}, {"type":"CONSTPOOL","name":"","addr":"(D)","loc":"a,0:0,0:0", "modulep": [ - {"type":"MODULE","name":"@CONST-POOL@","addr":"(SB)","loc":"a,0:0,0:0","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"@CONST-POOL@","level":0,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"NONE","inlinesp": [], + {"type":"MODULE","name":"@CONST-POOL@","addr":"(VB)","loc":"a,0:0,0:0","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"@CONST-POOL@","level":0,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"NONE","inlinesp": [], "stmtsp": [ - {"type":"SCOPE","name":"@CONST-POOL@","addr":"(TB)","loc":"a,0:0,0:0","aboveScopep":"UNLINKED","aboveCellp":"UNLINKED","modp":"(SB)","varsp": [],"blocksp": [],"inlinesp": []} + {"type":"SCOPE","name":"@CONST-POOL@","addr":"(WB)","loc":"a,0:0,0:0","aboveScopep":"UNLINKED","aboveCellp":"UNLINKED","modp":"(VB)","varsp": [],"blocksp": [],"inlinesp": []} ]} ]} ]} diff --git a/test_regress/t/t_debug_emitv.out b/test_regress/t/t_debug_emitv.out index 8a5472854..3b08bee77 100644 --- a/test_regress/t/t_debug_emitv.out +++ b/test_regress/t/t_debug_emitv.out @@ -33,6 +33,9 @@ module Vt_debug_emitv_t; function ident; input int signed value; begin : label0 + ident = + ???? // CRESET + ; ident = value; disable label0; end diff --git a/test_regress/t/t_func_complex.v b/test_regress/t/t_func_complex.v index cd92427ee..0489cf568 100644 --- a/test_regress/t/t_func_complex.v +++ b/test_regress/t/t_func_complex.v @@ -15,6 +15,22 @@ module t(); if (q.size() != 1) $stop; endfunction + // verilator lint_off NORETURN + function int get_noreturn(); +`ifdef TEST_NOINLINE + // verilator no_inline_task +`endif + endfunction + // verilator lint_on NORETURN + + function int get_uninit(); +`ifdef TEST_NOINLINE + // verilator no_inline_task +`endif + int uninit; + return get_uninit; + endfunction + function void queue_check_nref(q_t q); `ifdef TEST_NOINLINE // verilator no_inline_task @@ -50,6 +66,9 @@ module t(); iq = queue_ret(); if (iq[0] != 101) $stop; + if (get_noreturn() != 0) $stop; + if (get_uninit() != 0) $stop; + $write("*-* All Finished *-*\n"); $finish; end diff --git a/test_regress/t/t_func_return_init.py b/test_regress/t/t_func_return_init.py new file mode 100755 index 000000000..8a938befd --- /dev/null +++ b/test_regress/t/t_func_return_init.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 +# DESCRIPTION: Verilator: Verilog Test driver/expect definition +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of either the GNU Lesser General Public License Version 3 +# or the Perl Artistic License Version 2.0. +# SPDX-FileCopyrightText: 2026 Wilson Snyder +# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 + +import vltest_bootstrap + +test.scenarios('simulator') + +test.compile() + +test.execute() + +test.passes() diff --git a/test_regress/t/t_func_return_init.v b/test_regress/t/t_func_return_init.v new file mode 100644 index 000000000..6eeec9fa0 --- /dev/null +++ b/test_regress/t/t_func_return_init.v @@ -0,0 +1,54 @@ +// DESCRIPTION: Verilator: Verilog Test module +// +// This file ONLY is placed under the Creative Commons Public Domain. +// SPDX-FileCopyrightText: 2026 Wilson Snyder +// SPDX-License-Identifier: CC0-1.0 + +// verilog_format: off +`define stop $stop +`define checks(gotv,expv) do if ((gotv) != (expv)) begin $write("%%Error: %s:%0d: got='%s' exp='%s'\n", `__FILE__,`__LINE__, (gotv), (expv)); `stop; end while(0); +`ifdef verilator + `define no_optimize(v) $c(v) +`else + `define no_optimize(v) (v) +`endif +// verilog_format: on + +module t; + + class Cls; + function string unpack_string(int n); + for (int i = 0; i < n; ++i) begin + unpack_string = {unpack_string, "."}; + unpack_string[i] = "x"; + end + endfunction + endclass + + function static string unpack_static(int n); + for (int i = 0; i < n; ++i) begin + unpack_static = {unpack_static, "."}; + unpack_static[i] = "x"; + end + endfunction + + initial begin + Cls c; + string str1[]; + string str2[]; + string s; + + c = new; + str1 = new[2]; + foreach (str1[i]) str1[i] = c.unpack_string(`no_optimize(3 + i)); + `checks(str1[0], "xxx"); + `checks(str1[1], "xxxx"); + + str2 = new[2]; + foreach (str2[i]) str2[i] = unpack_static(`no_optimize(3 + i)); + `checks(str2[0], "xxx"); + `checks(str2[1], "xxxx..."); + + $finish; + end +endmodule diff --git a/test_regress/t/t_json_only_flat_vlvbound.out b/test_regress/t/t_json_only_flat_vlvbound.out index f5bc06e06..a24f36ddb 100644 --- a/test_regress/t/t_json_only_flat_vlvbound.out +++ b/test_regress/t/t_json_only_flat_vlvbound.out @@ -96,210 +96,224 @@ "lhsp": [ {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(QC)","loc":"d,17:13,17:14","dtypep":"(WB)","access":"WR","varp":"(XB)","varScopep":"(VB)","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"ASSIGN","name":"","addr":"(RC)","loc":"d,18:11,18:12","dtypep":"(WB)", + {"type":"ASSIGN","name":"","addr":"(RC)","loc":"d,15:34,15:37","dtypep":"(K)", "rhsp": [ - {"type":"CONST","name":"32'sh0","addr":"(SC)","loc":"d,18:12,18:13","dtypep":"(TC)"} + {"type":"CRESET","name":"","addr":"(SC)","loc":"d,15:34,15:37","dtypep":"(K)","constructing":false} ], "lhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(UC)","loc":"d,18:10,18:11","dtypep":"(WB)","access":"WR","varp":"(XB)","varScopep":"(VB)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__Vfuncout","addr":"(TC)","loc":"d,15:34,15:37","dtypep":"(K)","access":"WR","varp":"(QB)","varScopep":"(PB)","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"LOOP","name":"","addr":"(VC)","loc":"d,18:5,18:8","unroll":"default", + {"type":"ASSIGN","name":"","addr":"(UC)","loc":"d,18:11,18:12","dtypep":"(WB)", + "rhsp": [ + {"type":"CONST","name":"32'sh0","addr":"(VC)","loc":"d,18:12,18:13","dtypep":"(WC)"} + ], + "lhsp": [ + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(XC)","loc":"d,18:10,18:11","dtypep":"(WB)","access":"WR","varp":"(XB)","varScopep":"(VB)","classOrPackagep":"UNLINKED"} + ],"timingControlp": []}, + {"type":"LOOP","name":"","addr":"(YC)","loc":"d,18:5,18:8","unroll":"default", "stmtsp": [ - {"type":"LOOPTEST","name":"","addr":"(WC)","loc":"d,18:16,18:17", + {"type":"LOOPTEST","name":"","addr":"(ZC)","loc":"d,18:16,18:17", "condp": [ - {"type":"GTS","name":"","addr":"(XC)","loc":"d,18:18,18:19","dtypep":"(YC)", + {"type":"GTS","name":"","addr":"(AD)","loc":"d,18:18,18:19","dtypep":"(BD)", "lhsp": [ - {"type":"CONST","name":"32'sh7","addr":"(ZC)","loc":"d,18:20,18:21","dtypep":"(TC)"} + {"type":"CONST","name":"32'sh7","addr":"(CD)","loc":"d,18:20,18:21","dtypep":"(WC)"} ], "rhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(AD)","loc":"d,18:16,18:17","dtypep":"(WB)","access":"RD","varp":"(XB)","varScopep":"(VB)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(DD)","loc":"d,18:16,18:17","dtypep":"(WB)","access":"RD","varp":"(XB)","varScopep":"(VB)","classOrPackagep":"UNLINKED"} ]} ]}, - {"type":"ASSIGN","name":"","addr":"(BD)","loc":"d,19:14,19:15","dtypep":"(YC)", + {"type":"ASSIGN","name":"","addr":"(ED)","loc":"d,19:14,19:15","dtypep":"(BD)", "rhsp": [ - {"type":"EQ","name":"","addr":"(CD)","loc":"d,19:31,19:33","dtypep":"(YC)", + {"type":"EQ","name":"","addr":"(FD)","loc":"d,19:31,19:33","dtypep":"(BD)", "lhsp": [ - {"type":"CONST","name":"2'h0","addr":"(DD)","loc":"d,19:34,19:39","dtypep":"(ED)"} + {"type":"CONST","name":"2'h0","addr":"(GD)","loc":"d,19:34,19:39","dtypep":"(HD)"} ], "rhsp": [ - {"type":"SEL","name":"","addr":"(FD)","loc":"d,19:20,19:21","dtypep":"(ED)","widthConst":2,"declRange":"[15:0]","declElWidth":1, + {"type":"SEL","name":"","addr":"(ID)","loc":"d,19:20,19:21","dtypep":"(HD)","widthConst":2,"declRange":"[15:0]","declElWidth":1, "fromp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__val","addr":"(GD)","loc":"d,19:17,19:20","dtypep":"(H)","access":"RD","varp":"(SB)","varScopep":"(RB)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__val","addr":"(JD)","loc":"d,19:17,19:20","dtypep":"(H)","access":"RD","varp":"(SB)","varScopep":"(RB)","classOrPackagep":"UNLINKED"} ], "lsbp": [ - {"type":"SEL","name":"","addr":"(HD)","loc":"d,19:22,19:23","dtypep":"(ID)","widthConst":4, + {"type":"SEL","name":"","addr":"(KD)","loc":"d,19:22,19:23","dtypep":"(LD)","widthConst":4, "fromp": [ - {"type":"MULS","name":"","addr":"(JD)","loc":"d,19:22,19:23","dtypep":"(TC)", + {"type":"MULS","name":"","addr":"(MD)","loc":"d,19:22,19:23","dtypep":"(WC)", "lhsp": [ - {"type":"CONST","name":"32'sh2","addr":"(KD)","loc":"d,19:23,19:24","dtypep":"(TC)"} + {"type":"CONST","name":"32'sh2","addr":"(ND)","loc":"d,19:23,19:24","dtypep":"(WC)"} ], "rhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(LD)","loc":"d,19:21,19:22","dtypep":"(WB)","access":"RD","varp":"(XB)","varScopep":"(VB)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(OD)","loc":"d,19:21,19:22","dtypep":"(WB)","access":"RD","varp":"(XB)","varScopep":"(VB)","classOrPackagep":"UNLINKED"} ]} ], "lsbp": [ - {"type":"CONST","name":"32'h0","addr":"(MD)","loc":"d,19:22,19:23","dtypep":"(ND)"} + {"type":"CONST","name":"32'h0","addr":"(PD)","loc":"d,19:22,19:23","dtypep":"(QD)"} ]} ]} ]} ], "lhsp": [ - {"type":"SEL","name":"","addr":"(OD)","loc":"d,19:10,19:11","dtypep":"(YC)","widthConst":1,"declRange":"[6:0]","declElWidth":1, + {"type":"SEL","name":"","addr":"(RD)","loc":"d,19:10,19:11","dtypep":"(BD)","widthConst":1,"declRange":"[6:0]","declElWidth":1, "fromp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__ret","addr":"(PD)","loc":"d,19:7,19:10","dtypep":"(K)","access":"WR","varp":"(UB)","varScopep":"(TB)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__ret","addr":"(SD)","loc":"d,19:7,19:10","dtypep":"(K)","access":"WR","varp":"(UB)","varScopep":"(TB)","classOrPackagep":"UNLINKED"} ], "lsbp": [ - {"type":"SEL","name":"","addr":"(QD)","loc":"d,19:11,19:12","dtypep":"(RD)","widthConst":3, + {"type":"SEL","name":"","addr":"(TD)","loc":"d,19:11,19:12","dtypep":"(UD)","widthConst":3, "fromp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(SD)","loc":"d,19:11,19:12","dtypep":"(WB)","access":"RD","varp":"(XB)","varScopep":"(VB)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(VD)","loc":"d,19:11,19:12","dtypep":"(WB)","access":"RD","varp":"(XB)","varScopep":"(VB)","classOrPackagep":"UNLINKED"} ], "lsbp": [ - {"type":"CONST","name":"32'h0","addr":"(TD)","loc":"d,19:11,19:12","dtypep":"(ND)"} + {"type":"CONST","name":"32'h0","addr":"(WD)","loc":"d,19:11,19:12","dtypep":"(QD)"} ]} ]} ],"timingControlp": []}, - {"type":"ASSIGN","name":"","addr":"(UD)","loc":"d,18:24,18:26","dtypep":"(WB)", + {"type":"ASSIGN","name":"","addr":"(XD)","loc":"d,18:24,18:26","dtypep":"(WB)", "rhsp": [ - {"type":"ADD","name":"","addr":"(VD)","loc":"d,18:24,18:26","dtypep":"(ND)", + {"type":"ADD","name":"","addr":"(YD)","loc":"d,18:24,18:26","dtypep":"(QD)", "lhsp": [ - {"type":"CONST","name":"32'h1","addr":"(WD)","loc":"d,18:24,18:26","dtypep":"(ND)"} + {"type":"CONST","name":"32'h1","addr":"(ZD)","loc":"d,18:24,18:26","dtypep":"(QD)"} ], "rhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(XD)","loc":"d,18:23,18:24","dtypep":"(WB)","access":"RD","varp":"(XB)","varScopep":"(VB)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(AE)","loc":"d,18:23,18:24","dtypep":"(WB)","access":"RD","varp":"(XB)","varScopep":"(VB)","classOrPackagep":"UNLINKED"} ]} ], "lhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(YD)","loc":"d,18:23,18:24","dtypep":"(WB)","access":"WR","varp":"(XB)","varScopep":"(VB)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__i","addr":"(BE)","loc":"d,18:23,18:24","dtypep":"(WB)","access":"WR","varp":"(XB)","varScopep":"(VB)","classOrPackagep":"UNLINKED"} ],"timingControlp": []} ],"contsp": []}, - {"type":"ASSIGN","name":"","addr":"(ZD)","loc":"d,21:5,21:11","dtypep":"(K)", + {"type":"ASSIGN","name":"","addr":"(CE)","loc":"d,21:5,21:11","dtypep":"(K)", "rhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__ret","addr":"(AE)","loc":"d,21:12,21:15","dtypep":"(K)","access":"RD","varp":"(UB)","varScopep":"(TB)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__ret","addr":"(DE)","loc":"d,21:12,21:15","dtypep":"(K)","access":"RD","varp":"(UB)","varScopep":"(TB)","classOrPackagep":"UNLINKED"} ], "lhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__Vfuncout","addr":"(BE)","loc":"d,21:5,21:11","dtypep":"(K)","access":"WR","varp":"(QB)","varScopep":"(PB)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__Vfuncout","addr":"(EE)","loc":"d,21:5,21:11","dtypep":"(K)","access":"WR","varp":"(QB)","varScopep":"(PB)","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"ASSIGNW","name":"","addr":"(CE)","loc":"d,24:14,24:15","dtypep":"(K)", + {"type":"ASSIGNW","name":"","addr":"(FE)","loc":"d,24:14,24:15","dtypep":"(K)", "rhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__Vfuncout","addr":"(DE)","loc":"d,24:16,24:19","dtypep":"(K)","access":"RD","varp":"(QB)","varScopep":"(PB)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__0__Vfuncout","addr":"(GE)","loc":"d,24:16,24:19","dtypep":"(K)","access":"RD","varp":"(QB)","varScopep":"(PB)","classOrPackagep":"UNLINKED"} ], "lhsp": [ - {"type":"VARREF","name":"o_a","addr":"(EE)","loc":"d,24:10,24:13","dtypep":"(K)","access":"WR","varp":"(J)","varScopep":"(T)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"o_a","addr":"(HE)","loc":"d,24:10,24:13","dtypep":"(K)","access":"WR","varp":"(J)","varScopep":"(T)","classOrPackagep":"UNLINKED"} ],"timingControlp": [],"strengthSpecp": []} ]}, - {"type":"ALWAYS","name":"","addr":"(FE)","loc":"d,25:14,25:15","keyword":"cont_assign","isSuspendable":false,"needProcess":false,"sentreep": [], + {"type":"ALWAYS","name":"","addr":"(IE)","loc":"d,25:14,25:15","keyword":"cont_assign","isSuspendable":false,"needProcess":false,"sentreep": [], "stmtsp": [ - {"type":"COMMENT","name":"Function: foo","addr":"(GE)","loc":"d,25:16,25:19"}, - {"type":"ASSIGN","name":"","addr":"(HE)","loc":"d,25:20,25:23","dtypep":"(H)", + {"type":"COMMENT","name":"Function: foo","addr":"(JE)","loc":"d,25:16,25:19"}, + {"type":"ASSIGN","name":"","addr":"(KE)","loc":"d,25:20,25:23","dtypep":"(H)", "rhsp": [ - {"type":"VARREF","name":"i_b","addr":"(IE)","loc":"d,25:20,25:23","dtypep":"(H)","access":"RD","varp":"(I)","varScopep":"(S)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"i_b","addr":"(LE)","loc":"d,25:20,25:23","dtypep":"(H)","access":"RD","varp":"(I)","varScopep":"(S)","classOrPackagep":"UNLINKED"} ], "lhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__val","addr":"(JE)","loc":"d,15:57,15:60","dtypep":"(H)","access":"WR","varp":"(BC)","varScopep":"(AC)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__val","addr":"(ME)","loc":"d,15:57,15:60","dtypep":"(H)","access":"WR","varp":"(BC)","varScopep":"(AC)","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"ASSIGN","name":"","addr":"(KE)","loc":"d,16:17,16:20","dtypep":"(K)", + {"type":"ASSIGN","name":"","addr":"(NE)","loc":"d,16:17,16:20","dtypep":"(K)", "rhsp": [ - {"type":"CRESET","name":"","addr":"(LE)","loc":"d,16:17,16:20","dtypep":"(K)","constructing":false} + {"type":"CRESET","name":"","addr":"(OE)","loc":"d,16:17,16:20","dtypep":"(K)","constructing":false} ], "lhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__ret","addr":"(ME)","loc":"d,16:17,16:20","dtypep":"(K)","access":"WR","varp":"(DC)","varScopep":"(CC)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__ret","addr":"(PE)","loc":"d,16:17,16:20","dtypep":"(K)","access":"WR","varp":"(DC)","varScopep":"(CC)","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"ASSIGN","name":"","addr":"(NE)","loc":"d,17:13,17:14","dtypep":"(WB)", + {"type":"ASSIGN","name":"","addr":"(QE)","loc":"d,17:13,17:14","dtypep":"(WB)", "rhsp": [ - {"type":"CRESET","name":"","addr":"(OE)","loc":"d,17:13,17:14","dtypep":"(WB)","constructing":false} + {"type":"CRESET","name":"","addr":"(RE)","loc":"d,17:13,17:14","dtypep":"(WB)","constructing":false} ], "lhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(PE)","loc":"d,17:13,17:14","dtypep":"(WB)","access":"WR","varp":"(FC)","varScopep":"(EC)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(SE)","loc":"d,17:13,17:14","dtypep":"(WB)","access":"WR","varp":"(FC)","varScopep":"(EC)","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"ASSIGN","name":"","addr":"(QE)","loc":"d,18:11,18:12","dtypep":"(WB)", + {"type":"ASSIGN","name":"","addr":"(TE)","loc":"d,15:34,15:37","dtypep":"(K)", "rhsp": [ - {"type":"CONST","name":"32'sh0","addr":"(RE)","loc":"d,18:12,18:13","dtypep":"(TC)"} + {"type":"CRESET","name":"","addr":"(UE)","loc":"d,15:34,15:37","dtypep":"(K)","constructing":false} ], "lhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(SE)","loc":"d,18:10,18:11","dtypep":"(WB)","access":"WR","varp":"(FC)","varScopep":"(EC)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__Vfuncout","addr":"(VE)","loc":"d,15:34,15:37","dtypep":"(K)","access":"WR","varp":"(ZB)","varScopep":"(YB)","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"LOOP","name":"","addr":"(TE)","loc":"d,18:5,18:8","unroll":"default", + {"type":"ASSIGN","name":"","addr":"(WE)","loc":"d,18:11,18:12","dtypep":"(WB)", + "rhsp": [ + {"type":"CONST","name":"32'sh0","addr":"(XE)","loc":"d,18:12,18:13","dtypep":"(WC)"} + ], + "lhsp": [ + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(YE)","loc":"d,18:10,18:11","dtypep":"(WB)","access":"WR","varp":"(FC)","varScopep":"(EC)","classOrPackagep":"UNLINKED"} + ],"timingControlp": []}, + {"type":"LOOP","name":"","addr":"(ZE)","loc":"d,18:5,18:8","unroll":"default", "stmtsp": [ - {"type":"LOOPTEST","name":"","addr":"(UE)","loc":"d,18:16,18:17", + {"type":"LOOPTEST","name":"","addr":"(AF)","loc":"d,18:16,18:17", "condp": [ - {"type":"GTS","name":"","addr":"(VE)","loc":"d,18:18,18:19","dtypep":"(YC)", + {"type":"GTS","name":"","addr":"(BF)","loc":"d,18:18,18:19","dtypep":"(BD)", "lhsp": [ - {"type":"CONST","name":"32'sh7","addr":"(WE)","loc":"d,18:20,18:21","dtypep":"(TC)"} + {"type":"CONST","name":"32'sh7","addr":"(CF)","loc":"d,18:20,18:21","dtypep":"(WC)"} ], "rhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(XE)","loc":"d,18:16,18:17","dtypep":"(WB)","access":"RD","varp":"(FC)","varScopep":"(EC)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(DF)","loc":"d,18:16,18:17","dtypep":"(WB)","access":"RD","varp":"(FC)","varScopep":"(EC)","classOrPackagep":"UNLINKED"} ]} ]}, - {"type":"ASSIGN","name":"","addr":"(YE)","loc":"d,19:14,19:15","dtypep":"(YC)", + {"type":"ASSIGN","name":"","addr":"(EF)","loc":"d,19:14,19:15","dtypep":"(BD)", "rhsp": [ - {"type":"EQ","name":"","addr":"(ZE)","loc":"d,19:31,19:33","dtypep":"(YC)", + {"type":"EQ","name":"","addr":"(FF)","loc":"d,19:31,19:33","dtypep":"(BD)", "lhsp": [ - {"type":"CONST","name":"2'h0","addr":"(AF)","loc":"d,19:34,19:39","dtypep":"(ED)"} + {"type":"CONST","name":"2'h0","addr":"(GF)","loc":"d,19:34,19:39","dtypep":"(HD)"} ], "rhsp": [ - {"type":"SEL","name":"","addr":"(BF)","loc":"d,19:20,19:21","dtypep":"(ED)","widthConst":2,"declRange":"[15:0]","declElWidth":1, + {"type":"SEL","name":"","addr":"(HF)","loc":"d,19:20,19:21","dtypep":"(HD)","widthConst":2,"declRange":"[15:0]","declElWidth":1, "fromp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__val","addr":"(CF)","loc":"d,19:17,19:20","dtypep":"(H)","access":"RD","varp":"(BC)","varScopep":"(AC)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__val","addr":"(IF)","loc":"d,19:17,19:20","dtypep":"(H)","access":"RD","varp":"(BC)","varScopep":"(AC)","classOrPackagep":"UNLINKED"} ], "lsbp": [ - {"type":"SEL","name":"","addr":"(DF)","loc":"d,19:22,19:23","dtypep":"(ID)","widthConst":4, + {"type":"SEL","name":"","addr":"(JF)","loc":"d,19:22,19:23","dtypep":"(LD)","widthConst":4, "fromp": [ - {"type":"MULS","name":"","addr":"(EF)","loc":"d,19:22,19:23","dtypep":"(TC)", + {"type":"MULS","name":"","addr":"(KF)","loc":"d,19:22,19:23","dtypep":"(WC)", "lhsp": [ - {"type":"CONST","name":"32'sh2","addr":"(FF)","loc":"d,19:23,19:24","dtypep":"(TC)"} + {"type":"CONST","name":"32'sh2","addr":"(LF)","loc":"d,19:23,19:24","dtypep":"(WC)"} ], "rhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(GF)","loc":"d,19:21,19:22","dtypep":"(WB)","access":"RD","varp":"(FC)","varScopep":"(EC)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(MF)","loc":"d,19:21,19:22","dtypep":"(WB)","access":"RD","varp":"(FC)","varScopep":"(EC)","classOrPackagep":"UNLINKED"} ]} ], "lsbp": [ - {"type":"CONST","name":"32'h0","addr":"(HF)","loc":"d,19:22,19:23","dtypep":"(ND)"} + {"type":"CONST","name":"32'h0","addr":"(NF)","loc":"d,19:22,19:23","dtypep":"(QD)"} ]} ]} ]} ], "lhsp": [ - {"type":"SEL","name":"","addr":"(IF)","loc":"d,19:10,19:11","dtypep":"(YC)","widthConst":1,"declRange":"[6:0]","declElWidth":1, + {"type":"SEL","name":"","addr":"(OF)","loc":"d,19:10,19:11","dtypep":"(BD)","widthConst":1,"declRange":"[6:0]","declElWidth":1, "fromp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__ret","addr":"(JF)","loc":"d,19:7,19:10","dtypep":"(K)","access":"WR","varp":"(DC)","varScopep":"(CC)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__ret","addr":"(PF)","loc":"d,19:7,19:10","dtypep":"(K)","access":"WR","varp":"(DC)","varScopep":"(CC)","classOrPackagep":"UNLINKED"} ], "lsbp": [ - {"type":"SEL","name":"","addr":"(KF)","loc":"d,19:11,19:12","dtypep":"(RD)","widthConst":3, + {"type":"SEL","name":"","addr":"(QF)","loc":"d,19:11,19:12","dtypep":"(UD)","widthConst":3, "fromp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(LF)","loc":"d,19:11,19:12","dtypep":"(WB)","access":"RD","varp":"(FC)","varScopep":"(EC)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(RF)","loc":"d,19:11,19:12","dtypep":"(WB)","access":"RD","varp":"(FC)","varScopep":"(EC)","classOrPackagep":"UNLINKED"} ], "lsbp": [ - {"type":"CONST","name":"32'h0","addr":"(MF)","loc":"d,19:11,19:12","dtypep":"(ND)"} + {"type":"CONST","name":"32'h0","addr":"(SF)","loc":"d,19:11,19:12","dtypep":"(QD)"} ]} ]} ],"timingControlp": []}, - {"type":"ASSIGN","name":"","addr":"(NF)","loc":"d,18:24,18:26","dtypep":"(WB)", + {"type":"ASSIGN","name":"","addr":"(TF)","loc":"d,18:24,18:26","dtypep":"(WB)", "rhsp": [ - {"type":"ADD","name":"","addr":"(OF)","loc":"d,18:24,18:26","dtypep":"(ND)", + {"type":"ADD","name":"","addr":"(UF)","loc":"d,18:24,18:26","dtypep":"(QD)", "lhsp": [ - {"type":"CONST","name":"32'h1","addr":"(PF)","loc":"d,18:24,18:26","dtypep":"(ND)"} + {"type":"CONST","name":"32'h1","addr":"(VF)","loc":"d,18:24,18:26","dtypep":"(QD)"} ], "rhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(QF)","loc":"d,18:23,18:24","dtypep":"(WB)","access":"RD","varp":"(FC)","varScopep":"(EC)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(WF)","loc":"d,18:23,18:24","dtypep":"(WB)","access":"RD","varp":"(FC)","varScopep":"(EC)","classOrPackagep":"UNLINKED"} ]} ], "lhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(RF)","loc":"d,18:23,18:24","dtypep":"(WB)","access":"WR","varp":"(FC)","varScopep":"(EC)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__i","addr":"(XF)","loc":"d,18:23,18:24","dtypep":"(WB)","access":"WR","varp":"(FC)","varScopep":"(EC)","classOrPackagep":"UNLINKED"} ],"timingControlp": []} ],"contsp": []}, - {"type":"ASSIGN","name":"","addr":"(SF)","loc":"d,21:5,21:11","dtypep":"(K)", + {"type":"ASSIGN","name":"","addr":"(YF)","loc":"d,21:5,21:11","dtypep":"(K)", "rhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__ret","addr":"(TF)","loc":"d,21:12,21:15","dtypep":"(K)","access":"RD","varp":"(DC)","varScopep":"(CC)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__ret","addr":"(ZF)","loc":"d,21:12,21:15","dtypep":"(K)","access":"RD","varp":"(DC)","varScopep":"(CC)","classOrPackagep":"UNLINKED"} ], "lhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__Vfuncout","addr":"(UF)","loc":"d,21:5,21:11","dtypep":"(K)","access":"WR","varp":"(ZB)","varScopep":"(YB)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__Vfuncout","addr":"(AG)","loc":"d,21:5,21:11","dtypep":"(K)","access":"WR","varp":"(ZB)","varScopep":"(YB)","classOrPackagep":"UNLINKED"} ],"timingControlp": []}, - {"type":"ASSIGNW","name":"","addr":"(VF)","loc":"d,25:14,25:15","dtypep":"(K)", + {"type":"ASSIGNW","name":"","addr":"(BG)","loc":"d,25:14,25:15","dtypep":"(K)", "rhsp": [ - {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__Vfuncout","addr":"(WF)","loc":"d,25:16,25:19","dtypep":"(K)","access":"RD","varp":"(ZB)","varScopep":"(YB)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"__Vfunc_vlvbound_test.foo__1__Vfuncout","addr":"(CG)","loc":"d,25:16,25:19","dtypep":"(K)","access":"RD","varp":"(ZB)","varScopep":"(YB)","classOrPackagep":"UNLINKED"} ], "lhsp": [ - {"type":"VARREF","name":"o_b","addr":"(XF)","loc":"d,25:10,25:13","dtypep":"(K)","access":"WR","varp":"(L)","varScopep":"(U)","classOrPackagep":"UNLINKED"} + {"type":"VARREF","name":"o_b","addr":"(DG)","loc":"d,25:10,25:13","dtypep":"(K)","access":"WR","varp":"(L)","varScopep":"(U)","classOrPackagep":"UNLINKED"} ],"timingControlp": [],"strengthSpecp": []} ]} ],"inlinesp": []} @@ -315,24 +329,24 @@ ]} ],"filesp": [], "miscsp": [ - {"type":"TYPETABLE","name":"","addr":"(C)","loc":"a,0:0,0:0","constraintRefp":"UNLINKED","emptyQueuep":"UNLINKED","queueIndexp":"UNLINKED","streamp":"UNLINKED","voidp":"(YF)", + {"type":"TYPETABLE","name":"","addr":"(C)","loc":"a,0:0,0:0","constraintRefp":"UNLINKED","emptyQueuep":"UNLINKED","queueIndexp":"UNLINKED","streamp":"UNLINKED","voidp":"(EG)", "typesp": [ - {"type":"BASICDTYPE","name":"logic","addr":"(YC)","loc":"d,18:18,18:19","dtypep":"(YC)","keyword":"logic","generic":true,"rangep": []}, - {"type":"BASICDTYPE","name":"logic","addr":"(ED)","loc":"d,19:34,19:39","dtypep":"(ED)","keyword":"logic","range":"1:0","generic":true,"rangep": []}, + {"type":"BASICDTYPE","name":"logic","addr":"(BD)","loc":"d,18:18,18:19","dtypep":"(BD)","keyword":"logic","generic":true,"rangep": []}, + {"type":"BASICDTYPE","name":"logic","addr":"(HD)","loc":"d,19:34,19:39","dtypep":"(HD)","keyword":"logic","range":"1:0","generic":true,"rangep": []}, {"type":"BASICDTYPE","name":"logic","addr":"(H)","loc":"d,9:11,9:16","dtypep":"(H)","keyword":"logic","range":"15:0","generic":true,"rangep": []}, {"type":"BASICDTYPE","name":"logic","addr":"(K)","loc":"d,11:12,11:17","dtypep":"(K)","keyword":"logic","range":"6:0","generic":true,"rangep": []}, {"type":"BASICDTYPE","name":"integer","addr":"(WB)","loc":"d,17:5,17:12","dtypep":"(WB)","keyword":"integer","range":"31:0","generic":true,"signed":true,"rangep": []}, - {"type":"BASICDTYPE","name":"logic","addr":"(RD)","loc":"d,19:10,19:11","dtypep":"(RD)","keyword":"logic","range":"2:0","generic":true,"signed":true,"rangep": []}, - {"type":"BASICDTYPE","name":"logic","addr":"(ND)","loc":"d,19:11,19:12","dtypep":"(ND)","keyword":"logic","range":"31:0","generic":true,"rangep": []}, - {"type":"BASICDTYPE","name":"logic","addr":"(ID)","loc":"d,19:20,19:21","dtypep":"(ID)","keyword":"logic","range":"3:0","generic":true,"signed":true,"rangep": []}, - {"type":"BASICDTYPE","name":"logic","addr":"(TC)","loc":"d,18:12,18:13","dtypep":"(TC)","keyword":"logic","range":"31:0","generic":true,"signed":true,"rangep": []}, - {"type":"VOIDDTYPE","name":"","addr":"(YF)","loc":"a,0:0,0:0","dtypep":"(YF)","generic":false} + {"type":"BASICDTYPE","name":"logic","addr":"(UD)","loc":"d,19:10,19:11","dtypep":"(UD)","keyword":"logic","range":"2:0","generic":true,"signed":true,"rangep": []}, + {"type":"BASICDTYPE","name":"logic","addr":"(QD)","loc":"d,19:11,19:12","dtypep":"(QD)","keyword":"logic","range":"31:0","generic":true,"rangep": []}, + {"type":"BASICDTYPE","name":"logic","addr":"(LD)","loc":"d,19:20,19:21","dtypep":"(LD)","keyword":"logic","range":"3:0","generic":true,"signed":true,"rangep": []}, + {"type":"BASICDTYPE","name":"logic","addr":"(WC)","loc":"d,18:12,18:13","dtypep":"(WC)","keyword":"logic","range":"31:0","generic":true,"signed":true,"rangep": []}, + {"type":"VOIDDTYPE","name":"","addr":"(EG)","loc":"a,0:0,0:0","dtypep":"(EG)","generic":false} ]}, {"type":"CONSTPOOL","name":"","addr":"(D)","loc":"a,0:0,0:0", "modulep": [ - {"type":"MODULE","name":"@CONST-POOL@","addr":"(ZF)","loc":"a,0:0,0:0","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"@CONST-POOL@","level":0,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"NONE","inlinesp": [], + {"type":"MODULE","name":"@CONST-POOL@","addr":"(FG)","loc":"a,0:0,0:0","isChecker":false,"isProgram":false,"hasGenericIface":false,"origName":"@CONST-POOL@","level":0,"modPublic":false,"inLibrary":false,"dead":false,"recursiveClone":false,"recursive":false,"timeunit":"NONE","inlinesp": [], "stmtsp": [ - {"type":"SCOPE","name":"@CONST-POOL@","addr":"(AG)","loc":"a,0:0,0:0","aboveScopep":"UNLINKED","aboveCellp":"UNLINKED","modp":"(ZF)","varsp": [],"blocksp": [],"inlinesp": []} + {"type":"SCOPE","name":"@CONST-POOL@","addr":"(GG)","loc":"a,0:0,0:0","aboveScopep":"UNLINKED","aboveCellp":"UNLINKED","modp":"(FG)","varsp": [],"blocksp": [],"inlinesp": []} ]} ]} ]}