From 778f133118971fa0a498d8dcced5398b5a60e2c3 Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Sat, 7 Nov 2020 14:28:05 -0500 Subject: [PATCH] Fix dynamic new with init argument (#2325). --- src/V3Width.cpp | 5 ++--- test_regress/t/t_dynarray.v | 7 +++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/V3Width.cpp b/src/V3Width.cpp index 3b311d6d9..6f869d4ad 100644 --- a/src/V3Width.cpp +++ b/src/V3Width.cpp @@ -3119,8 +3119,7 @@ private: iterateCheckSigned32(nodep, "new() size", nodep->sizep(), BOTH); } if (nodep->rhsp()) { - iterateCheckTyped(nodep, "Dynamic array new RHS", nodep->rhsp(), adtypep->subDTypep(), - BOTH); + iterateCheckTyped(nodep, "Dynamic array new RHS", nodep->rhsp(), adtypep, BOTH); } } @@ -5037,7 +5036,7 @@ private: void iterateCheckTyped(AstNode* nodep, const char* side, AstNode* underp, AstNodeDType* expDTypep, Stage stage) { if (stage & PRELIM) { - underp = userIterateSubtreeReturnEdits(underp, WidthVP(SELF, PRELIM).p()); + underp = userIterateSubtreeReturnEdits(underp, WidthVP(expDTypep, PRELIM).p()); } if (stage & FINAL) { underp = iterateCheck(nodep, side, underp, SELF, FINAL, expDTypep, EXTEND_EXP); diff --git a/test_regress/t/t_dynarray.v b/test_regress/t/t_dynarray.v index 4be647804..a24a83453 100644 --- a/test_regress/t/t_dynarray.v +++ b/test_regress/t/t_dynarray.v @@ -126,6 +126,13 @@ module t (/*AUTOARG*/ `checkh(b[2], 0); `checkh(b[3], 0); + a = new[4] ('{8'd1,8'd2,8'd3,8'd4}); + `checkh(a.size, 4); + `checkh(a[0], 1); + `checkh(a[1], 2); + `checkh(a[2], 3); + `checkh(a[3], 4); + // test wide dynamic array p256 = new [11]; `checkh(p256.size, 11);