diff --git a/src/V3LinkParse.cpp b/src/V3LinkParse.cpp index 5bf8633a7..75c1e9445 100644 --- a/src/V3LinkParse.cpp +++ b/src/V3LinkParse.cpp @@ -1151,6 +1151,10 @@ class LinkParseVisitor final : public VNVisitor { } void visit(AstCovergroup* nodep) override { + // If we're already inside a covergroup class, this is the sentinel AstCovergroup + // node carrying the clocking event for V3Covergroup — don't re-transform it. + if (m_modp && VN_IS(m_modp, Class) && VN_CAST(m_modp, Class)->isCovergroup()) return; + // Transform raw parse-time AstCovergroup into a fully-formed AstClass cleanFileline(nodep); diff --git a/src/verilog.y b/src/verilog.y index 9af8218ad..c7b436625 100644 --- a/src/verilog.y +++ b/src/verilog.y @@ -6913,7 +6913,7 @@ covergroup_declaration: // ==IEEE: covergroup_declaration else sampleArgsp = $4; } - $$ = new AstCovergroup{$2, *$2, static_cast($3), + $$ = new AstCovergroup{$1, *$2, static_cast($3), static_cast(sampleArgsp), $6, clockp}; GRAMMARP->endLabel($8, $$, $8); } | yCOVERGROUP yEXTENDS idAny ';'