From b77eab3f838f049490d5eed0022fe967a387072a Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Mon, 7 Sep 2020 21:13:38 -0400 Subject: [PATCH] Fix crash when mismatching queue types. --- src/V3AstNodes.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/V3AstNodes.h b/src/V3AstNodes.h index c3d4ba8f1..8af9d41fb 100644 --- a/src/V3AstNodes.h +++ b/src/V3AstNodes.h @@ -539,10 +539,13 @@ public: } virtual bool same(const AstNode* samep) const override { const AstAssocArrayDType* asamep = static_cast(samep); + if (!asamep->subDTypep()) return false; + if (!asamep->keyDTypep()) return false; return (subDTypep() == asamep->subDTypep() && keyDTypep() == asamep->keyDTypep()); } virtual bool similarDType(AstNodeDType* samep) const override { const AstAssocArrayDType* asamep = static_cast(samep); + if (!asamep->subDTypep()) return false; return (subDTypep()->skipRefp()->similarDType(asamep->subDTypep()->skipRefp())); } virtual string prettyDTypeName() const override; @@ -635,10 +638,12 @@ public: } virtual bool same(const AstNode* samep) const override { const AstAssocArrayDType* asamep = static_cast(samep); + if (!asamep->subDTypep()) return false; return subDTypep() == asamep->subDTypep(); } virtual bool similarDType(AstNodeDType* samep) const override { const AstAssocArrayDType* asamep = static_cast(samep); + if (!asamep->subDTypep()) return false; return (subDTypep()->skipRefp()->similarDType(asamep->subDTypep()->skipRefp())); } virtual string prettyDTypeName() const override; @@ -741,10 +746,12 @@ public: } virtual bool same(const AstNode* samep) const override { const AstNodeArrayDType* asamep = static_cast(samep); + if (!asamep->subDTypep()) return false; return (subDTypep() == asamep->subDTypep()); } virtual bool similarDType(AstNodeDType* samep) const override { const AstNodeArrayDType* asamep = static_cast(samep); + if (!asamep->subDTypep()) return false; return (subDTypep()->skipRefp()->similarDType(asamep->subDTypep()->skipRefp())); } virtual void dumpSmall(std::ostream& str) const override; @@ -1104,10 +1111,12 @@ public: } virtual bool same(const AstNode* samep) const override { const AstQueueDType* asamep = static_cast(samep); + if (!asamep->subDTypep()) return false; return (subDTypep() == asamep->subDTypep()); } virtual bool similarDType(AstNodeDType* samep) const override { const AstQueueDType* asamep = static_cast(samep); + if (!asamep->subDTypep()) return false; return (subDTypep()->skipRefp()->similarDType(asamep->subDTypep()->skipRefp())); } virtual void dumpSmall(std::ostream& str) const override;