Skip to content

Commit 892735f

Browse files
authored
Merge pull request #937 from diffblue/posedge_real
Verilog: error on real operand for edge control
2 parents ce3098d + aa53cdd commit 892735f

File tree

3 files changed

+27
-0
lines changed

3 files changed

+27
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
CORE
2+
posedge_real.v
3+
--module main
4+
^file posedge_real.v line \d+: edge event controls do not take real operands$
5+
^EXIT=2$
6+
^SIGNAL=0$
7+
--
8+
^warning: ignoring
9+
--
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
module main;
2+
3+
real data;
4+
5+
always @(posedge data);
6+
7+
endmodule

src/verilog/verilog_typecheck_expr.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2568,6 +2568,17 @@ exprt verilog_typecheck_exprt::convert_unary_expr(unary_exprt expr)
25682568
else if(expr.id() == ID_posedge || expr.id() == ID_negedge)
25692569
{
25702570
convert_expr(expr.op());
2571+
2572+
// 1800-2017 6.12.1
2573+
// Edge event controls must not be given real operands.
2574+
if(
2575+
expr.op().type().id() == ID_verilog_shortreal ||
2576+
expr.op().type().id() == ID_verilog_real)
2577+
{
2578+
throw errort().with_location(expr.source_location())
2579+
<< "edge event controls do not take real operands";
2580+
}
2581+
25712582
expr.type() = bool_typet{};
25722583
}
25732584
else if(expr.id() == ID_verilog_smv_eventually)

0 commit comments

Comments
 (0)