Fix object destruction after a copy constructor (#4540) (#4541)

This commit is contained in:
Ryszard Rozak 2023-10-05 13:21:33 +02:00 committed by GitHub
parent 25fa1d7c6a
commit 1c738c6b83
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 58 additions and 1 deletions

View File

@ -1478,7 +1478,7 @@ class VlClass VL_NOT_FINAL : public VlDeletable {
public:
// CONSTRUCTORS
VlClass() { refCountInc(); }
VlClass(const VlClass& copied) {}
VlClass(const VlClass& copied) { refCountInc(); }
~VlClass() override = default;
};

21
test_regress/t/t_class_copy2.pl Executable file
View File

@ -0,0 +1,21 @@
#!/usr/bin/env perl
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# Copyright 2020 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0.
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
scenarios(simulator => 1);
compile(
);
execute(
check_finished => 1,
);
ok(1);
1;

View File

@ -0,0 +1,36 @@
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain, for
// any use, without warranty, 2023 by Antmicro Ltd.
// SPDX-License-Identifier: CC0-1.0
`define stop $stop
`define checkh(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got='h%x exp='h%x\n", `__FILE__,`__LINE__, (gotv), (expv)); $stop; end while(0);
class Cls;
bit x = 1;
endclass
module t (/*AUTOARG*/);
Cls obj1;
Cls obj2;
initial begin
obj1 = new;
`checkh(obj1.x, 1);
obj1.x = 0;
obj2 = new obj1;
`checkh(obj2.x, 0);
obj2.x = 1;
`checkh(obj1.x, 0);
`checkh(obj2.x, 1);
obj2.x = 0;
`checkh(obj2.x, 0);
$write("*-* All Finished *-*\n");
$finish;
end
endmodule