diff --git a/src/V3LinkParse.cpp b/src/V3LinkParse.cpp index 321b94a7e..d0ae85bcb 100644 --- a/src/V3LinkParse.cpp +++ b/src/V3LinkParse.cpp @@ -1263,6 +1263,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 62f657e1b..c9a6c2ecb 100644 --- a/src/verilog.y +++ b/src/verilog.y @@ -6941,7 +6941,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 ';'