From ea55421a0714903e000e659e81e2c6286701f8e1 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Wed, 30 Mar 2022 10:21:43 +0200 Subject: [PATCH] Add regression test for accessing static class properties Check that static class properties can be accessed for read and write and that they are shared between all instances of a class type. Check that this works for the following 3 cases * accessing the static property in a class function or task * accessing the static property in a class function or task using `this` * accessing the static property on a class object instance Signed-off-by: Lars-Peter Clausen --- ivtest/ivltests/sv_class_static_prop1.v | 30 ++++++++++++++++++++++++ ivtest/ivltests/sv_class_static_prop2.v | 30 ++++++++++++++++++++++++ ivtest/ivltests/sv_class_static_prop3.v | 31 +++++++++++++++++++++++++ ivtest/regress-sv.list | 3 +++ ivtest/regress-vlog95.list | 3 +++ 5 files changed, 97 insertions(+) create mode 100644 ivtest/ivltests/sv_class_static_prop1.v create mode 100644 ivtest/ivltests/sv_class_static_prop2.v create mode 100644 ivtest/ivltests/sv_class_static_prop3.v diff --git a/ivtest/ivltests/sv_class_static_prop1.v b/ivtest/ivltests/sv_class_static_prop1.v new file mode 100644 index 000000000..1ed34b5fe --- /dev/null +++ b/ivtest/ivltests/sv_class_static_prop1.v @@ -0,0 +1,30 @@ +// Check that static class properties can be accessed for read and write in +// class tasks. Check the property is shared across all instances and has the +// same value for all instances. + +class C; + static int i; + task t; + int x; + x = i; + i = x + 1; + endtask +endclass + +module test; + + C c1 = new; + C c2 = new; + C c3 = new; + + initial begin + c1.t(); + c2.t(); + if (c1.i == 2 && c2.i == 2 && c3.i == 2) begin + $display("PASSED"); + end else begin + $display("FAILED"); + end + end + +endmodule diff --git a/ivtest/ivltests/sv_class_static_prop2.v b/ivtest/ivltests/sv_class_static_prop2.v new file mode 100644 index 000000000..a176be049 --- /dev/null +++ b/ivtest/ivltests/sv_class_static_prop2.v @@ -0,0 +1,30 @@ +// Check that static class properties can be accessed for read and write in +// class tasks using `this`. Check the property is shared across all instances +// and has the same value for all instances. + +class C; + static int i; + task t; + int x; + x = this.i; + this.i = x + 1; + endtask +endclass + +module test; + + C c1 = new; + C c2 = new; + C c3 = new; + + initial begin + c1.t(); + c2.t(); + if (c1.i == 2 && c2.i == 2 && c3.i == 2) begin + $display("PASSED"); + end else begin + $display("FAILED"); + end + end + +endmodule diff --git a/ivtest/ivltests/sv_class_static_prop3.v b/ivtest/ivltests/sv_class_static_prop3.v new file mode 100644 index 000000000..3b1b2fb40 --- /dev/null +++ b/ivtest/ivltests/sv_class_static_prop3.v @@ -0,0 +1,31 @@ +// Check that static class properties can be accessed for read and write on a +// class object. Check the property is shared across all instances and has the +// same value for all instances. + +class C; + static int i; +endclass + +module test; + + C c1 = new; + C c2 = new; + C c3 = new; + + task t(C c); + int x; + x = c.i; + c.i = x + 1; + endtask + + initial begin + t(c1); + t(c2); + if (c1.i == 2 && c2.i == 2 && c3.i == 2) begin + $display("PASSED"); + end else begin + $display("FAILED"); + end + end + +endmodule diff --git a/ivtest/regress-sv.list b/ivtest/regress-sv.list index 15ea67e72..af749f4e1 100644 --- a/ivtest/regress-sv.list +++ b/ivtest/regress-sv.list @@ -487,6 +487,9 @@ sv_class_extends_scoped normal,-g2009 ivltests sv_class_localparam normal,-g2009 ivltests sv_class_new_init normal,-g2009 ivltests sv_class_in_module_decl normal,-g2009 ivltests +sv_class_static_prop1 normal,-g2009 ivltests +sv_class_static_prop2 normal,-g2009 ivltests +sv_class_static_prop3 normal,-g2009 ivltests sv_class_super1 normal,-g2009 ivltests sv_class_super2 normal,-g2009 ivltests sv_class_task1 normal,-g2009 ivltests diff --git a/ivtest/regress-vlog95.list b/ivtest/regress-vlog95.list index b70b1bd66..c4b85936a 100644 --- a/ivtest/regress-vlog95.list +++ b/ivtest/regress-vlog95.list @@ -383,6 +383,9 @@ sv_class_extends_scoped CE,-g2009 ivltests sv_class_localparam CE,-g2009 ivltests sv_class_new_init CE,-g2009 ivltests sv_class_in_module_decl CE,-g2009 ivltests +sv_class_static_prop1 CE,-g2009 ivltests +sv_class_static_prop2 CE,-g2009 ivltests +sv_class_static_prop3 CE,-g2009 ivltests sv_class_super1 CE,-g2009 ivltests sv_class_super2 CE,-g2009 ivltests sv_class_task1 CE,-g2009 ivltests