Fix for Returning an object of the wrong type from a static function of a parameterized class (#5479) (#7387)

This commit is contained in:
em2machine
2026-04-11 07:49:45 -04:00
committed by GitHub
parent 529a6b7f93
commit dc33e8bb18
11 changed files with 334 additions and 11 deletions
+6 -1
View File
@@ -5588,7 +5588,12 @@ class LinkDotResolveVisitor final : public VNVisitor {
AstNodeDType* const unwrappedp = typedefp->subDTypep()->skipRefp();
if (AstClassRefDType* const classRefp = VN_CAST(unwrappedp, ClassRefDType)) {
AstPin* paramsp = cpackagerefp->paramsp();
if (paramsp) {
if (!paramsp && classRefp->paramsp()) {
// No explicit #(...) on extends clause; carry over the
// typedef's type-parameter pins so V3Param sees them.
paramsp = classRefp->paramsp()->cloneTree(true);
nodep->parameterized(true);
} else if (paramsp) {
paramsp = paramsp->cloneTree(true);
nodep->parameterized(true);
}