Add regression test for enums declared in structs and classes

These tests check that a enum that is declared in a struct or class are
correctly elaborated and also name collisions with the enum names are
detected.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
This commit is contained in:
Lars-Peter Clausen 2022-01-15 20:27:02 +01:00
parent 9e6f651e09
commit d856a35e4d
9 changed files with 107 additions and 4 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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