Fix inlining of real functions miscasting (#4543).

This commit is contained in:
Wilson Snyder
2023-10-06 21:33:31 -04:00
parent 106664b942
commit 800a789f50
5 changed files with 52 additions and 3 deletions
+6 -2
View File
@@ -58,7 +58,7 @@ class CastVisitor final : public VNVisitor {
private:
// NODE STATE
// Entire netlist:
// AstNode::user() // bool. Indicates node is of known size
// AstNode::user1() // bool. Indicates node is of known size
const VNUser1InUse m_inuser1;
// STATE
@@ -66,12 +66,12 @@ private:
// METHODS
void insertCast(AstNodeExpr* nodep, int needsize) { // We'll insert ABOVE passed node
UINFO(4, " NeedCast " << nodep << endl);
VNRelinker relinkHandle;
nodep->unlinkFrBack(&relinkHandle);
//
AstCCast* const castp
= new AstCCast{nodep->fileline(), nodep, needsize, nodep->widthMin()};
UINFO(4, " MadeCast " << static_cast<void*>(castp) << " for " << nodep << endl);
relinkHandle.relink(castp);
// if (debug() > 8) castp->dumpTree("- castins: ");
//
@@ -170,6 +170,10 @@ private:
ensureLower32Cast(nodep);
nodep->user1(1);
}
void visit(AstExprStmt* nodep) override {
iterateChildren(nodep);
nodep->user1(1);
}
void visit(AstNegate* nodep) override {
iterateChildren(nodep);
nodep->user1(nodep->lhsp()->user1());