From ec3c9832de1ae32a91e330e921b9340528a88a63 Mon Sep 17 00:00:00 2001 From: Geza Lore Date: Sat, 8 Nov 2025 13:02:39 +0000 Subject: [PATCH] Fix crash on Dfg driver lookup Fixes #6649 --- src/V3DfgVertices.h | 9 +-------- test_regress/t/t_dfg_break_cycles.v | 10 ++++++++++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/V3DfgVertices.h b/src/V3DfgVertices.h index a802a3a81..245b0919e 100644 --- a/src/V3DfgVertices.h +++ b/src/V3DfgVertices.h @@ -371,7 +371,7 @@ public: FileLine* driverFileLine(size_t idx) const { return m_driverData.at(idx).m_flp; } - DfgVertex* driverAt(size_t idx) { + DfgVertex* driverAt(size_t idx) const { const size_t n = nInputs(); for (size_t i = 0; i < n; ++i) { if (m_driverData[i].m_lo == idx) return inputp(i); @@ -379,13 +379,6 @@ public: return nullptr; } - const DfgVertex* driverAt(size_t idx) const { - for (const DriverData& dd : m_driverData) { - if (dd.m_lo == idx) return inputp(idx); - } - return nullptr; - } - // If drives the whole result explicitly (not through defaultp), this is // the actual driver this DfgVertexSplice can be replaced with. DfgVertex* wholep() { diff --git a/test_regress/t/t_dfg_break_cycles.v b/test_regress/t/t_dfg_break_cycles.v index 3e9891188..9aed4d9c1 100644 --- a/test_regress/t/t_dfg_break_cycles.v +++ b/test_regress/t/t_dfg_break_cycles.v @@ -261,4 +261,14 @@ module t ( `signal(PACKED_0_LSB, 1); assign PACKED_0_LSB = packed_0_lsb; + // verilator lint_off UNOPTFLAT + logic array_5 [0:6]; + // Unconnected d[0:3] + assign array_5[4] = array_5[0] ? array_5[0] : array_5[1]; + assign array_5[5] = array_5[2] ? array_5[2] : array_5[3]; + assign array_5[6] = array_5[4] ? array_5[4] : array_5[5]; + `signal(ARRAY_5, 1); + assign ARRAY_5 = array_5[6]; + // verilator lint_on + endmodule