verilator/test_regress/t/t_class_param_extends3.v

64 lines
1.6 KiB
Systemverilog

// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain, for
// any use, without warranty, 2023 by Wilson Snyder.
// SPDX-License-Identifier: CC0-1.0
package u_pkg;
typedef class u_report_object;
typedef class u_callback;
virtual class u_object;
endclass
class u_queue #(type T=int) extends u_object;
int m_value = 6;
endclass
class u_callbacks_base extends u_object;
typedef u_callbacks_base this_type;
endclass
class u_typed_callbacks#(type T=u_object) extends u_callbacks_base;
typedef u_typed_callbacks#(T) this_type;
static this_type m_t_inst;
static u_queue#(u_callback) m_tw_cb_q;
endclass
class u_callbacks #(type T=u_object, type CB=u_callback)
extends u_typed_callbacks#(T);
static function bit m_register_pair();
endfunction
static function void add(u_callback cb);
u_queue#(u_callback) qr;
qr = u_callbacks#(u_report_object,u_callback)::m_t_inst.m_tw_cb_q; //<<<<
if (qr.m_value != 6) $stop;
endfunction
endclass
class u_callback extends u_object;
endclass
virtual class u_report_catcher extends u_callback;
static local bit m_register_cb_u_report_catcher = u_callbacks#(u_report_object,u_report_catcher)::m_register_pair();
endclass
// Having this class (versus using #(u_object) is needed to hit the bug
class u_report_object extends u_object;
endclass
endpackage
module t;
u_pkg::u_callback cb;
initial begin
cb = new;
$write("*-* All Finished *-*\n");
$finish;
end
endmodule