Cleanup more errors showing data types.

This commit is contained in:
Wilson Snyder 2020-01-26 15:54:57 -05:00
parent 619214b48f
commit 5430e4ac9b
5 changed files with 32 additions and 29 deletions

View File

@ -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 = "<<ddtypep<<endl);
if (const AstNodeArrayDType* adtypep = VN_CAST(ddtypep, NodeArrayDType)) {
fromRange = adtypep->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 "
<<errp->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 "
<<errp->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"
<<fromdata.m_errp->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 "
<<fromdata.m_errp->prettyName());
UINFO(1," Related ddtype: "<<ddtypep<<endl);
nodep->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 "
<<fromdata.m_errp->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); }

View File

@ -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];
^

View File

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

View File

@ -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:$]};
^

View File

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