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
+14
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});
}