Skip to content

Commit 8d28b46

Browse files
authored
Merge pull request #706 from diffblue/smv_set1
SMV: IDs and test for set operators
2 parents db8c89a + c635bb1 commit 8d28b46

File tree

6 files changed

+35
-5
lines changed

6 files changed

+35
-5
lines changed

regression/ebmc/smv/smv_set1.desc

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
smv_set1.smv
3+
--bdd
4+
^\[.*\] x != 3: PROVED$
5+
^EXIT=0$
6+
^SIGNAL=0$
7+
--
8+
^warning: ignoring

regression/ebmc/smv/smv_set1.smv

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
MODULE main
2+
3+
VAR x : 1..3;
4+
ASSIGN init(x) := {1, 2};
5+
next(x) := x;
6+
7+
SPEC x != 3;

src/hw_cbmc_irep_ids.h

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ IREP_ID_ONE(G)
1717
IREP_ID_ONE(X)
1818
IREP_ID_ONE(smv_iff)
1919
IREP_ID_TWO(C_smv_iff, "#smv_iff")
20+
IREP_ID_ONE(smv_setin)
21+
IREP_ID_ONE(smv_setnotin)
22+
IREP_ID_ONE(smv_union)
2023
IREP_ID_ONE(sva_accept_on)
2124
IREP_ID_ONE(sva_reject_on)
2225
IREP_ID_ONE(sva_sync_accept_on)

src/smvlang/expr2smv.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,15 @@ bool expr2smvt::convert(
464464
return convert_binary(
465465
src, dest, src.id_string(), precedence = precedencet::MULT);
466466

467+
else if(src.id() == ID_smv_setin)
468+
return convert_binary(src, dest, "in", precedence = precedencet::IN);
469+
470+
else if(src.id() == ID_smv_setnotin)
471+
return convert_binary(src, dest, "notin", precedence = precedencet::IN);
472+
473+
else if(src.id() == ID_smv_union)
474+
return convert_binary(src, dest, "union", precedence = precedencet::UNION);
475+
467476
else if(src.id()==ID_lt || src.id()==ID_gt ||
468477
src.id()==ID_le || src.id()==ID_ge)
469478
return convert_binary(
@@ -528,6 +537,9 @@ bool expr2smvt::convert(
528537
else if(src.id()=="smv_nondet_choice")
529538
return convert_nondet_choice(src, dest, precedence);
530539

540+
else if(src.id() == ID_constraint_select_one)
541+
return convert_nondet_choice(src, dest, precedence);
542+
531543
else if(src.id()==ID_nondet_bool)
532544
{
533545
exprt nondet_choice_expr("smv_nondet_choice");

src/smvlang/parser.y

+3-3
Original file line numberDiff line numberDiff line change
@@ -482,9 +482,9 @@ term : variable_name
482482
| term LE_Token term { binary($$, $1, ID_le, $3, bool_typet{}); }
483483
| term GT_Token term { binary($$, $1, ID_gt, $3, bool_typet{}); }
484484
| term GE_Token term { binary($$, $1, ID_ge, $3, bool_typet{}); }
485-
| term UNION_Token term { binary($$, $1, "smv_union", $3, bool_typet{}); }
486-
| term IN_Token term { binary($$, $1, "smv_setin", $3, bool_typet{}); }
487-
| term NOTIN_Token term { binary($$, $1, "smv_setnotin", $3, bool_typet{}); }
485+
| term UNION_Token term { binary($$, $1, ID_smv_union, $3, bool_typet{}); }
486+
| term IN_Token term { binary($$, $1, ID_smv_setin, $3, bool_typet{}); }
487+
| term NOTIN_Token term { binary($$, $1, ID_smv_setnotin, $3, bool_typet{}); }
488488
;
489489

490490
formula_list: formula { init($$); mto($$, $1); }

src/smvlang/smv_typecheck.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -989,11 +989,11 @@ void smv_typecheckt::typecheck(
989989
else if(expr.id()==ID_typecast)
990990
{
991991
}
992-
else if(expr.id()=="smv_setin")
992+
else if(expr.id() == ID_smv_setin)
993993
{
994994
expr.type()=bool_typet();
995995
}
996-
else if(expr.id()=="smv_setnotin")
996+
else if(expr.id() == ID_smv_setnotin)
997997
{
998998
expr.type()=bool_typet();
999999
}

0 commit comments

Comments
 (0)