From da043ca16d74d67f6b23f4c2a76496d294cadb58 Mon Sep 17 00:00:00 2001 From: Ryszard Rozak Date: Fri, 7 Jul 2023 13:20:23 +0200 Subject: [PATCH] Fix comparison of class objects (#4346) --- include/verilated_types.h | 10 ++++++++-- test_regress/t/t_class_compare.v | 9 +++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/include/verilated_types.h b/include/verilated_types.h index 5d5c41db2..6a77768c3 100644 --- a/include/verilated_types.h +++ b/include/verilated_types.h @@ -1508,8 +1508,14 @@ public: // For 'if (ptr)...' operator bool() const { return m_objp; } // In SV A == B iff both are handles to the same object (IEEE 1800-2017 8.4) - bool operator==(const VlClassRef& rhs) const { return m_objp == rhs.m_objp; }; - bool operator!=(const VlClassRef& rhs) const { return m_objp != rhs.m_objp; }; + template + bool operator==(const VlClassRef& rhs) const { + return m_objp == rhs.m_objp; + }; + template + bool operator!=(const VlClassRef& rhs) const { + return m_objp != rhs.m_objp; + }; }; template diff --git a/test_regress/t/t_class_compare.v b/test_regress/t/t_class_compare.v index ee4826725..bcbb1842a 100644 --- a/test_regress/t/t_class_compare.v +++ b/test_regress/t/t_class_compare.v @@ -14,13 +14,22 @@ class Cls; int i; endclass +class ExtendCls extends Cls; +endclass + module t; initial begin Cls a = new; Cls b = new; + ExtendCls ext = new; `check_ne(a, b) + `check_ne(a, ext) + `check_ne(ext, a) a = b; `check_eq(a, b) + a = ext; + `check_eq(a, ext) + `check_eq(ext, a) $write("*-* All Finished *-*\n"); $finish; end