Fix non-inlined function return value clearing (#6982).

This commit is contained in:
Wilson Snyder 2026-02-01 11:57:09 -05:00
parent 1b2e13a0d8
commit 7ca113a84f
13 changed files with 257 additions and 109 deletions

View File

@ -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

View File

@ -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);
};

View File

@ -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);

View File

@ -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});
}

View File

@ -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);
});
}

View File

@ -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);

View File

@ -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 {

View File

@ -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": []}
]}
]}
]}

View File

@ -33,6 +33,9 @@ module Vt_debug_emitv_t;
function ident;
input int signed value;
begin : label0
ident =
???? // CRESET
;
ident = value;
disable label0;
end

View File

@ -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

View File

@ -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()

View File

@ -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

View File

@ -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": []}
]}
]}
]}