Fix negate of wide structure selections (#6186).

This commit is contained in:
Wilson Snyder
2025-07-28 02:20:57 -04:00
parent e69df457fd
commit 5c1d7f3ce9
4 changed files with 46 additions and 3 deletions
+7 -2
View File
@@ -173,13 +173,13 @@ class CastVisitor final : public VNVisitor {
void visit(AstNegate* nodep) override {
iterateChildren(nodep);
nodep->user1(nodep->lhsp()->user1());
if (nodep->lhsp()->widthMin() == 1) {
if (nodep->lhsp()->widthMin() == 1 && !nodep->lhsp()->isWide()) {
// We want to avoid a GCC "converting of negative value" warning
// from our expansion of
// out = {32{a<b}} => out = - (a<b)
insertCast(nodep->lhsp(), castSize(nodep));
} else {
ensureCast(nodep->lhsp());
if (nodep->sizeMattersLhs()) ensureCast(nodep->lhsp());
}
}
void visit(AstVarRef* nodep) override {
@@ -221,6 +221,11 @@ class CastVisitor final : public VNVisitor {
void visit(AstMemberSel* nodep) override {
iterateChildren(nodep);
ensureNullChecked(nodep->fromp());
nodep->user1(true);
}
void visit(AstStructSel* nodep) override {
iterateChildren(nodep);
nodep->user1(true);
}
// NOPs