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