mirror of
https://github.com/verilator/verilator.git
synced 2026-10-06 10:03:44 +02:00
Cleanup more errors showing data types.
This commit is contained in:
+20
-17
@@ -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); }
|
||||
|
||||
Reference in New Issue
Block a user