// DESCRIPTION: Verilator: User coverage per-instance records for the same statement
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2026 Wilson Snyder
// SPDX-License-Identifier: CC0-1.0

module child (
    input clk,
    input en
);
  reg observed = 1'b0;
  reg [3:0] count = 0;

  same_stmt :
  cover property (@(posedge clk) en);

  always @(posedge clk) begin
    observed <= en;
    if (en) begin
      count <= count + 1'b1;
    end
    else begin
      count <= count;
    end
  end
endmodule

module wrap (
    input clk,
    input en
);
  child dut_b (
      .clk(clk),
      .en(en)
  );
endmodule

module tb;
  reg clk = 0;
  reg [3:0] cyc = 0;

  // Same user cover statement at two different hierarchy points.
  // Expected with per_instance: dut_a count=4, wrap_b.dut_b count=1.
  child dut_a (
      .clk(clk),
      .en(cyc < 4)
  );

  wrap wrap_b (
      .clk(clk),
      .en(cyc == 0)
  );

  always @(posedge clk) begin
    cyc <= cyc + 1'b1;
  end

  always #1 clk = !clk;

  always @(posedge clk) begin
    if (cyc == 8) begin
      $write("*-* All Finished *-*\n");
      $finish;
    end
  end
endmodule
