diff --git a/ivtest/ivltests/enum_in_class.v b/ivtest/ivltests/enum_in_class.v new file mode 100644 index 000000000..df5749f57 --- /dev/null +++ b/ivtest/ivltests/enum_in_class.v @@ -0,0 +1,52 @@ +// Check that when a enum type is declared inside a class that the enum is +// properly installed in the scope and the enum items are available. +// +// Also check that when using a typedef of a enum inside a class that the enum +// is not elaborated inside the class and it is possible to have a enum with the +// same names inside the class scope. + +module test; + +typedef enum integer { + A = 1 +} e1_t; + +class C; + typedef enum integer { + A = 10 + } e2_t; + e1_t e1; + e2_t e2; + + function new(); + e1 = test.A; + e2 = A; + endfunction + + function void set(e2_t new_e2); + e2 = new_e2; + endfunction + +endclass + +C c; + +initial begin + c = new; + c.e1 = A; + c.set(c.e2); + + // Not yet supported + // c.e2 = C::A; + // c.e2 = c.A; + + // Check that they have the numerical value from the right scope + if (c.e1 == 1 && c.e2 == 10) begin + $display("PASSED"); + end else begin + $display("FAILED"); + end +end + + +endmodule diff --git a/ivtest/ivltests/enum_in_class_name_coll.v b/ivtest/ivltests/enum_in_class_name_coll.v new file mode 100644 index 000000000..af161f0f5 --- /dev/null +++ b/ivtest/ivltests/enum_in_class_name_coll.v @@ -0,0 +1,13 @@ +// Check that the enum names are added to the lexor scope of the class and +// name collisions with other symbols are reported as errors. + +module test; + +class C; + enum { + A = 10 + } e; + typedef int A; +endclass + +endmodule diff --git a/ivtest/ivltests/enum_in_struct.v b/ivtest/ivltests/enum_in_struct.v new file mode 100644 index 000000000..2d81ee6dc --- /dev/null +++ b/ivtest/ivltests/enum_in_struct.v @@ -0,0 +1,21 @@ +// Check that when a enum type is declared inside a struct that the enum is +// properly installed in the scope and the enum items are available + +module test; + +struct packed { + enum integer { + A + } e; +} s; + +initial begin + s.e = A; + if (s.e == A) begin + $display("PASSED"); + end else begin + $display("FAILED"); + end +end + +endmodule diff --git a/ivtest/regress-sv.list b/ivtest/regress-sv.list index 763de3c0e..530bfd72c 100644 --- a/ivtest/regress-sv.list +++ b/ivtest/regress-sv.list @@ -231,6 +231,9 @@ edge normal,-g2009 ivltests enum_base_range normal,-g2005-sv ivltests enum_elem_ranges normal,-g2005-sv ivltests enum_dims_invalid CE,-g2005-sv ivltests +enum_in_struct normal,-g2005-sv ivltests +enum_in_class normal,-g2005-sv ivltests +enum_in_class_name_coll CE,-g2005-sv ivltests enum_next normal,-g2005-sv ivltests enum_ports normal,-g2005-sv ivltests enum_test1 normal,-g2005-sv ivltests diff --git a/ivtest/regress-vlog95.list b/ivtest/regress-vlog95.list index a6e23db82..fdb1934a6 100644 --- a/ivtest/regress-vlog95.list +++ b/ivtest/regress-vlog95.list @@ -336,6 +336,8 @@ br_gh391 CE,-g2009 ivltests br_gh437 CE,-g2009 ivltests br_gh445 CE,-g2009 ivltests br_gh461 CE,-g2009 ivltests +enum_in_class CE,-g2005-sv ivltests +enum_in_class_name_coll CE,-g2005-sv ivltests sv_class1 CE,-g2009 ivltests sv_class2 CE,-g2009 ivltests sv_class3 CE,-g2009 ivltests diff --git a/ivtest/regression_report-devel.txt b/ivtest/regression_report-devel.txt index f4cd7746b..795b643ce 100644 --- a/ivtest/regression_report-devel.txt +++ b/ivtest/regression_report-devel.txt @@ -2006,6 +2006,9 @@ test_mos_strength_reduction: Passed. enum_base_range: Passed. enum_elem_ranges: Passed. enum_dims_invalid: Passed - CE. + enum_in_struct: Passed. + enum_in_class: Passed. + enum_in_class_name_coll: Passed - CE. enum_next: Passed. enum_ports: Passed. enum_test1: Passed. @@ -2562,4 +2565,4 @@ test_mos_strength_reduction: Passed. ufuncsynth1: Passed. ============================================================================ Test results: - Total=2560, Passed=2554, Failed=3, Not Implemented=0, Expected Fail=3 + Total=2563, Passed=2557, Failed=3, Not Implemented=0, Expected Fail=3 diff --git a/ivtest/regression_report-fsv.txt b/ivtest/regression_report-fsv.txt index c91018241..d9a06e151 100644 --- a/ivtest/regression_report-fsv.txt +++ b/ivtest/regression_report-fsv.txt @@ -2013,6 +2013,9 @@ test_mos_strength_reduction: Passed. enum_base_range: Passed. enum_elem_ranges: Passed. enum_dims_invalid: Passed - CE. + enum_in_struct: Passed. + enum_in_class: Passed. + enum_in_class_name_coll: Passed - CE. enum_next: Passed. enum_ports: Passed. enum_test1: Passed. @@ -2562,4 +2565,4 @@ test_mos_strength_reduction: Passed. ufuncsynth1: Passed. ============================================================================ Test results: - Total=2560, Passed=2540, Failed=17, Not Implemented=3, Expected Fail=0 + Total=2563, Passed=2543, Failed=17, Not Implemented=3, Expected Fail=0 diff --git a/ivtest/regression_report-strict.txt b/ivtest/regression_report-strict.txt index 44bfa4d87..684e37358 100644 --- a/ivtest/regression_report-strict.txt +++ b/ivtest/regression_report-strict.txt @@ -2002,6 +2002,9 @@ test_mos_strength_reduction: Passed. enum_base_range: Passed. enum_elem_ranges: Passed. enum_dims_invalid: Passed - CE. + enum_in_struct: Passed. + enum_in_class: Passed. + enum_in_class_name_coll: Passed - CE. enum_next: Passed. enum_ports: Passed. enum_test1: Passed. @@ -2559,4 +2562,4 @@ test_mos_strength_reduction: Passed. ufuncsynth1: Passed. ============================================================================ Test results: - Total=2557, Passed=2551, Failed=3, Not Implemented=0, Expected Fail=3 + Total=2560, Passed=2554, Failed=3, Not Implemented=0, Expected Fail=3 diff --git a/ivtest/regression_report-vlog95.txt b/ivtest/regression_report-vlog95.txt index 783ba0429..f59f4c4de 100644 --- a/ivtest/regression_report-vlog95.txt +++ b/ivtest/regression_report-vlog95.txt @@ -248,6 +248,8 @@ Running vlog95 compiler/VVP tests for Icarus Verilog version: 12. br_gh437: Passed - CE. br_gh445: Passed - CE. br_gh461: Passed - CE. + enum_in_class: Passed - CE. + enum_in_class_name_coll: Passed - CE. sv_class1: Passed - CE. sv_class2: Passed - CE. sv_class3: Passed - CE. @@ -2309,6 +2311,7 @@ test_mos_strength_reduction: Passed. edge: Passed. enum_base_range: Passed. enum_dims_invalid: Passed - CE. + enum_in_struct: Passed. enum_test2: Passed. enum_test3: Passed - CE. enum_test4: Passed. @@ -2562,4 +2565,4 @@ test_mos_strength_reduction: Passed. synth_if_no_else: Passed. ============================================================================ Test results: - Total=2560, Passed=2521, Failed=2, Not Implemented=3, Expected Fail=34 + Total=2563, Passed=2524, Failed=2, Not Implemented=3, Expected Fail=34