diff --git a/src/V3WidthSel.cpp b/src/V3WidthSel.cpp index 740f8b12d..de74c01b7 100644 --- a/src/V3WidthSel.cpp +++ b/src/V3WidthSel.cpp @@ -66,10 +66,10 @@ private: // RETURN TYPE struct FromData { - AstNode* m_errp; // Node that was found, for error reporting if not known type + AstNodeDType* m_errp; // Node that was found, for error reporting if not known type AstNodeDType* m_dtypep; // Data type for the 'from' slice VNumRange m_fromRange; // Numeric range bounds for the 'from' slice - FromData(AstNode* errp, AstNodeDType* dtypep, const VNumRange& fromRange) + FromData(AstNodeDType* errp, AstNodeDType* dtypep, const VNumRange& fromRange) { m_errp = errp; m_dtypep = dtypep; m_fromRange = fromRange; } ~FromData() {} }; @@ -86,7 +86,7 @@ private: } UASSERT_OBJ(basefromp && basefromp->dtypep(), nodep, "Select with no from dtype"); AstNodeDType* ddtypep = basefromp->dtypep()->skipRefp(); - AstNode* errp = ddtypep; + AstNodeDType* errp = ddtypep; UINFO(9," fromData.ddtypep = "<declRange(); @@ -106,13 +106,13 @@ private: nodep, "Non-constant variable range; errored earlier"); // in constifyParam(bfdtypep) fromRange = adtypep->declRange(); } else { - nodep->v3error("Illegal bit or array select; type does not have a bit range, or bad dimension: type is " - <prettyName()); + nodep->v3error("Illegal bit or array select; type does not have a bit range, or " + << "bad dimension: data type is " << errp->prettyDTypeNameQ()); } } else { - nodep->v3error("Illegal bit or array select; type already selected, or bad dimension: type is " - <prettyName()); + nodep->v3error("Illegal bit or array select; type already selected, or bad dimension: " + << "data type is " << errp->prettyDTypeNameQ()); } return FromData(errp, ddtypep, fromRange); } @@ -293,10 +293,11 @@ private: nodep->replaceWith(newp); VL_DO_DANGLING(pushDeletep(nodep), nodep); } else { // NULL=bad extract, or unknown node type - nodep->v3error("Illegal bit or array select; type already selected, or bad dimension: type is" - <prettyName()); + nodep->v3error("Illegal bit or array select; type already selected, or bad dimension: " + << "data type is" << fromdata.m_errp->prettyDTypeNameQ()); // How to recover? We'll strip a dimension. - nodep->replaceWith(fromp); VL_DO_DANGLING(pushDeletep(nodep), nodep); + nodep->replaceWith(fromp); + VL_DO_DANGLING(pushDeletep(nodep), nodep); } if (!rhsp->backp()) { VL_DO_DANGLING(pushDeletep(rhsp), rhsp); } } @@ -409,11 +410,12 @@ private: nodep->replaceWith(newp); VL_DO_DANGLING(pushDeletep(nodep), nodep); } else { // NULL=bad extract, or unknown node type - nodep->v3error("Illegal range select; type already selected, or bad dimension: type is " - <prettyName()); - UINFO(1," Related ddtype: "<v3error("Illegal range select; type already selected, or bad dimension: " + << "data type is " << fromdata.m_errp->prettyDTypeNameQ()); + UINFO(1, " Related ddtype: " << ddtypep << endl); // How to recover? We'll strip a dimension. - nodep->replaceWith(fromp); VL_DO_DANGLING(pushDeletep(nodep), nodep); + nodep->replaceWith(fromp); + VL_DO_DANGLING(pushDeletep(nodep), nodep); } // delete whatever we didn't use in reconstruction if (!fromp->backp()) { VL_DO_DANGLING(pushDeletep(fromp), fromp); } @@ -482,10 +484,11 @@ private: nodep->replaceWith(newp); VL_DO_DANGLING(pushDeletep(nodep), nodep); } else { // NULL=bad extract, or unknown node type - nodep->v3error("Illegal +: or -: select; type already selected, or bad dimension: type is " - <prettyTypeName()); + nodep->v3error("Illegal +: or -: select; type already selected, or bad dimension: " + << "data type is " << fromdata.m_errp->prettyDTypeNameQ()); // How to recover? We'll strip a dimension. - nodep->replaceWith(fromp); VL_DO_DANGLING(pushDeletep(nodep), nodep); + nodep->replaceWith(fromp); + VL_DO_DANGLING(pushDeletep(nodep), nodep); } // delete whatever we didn't use in reconstruction if (!fromp->backp()) { VL_DO_DANGLING(pushDeletep(fromp), fromp); } diff --git a/test_regress/t/t_bitsel_const_bad.out b/test_regress/t/t_bitsel_const_bad.out index 7637f6435..1bcbf6c61 100644 --- a/test_regress/t/t_bitsel_const_bad.out +++ b/test_regress/t/t_bitsel_const_bad.out @@ -1,4 +1,4 @@ -%Error: t/t_bitsel_const_bad.v:20: Illegal bit or array select; type does not have a bit range, or bad dimension: type is logic +%Error: t/t_bitsel_const_bad.v:20: Illegal bit or array select; type does not have a bit range, or bad dimension: data type is 'logic' : ... In instance t assign a = b[0]; ^ diff --git a/test_regress/t/t_mem_multi_ref_bad.out b/test_regress/t/t_mem_multi_ref_bad.out index edca2a8f7..e12873d3e 100644 --- a/test_regress/t/t_mem_multi_ref_bad.out +++ b/test_regress/t/t_mem_multi_ref_bad.out @@ -1,4 +1,4 @@ -%Error: t/t_mem_multi_ref_bad.v:14: Illegal bit or array select; type does not have a bit range, or bad dimension: type is logic +%Error: t/t_mem_multi_ref_bad.v:14: Illegal bit or array select; type does not have a bit range, or bad dimension: data type is 'logic' : ... In instance t dimn[1:0] = 0; ^ @@ -6,7 +6,7 @@ : ... In instance t dimn[1:0] = 0; ^ -%Error: t/t_mem_multi_ref_bad.v:15: Illegal bit or array select; type does not have a bit range, or bad dimension: type is logic +%Error: t/t_mem_multi_ref_bad.v:15: Illegal bit or array select; type does not have a bit range, or bad dimension: data type is 'logic' : ... In instance t dim0[1][1] = 0; ^ @@ -15,7 +15,7 @@ dim0[1][1] = 0; ^ ... Use "/* verilator lint_off SELRANGE */" and lint_on around source to disable this message. -%Error: t/t_mem_multi_ref_bad.v:16: Illegal bit or array select; type does not have a bit range, or bad dimension: type is logic +%Error: t/t_mem_multi_ref_bad.v:16: Illegal bit or array select; type does not have a bit range, or bad dimension: data type is 'logic' : ... In instance t dim1[1][1][1] = 0; ^ @@ -23,11 +23,11 @@ : ... In instance t dim1[1][1][1] = 0; ^ -%Error: t/t_mem_multi_ref_bad.v:18: Illegal +: or -: select; type already selected, or bad dimension: type is UNPACKARRAYDTYPE +%Error: t/t_mem_multi_ref_bad.v:18: Illegal +: or -: select; type already selected, or bad dimension: data type is 'logic[1:0]$[1:0][1:0]' : ... In instance t dim2[0 +: 1][1] = 0; ^ -%Error: t/t_mem_multi_ref_bad.v:22: Illegal bit or array select; type does not have a bit range, or bad dimension: type is logic +%Error: t/t_mem_multi_ref_bad.v:22: Illegal bit or array select; type does not have a bit range, or bad dimension: data type is 'logic' : ... In instance t dim0nv[1][1] = 0; ^ diff --git a/test_regress/t/t_queue_unsup_bad.out b/test_regress/t/t_queue_unsup_bad.out index f629a16c9..2be8b4f3c 100644 --- a/test_regress/t/t_queue_unsup_bad.out +++ b/test_regress/t/t_queue_unsup_bad.out @@ -42,7 +42,7 @@ : ... In instance t q = {q[0], q[2:$]}; ^ -%Error: t/t_queue_unsup_bad.v:37: Illegal range select; type already selected, or bad dimension: type is +%Error: t/t_queue_unsup_bad.v:37: Illegal range select; type already selected, or bad dimension: data type is 'string[$]' : ... In instance t q = {q[0], q[2:$]}; ^ diff --git a/test_regress/t/t_var_types_bad.out b/test_regress/t/t_var_types_bad.out index 8bb622363..9dbd0471d 100644 --- a/test_regress/t/t_var_types_bad.out +++ b/test_regress/t/t_var_types_bad.out @@ -1,16 +1,16 @@ -%Error: t/t_var_types_bad.v:38: Illegal bit or array select; type does not have a bit range, or bad dimension: type is bit +%Error: t/t_var_types_bad.v:38: Illegal bit or array select; type does not have a bit range, or bad dimension: data type is 'bit' : ... In instance t d_bitz[0] = 1'b1; ^ -%Error: t/t_var_types_bad.v:39: Illegal bit or array select; type does not have a bit range, or bad dimension: type is logic +%Error: t/t_var_types_bad.v:39: Illegal bit or array select; type does not have a bit range, or bad dimension: data type is 'logic' : ... In instance t d_logicz[0] = 1'b1; ^ -%Error: t/t_var_types_bad.v:40: Illegal bit or array select; type does not have a bit range, or bad dimension: type is logic +%Error: t/t_var_types_bad.v:40: Illegal bit or array select; type does not have a bit range, or bad dimension: data type is 'logic' : ... In instance t d_regz[0] = 1'b1; ^ -%Error: t/t_var_types_bad.v:45: Illegal bit or array select; type does not have a bit range, or bad dimension: type is real +%Error: t/t_var_types_bad.v:45: Illegal bit or array select; type does not have a bit range, or bad dimension: data type is 'real' : ... In instance t d_real[0] = 1'b1; ^ @@ -22,7 +22,7 @@ d_real[0] = 1'b1; ^~~~~~ ... Use "/* verilator lint_off REALCVT */" and lint_on around source to disable this message. -%Error: t/t_var_types_bad.v:46: Illegal bit or array select; type does not have a bit range, or bad dimension: type is real +%Error: t/t_var_types_bad.v:46: Illegal bit or array select; type does not have a bit range, or bad dimension: data type is 'real' : ... In instance t d_realtime[0] = 1'b1; ^