Skip to content

Commit 61c93bf

Browse files
committed
SVA: type checking for SVA not
This fixes the type checking for the SVA not operator.
1 parent 8677980 commit 61c93bf

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

regression/verilog/SVA/sva_not1.desc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
CORE
2+
sva_not1.sv
3+
--k-induction
4+
^\[main\.p0] always not 0: PROVED$
5+
^\[main\.p1] always not 1: REFUTED$
6+
^EXIT=10$
7+
^SIGNAL=0$
8+
--
9+
^warning: ignoring

regression/verilog/SVA/sva_not1.sv

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module main;
2+
3+
// should pass
4+
p0: assert property (not 0);
5+
6+
// should fail
7+
p1: assert property (not 1);
8+
9+
endmodule

src/verilog/verilog_typecheck_expr.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2270,7 +2270,8 @@ exprt verilog_typecheck_exprt::convert_unary_expr(unary_exprt expr)
22702270
convert_expr(expr.op());
22712271

22722272
if (expr.op().type().id() == ID_verilog_signedbv ||
2273-
expr.op().type().id() == ID_verilog_unsignedbv) {
2273+
expr.op().type().id() == ID_verilog_unsignedbv)
2274+
{
22742275
expr.type()=verilog_unsignedbv_typet(1);
22752276
}
22762277
else
@@ -2279,6 +2280,13 @@ exprt verilog_typecheck_exprt::convert_unary_expr(unary_exprt expr)
22792280
make_boolean(expr.op());
22802281
}
22812282
}
2283+
else if(expr.id() == ID_sva_not)
2284+
{
2285+
convert_expr(expr.op());
2286+
make_boolean(expr.op());
2287+
expr.type()=bool_typet(); // always boolean, never x
2288+
return std::move(expr);
2289+
}
22822290
else if(expr.id()==ID_reduction_or || expr.id()==ID_reduction_and ||
22832291
expr.id()==ID_reduction_nor || expr.id()==ID_reduction_nand ||
22842292
expr.id()==ID_reduction_xor || expr.id()==ID_reduction_xnor)

0 commit comments

Comments
 (0)