From 3939126625db144207551593f8d9603253c6ac87 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Fri, 11 Mar 2022 21:24:17 +0100 Subject: [PATCH 1/2] Handle empty class item declarations in parser The SystemVerilog grammar explicitly allows an empty class item declaration. The empty class item declaration is just a semicolon and has no effect. E.g. the following is legal ``` class C int x;;; endclass ``` Add support to the parser to accept empty class item declarations. Signed-off-by: Lars-Peter Clausen --- parse.y | 3 +++ 1 file changed, 3 insertions(+) diff --git a/parse.y b/parse.y index 50d5e62b0..9ac90a9fd 100644 --- a/parse.y +++ b/parse.y @@ -979,6 +979,9 @@ class_item /* IEEE1800-2005: A.1.8 */ | parameter_declaration + /* Empty class item */ + | ';' + | error ';' { yyerror(@2, "error: invalid class item."); yyerrok; From 9fd91a8df8dda9aa96edb309aea81a13e84289ac Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Fri, 11 Mar 2022 21:25:18 +0100 Subject: [PATCH 2/2] Add regression test for empty class item Check that the empty class item is supported by the parser. Signed-off-by: Lars-Peter Clausen --- ivtest/ivltests/sv_class_empty_item.v | 22 ++++++++++++++++++++++ ivtest/regress-sv.list | 1 + ivtest/regress-vlog95.list | 1 + 3 files changed, 24 insertions(+) create mode 100644 ivtest/ivltests/sv_class_empty_item.v diff --git a/ivtest/ivltests/sv_class_empty_item.v b/ivtest/ivltests/sv_class_empty_item.v new file mode 100644 index 000000000..725b37c7b --- /dev/null +++ b/ivtest/ivltests/sv_class_empty_item.v @@ -0,0 +1,22 @@ +// Check that empty item declarations are supported for classes + +module test; + +class C; + ; + int x;; + + task test; + $display("PASSED"); + endtask; + ; +endclass + + C c; + + initial begin + c = new; + c.test; + end + +endmodule diff --git a/ivtest/regress-sv.list b/ivtest/regress-sv.list index ee99c29f7..f5a39d697 100644 --- a/ivtest/regress-sv.list +++ b/ivtest/regress-sv.list @@ -442,6 +442,7 @@ sv_class21 normal,-g2009 ivltests sv_class22 normal,-g2009 ivltests sv_class23 normal,-g2009 ivltests sv_class24 normal,-g2009 ivltests +sv_class_empty_item normal,-g2009 ivltests sv_class_extends_scoped normal,-g2009 ivltests sv_class_localparam normal,-g2009 ivltests sv_class_new_init normal,-g2009 ivltests diff --git a/ivtest/regress-vlog95.list b/ivtest/regress-vlog95.list index a03185273..a18da3562 100644 --- a/ivtest/regress-vlog95.list +++ b/ivtest/regress-vlog95.list @@ -365,6 +365,7 @@ sv_class21 CE,-g2009 ivltests sv_class22 CE,-g2009 ivltests sv_class23 CE,-g2009 ivltests sv_class24 CE,-g2009 ivltests +sv_class_empty_item CE,-g2009 ivltests sv_class_extends_scoped CE,-g2009 ivltests sv_class_localparam CE,-g2009 ivltests sv_class_new_init CE,-g2009 ivltests