From 265272a9624a269cc58007647a7ab4c854424969 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Mon, 11 May 2026 20:11:47 -0700 Subject: [PATCH 1/2] Report error for `edge` event controls on named events Using an edge control with a named event is invalid. The existing elaboration code already reports an error for `posedge` and `negedge`, but the `edge` case falls through to the default path and triggers an assert. Handle `PEEvent::EDGE` like the other edge-control cases and report the same kind of error instead. Signed-off-by: Lars-Peter Clausen --- elaborate.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/elaborate.cc b/elaborate.cc index 5216ad7b7..09c9ca2f5 100644 --- a/elaborate.cc +++ b/elaborate.cc @@ -4975,6 +4975,9 @@ cerr << endl; case PEEvent::NEGEDGE: cerr << "negedge"; break; + case PEEvent::EDGE: + cerr << "edge"; + break; default: cerr << "unknown edge type!"; ivl_assert(*this, 0); From ba3f46722c082a5f641a20688a330fc7f83fb220 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Mon, 11 May 2026 20:12:01 -0700 Subject: [PATCH 2/2] Add regression tests for edge controls on named event errors Check that the compiler reports an error for `posedge`, `negedge` and `edge` event controls on named events. Edge controls can not be used with named events. There is already an existing test that checks both `posedge` and `negedge`. Split it into separate tests so that each invalid event control is checked independently. Signed-off-by: Lars-Peter Clausen --- ivtest/ivltests/named_event_edge_fail.v | 11 +++++++++++ ivtest/ivltests/named_event_negedge_fail.v | 11 +++++++++++ ivtest/ivltests/named_event_no_edges.v | 15 --------------- ivtest/ivltests/named_event_posedge_fail.v | 11 +++++++++++ ivtest/regress-vlg.list | 1 - ivtest/regress-vvp.list | 3 +++ ivtest/vvp_tests/named_event_edge_fail.json | 5 +++++ ivtest/vvp_tests/named_event_negedge_fail.json | 4 ++++ ivtest/vvp_tests/named_event_posedge_fail.json | 4 ++++ 9 files changed, 49 insertions(+), 16 deletions(-) create mode 100644 ivtest/ivltests/named_event_edge_fail.v create mode 100644 ivtest/ivltests/named_event_negedge_fail.v delete mode 100644 ivtest/ivltests/named_event_no_edges.v create mode 100644 ivtest/ivltests/named_event_posedge_fail.v create mode 100644 ivtest/vvp_tests/named_event_edge_fail.json create mode 100644 ivtest/vvp_tests/named_event_negedge_fail.json create mode 100644 ivtest/vvp_tests/named_event_posedge_fail.json diff --git a/ivtest/ivltests/named_event_edge_fail.v b/ivtest/ivltests/named_event_edge_fail.v new file mode 100644 index 000000000..fbc51908c --- /dev/null +++ b/ivtest/ivltests/named_event_edge_fail.v @@ -0,0 +1,11 @@ +// Check that edge event controls can not be used with named events. + +module test; + + event e; + + initial begin + @(edge e); + end + +endmodule diff --git a/ivtest/ivltests/named_event_negedge_fail.v b/ivtest/ivltests/named_event_negedge_fail.v new file mode 100644 index 000000000..34b9c21f5 --- /dev/null +++ b/ivtest/ivltests/named_event_negedge_fail.v @@ -0,0 +1,11 @@ +// Check that negedge event controls can not be used with named events. + +module test; + + event e; + + initial begin + @(negedge e); + end + +endmodule diff --git a/ivtest/ivltests/named_event_no_edges.v b/ivtest/ivltests/named_event_no_edges.v deleted file mode 100644 index 4bbee0336..000000000 --- a/ivtest/ivltests/named_event_no_edges.v +++ /dev/null @@ -1,15 +0,0 @@ -module top; - event my_event; - - // The following two line should be an error - // You can not take the edge of a named event. - always @(posedge my_event) $display("Posedge event."); - always @(negedge my_event) $display("Negedge event."); - // This should work correctly. - always @(my_event) $display("Any event edge."); - - initial begin - #1 ->my_event; - #1 $display("FAILED"); - end -endmodule diff --git a/ivtest/ivltests/named_event_posedge_fail.v b/ivtest/ivltests/named_event_posedge_fail.v new file mode 100644 index 000000000..fd441f4b5 --- /dev/null +++ b/ivtest/ivltests/named_event_posedge_fail.v @@ -0,0 +1,11 @@ +// Check that posedge event controls can not be used with named events. + +module test; + + event e; + + initial begin + @(posedge e); + end + +endmodule diff --git a/ivtest/regress-vlg.list b/ivtest/regress-vlg.list index 9309d3afa..55fbc8cc5 100644 --- a/ivtest/regress-vlg.list +++ b/ivtest/regress-vlg.list @@ -719,7 +719,6 @@ multi_bit_strength normal ivltests gold=multi_bit_strength.gold multi_driver_delay normal ivltests multiply_large normal ivltests # Takes care of PR222 muxtest normal ivltests # Validates that X sel and inputs same, output not X -named_event_no_edges CE ivltests nb_assign normal ivltests nb_delay normal ivltests nb_ec_concat normal ivltests diff --git a/ivtest/regress-vvp.list b/ivtest/regress-vvp.list index 13b3a3bf8..8424d7f55 100644 --- a/ivtest/regress-vvp.list +++ b/ivtest/regress-vvp.list @@ -156,6 +156,9 @@ module_port_array1 vvp_tests/module_port_array1.json module_port_array_fail1 vvp_tests/module_port_array_fail1.json module_port_array_init1 vvp_tests/module_port_array_init1.json monitor4 vvp_tests/monitor4.json +named_event_edge_fail vvp_tests/named_event_edge_fail.json +named_event_negedge_fail vvp_tests/named_event_negedge_fail.json +named_event_posedge_fail vvp_tests/named_event_posedge_fail.json non-polymorphic-abs vvp_tests/non-polymorphic-abs.json partsel_invalid_idx1 vvp_tests/partsel_invalid_idx1.json partsel_invalid_idx2 vvp_tests/partsel_invalid_idx2.json diff --git a/ivtest/vvp_tests/named_event_edge_fail.json b/ivtest/vvp_tests/named_event_edge_fail.json new file mode 100644 index 000000000..f572263f7 --- /dev/null +++ b/ivtest/vvp_tests/named_event_edge_fail.json @@ -0,0 +1,5 @@ +{ + "type" : "CE", + "source" : "named_event_edge_fail.v", + "iverilog-args" : [ "-g2005-sv" ] +} diff --git a/ivtest/vvp_tests/named_event_negedge_fail.json b/ivtest/vvp_tests/named_event_negedge_fail.json new file mode 100644 index 000000000..b0afab36a --- /dev/null +++ b/ivtest/vvp_tests/named_event_negedge_fail.json @@ -0,0 +1,4 @@ +{ + "type" : "CE", + "source" : "named_event_negedge_fail.v" +} diff --git a/ivtest/vvp_tests/named_event_posedge_fail.json b/ivtest/vvp_tests/named_event_posedge_fail.json new file mode 100644 index 000000000..2ae4014d7 --- /dev/null +++ b/ivtest/vvp_tests/named_event_posedge_fail.json @@ -0,0 +1,4 @@ +{ + "type" : "CE", + "source" : "named_event_posedge_fail.v" +}