From 391d4e1c32e242820c76a3d8e8f7bea1c82d9114 Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Wed, 12 Mar 2025 08:06:34 -0400 Subject: [PATCH] Fix segmentation fault on member compare (#5853). --- Changes | 1 + src/V3AstInlines.h | 4 ++-- src/V3AstNodes.cpp | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Changes b/Changes index 7cd153d77..33c252fda 100644 --- a/Changes +++ b/Changes @@ -41,6 +41,7 @@ Verilator 5.035 devel * Fix splitting of packed ports with non-zero based ranges (#5842). [Geza Lore] * Fix NBA shared flag reuse (#5848). [Geza Lore] * Fix removal of callbacks no longer in current list (#5851) (#5852). [Gilberto Abram] +* Fix segmentation fault on member compare (#5853). Verilator 5.034 2025-02-24 diff --git a/src/V3AstInlines.h b/src/V3AstInlines.h index 3f6b06c7e..cb13fa21a 100644 --- a/src/V3AstInlines.h +++ b/src/V3AstInlines.h @@ -189,8 +189,8 @@ bool AstVarRef::sameNode(const AstVarRef* samep) const { return (varScopep() == samep->varScopep() && access() == samep->access()); } else { return (selfPointer() == samep->selfPointer() - && classOrPackagep() == samep->classOrPackagep() - && varp()->name() == samep->varp()->name() && access() == samep->access()); + && classOrPackagep() == samep->classOrPackagep() && access() == samep->access() + && (varp() && samep->varp() && varp()->name() == samep->varp()->name())); } } bool AstVarRef::sameNoLvalue(AstVarRef* samep) const { diff --git a/src/V3AstNodes.cpp b/src/V3AstNodes.cpp index 05f0d16dd..3172ac4ba 100644 --- a/src/V3AstNodes.cpp +++ b/src/V3AstNodes.cpp @@ -1995,8 +1995,8 @@ AstMemberSel::AstMemberSel(FileLine* fl, AstNodeExpr* fromp, AstVar* varp) } bool AstMemberSel::sameNode(const AstNode* samep) const { const AstMemberSel* const sp = VN_DBG_AS(samep, MemberSel); - return sp != nullptr && access() == sp->access() && fromp()->isSame(sp->fromp()) - && name() == sp->name() && varp()->sameNode(sp->varp()); + return sp && access() == sp->access() && fromp()->isSame(sp->fromp()) && name() == sp->name() + && (varp() && sp->varp() && varp()->sameNode(sp->varp())); } void AstMemberSel::dump(std::ostream& str) const {