Skip to content

Commit

Permalink
SMV: do not allow defining identifiers that are already declared
Browse files Browse the repository at this point in the history
VAR x : ... followed by DEFINE x := ... must be errored.
  • Loading branch information
kroening committed Feb 9, 2025
1 parent ed94b75 commit 35ecf21
Show file tree
Hide file tree
Showing 15 changed files with 104 additions and 1 deletion.
8 changes: 8 additions & 0 deletions regression/smv/assign/assign1.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
KNOWNBUG
assign1.smv

^file .* line 6: variable `x' already assigned.*$
^EXIT=1$
^SIGNAL=0$
--
--
8 changes: 8 additions & 0 deletions regression/smv/assign/assign1.smv
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
MODULE main

VAR x : 1..4;

ASSIGN x := 1;

-- not allowed, x is already assigned
ASSIGN init(x) := 2;
8 changes: 8 additions & 0 deletions regression/smv/assign/assign2.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
KNOWNBUG
assign1.smv

^file .* line 6: variable `x' already assigned.*$
^EXIT=1$
^SIGNAL=0$
--
--
8 changes: 8 additions & 0 deletions regression/smv/assign/assign2.smv
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
MODULE main

VAR x : 1..4;

ASSIGN x := 1;

-- not allowed, x is already assigned
ASSIGN next(x) := 2;
8 changes: 8 additions & 0 deletions regression/smv/define/define2.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CORE
define2.smv

^file .* line 6: variable `x' already declared.*$
^EXIT=1$
^SIGNAL=0$
--
--
6 changes: 6 additions & 0 deletions regression/smv/define/define2.smv
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
MODULE main

VAR x : boolean;

-- not allowed, x is already a variable
DEFINE x := TRUE;
8 changes: 8 additions & 0 deletions regression/smv/define/define3.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CORE
define3.smv

^file .* line 6: variable `x' already defined.*$
^EXIT=1$
^SIGNAL=0$
--
--
6 changes: 6 additions & 0 deletions regression/smv/define/define3.smv
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
MODULE main

DEFINE x := TRUE;

-- not allowed, x is already defined
VAR x : boolean;
8 changes: 8 additions & 0 deletions regression/smv/define/define4.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CORE
define4.smv

^file .* line 6: variable `x' already defined.*$
^EXIT=1$
^SIGNAL=0$
--
--
6 changes: 6 additions & 0 deletions regression/smv/define/define4.smv
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
MODULE main

DEFINE x := TRUE;

-- not allowed, x is already defined
ASSIGN x := TRUE;
8 changes: 8 additions & 0 deletions regression/smv/define/define5.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
KNOWNBUG
define5.smv

^file .* line 6: variable `x' already defined.*$
^EXIT=1$
^SIGNAL=0$
--
--
6 changes: 6 additions & 0 deletions regression/smv/define/define5.smv
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
MODULE main

DEFINE x := TRUE;

-- not allowed, x is already defined
ASSIGN next(x) := TRUE;
8 changes: 8 additions & 0 deletions regression/smv/define/define6.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
KNOWNBUG
define6.smv

^file .* line 6: variable `x' already defined.*$
^EXIT=1$
^SIGNAL=0$
--
--
6 changes: 6 additions & 0 deletions regression/smv/define/define6.smv
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
MODULE main

DEFINE x := TRUE;

-- not allowed, x is already defined
ASSIGN init(x) := TRUE;
3 changes: 2 additions & 1 deletion src/smvlang/parser.y
Original file line number Diff line number Diff line change
Expand Up @@ -489,7 +489,8 @@ define : assignment_var BECOMES_Token formula ';'
break;

case smv_parse_treet::mc_vart::DECLARED:
var.var_class=smv_parse_treet::mc_vart::DEFINED;
yyerror("variable `"+id2string(identifier)+"' already declared");
YYERROR;
break;

case smv_parse_treet::mc_vart::DEFINED:
Expand Down

0 comments on commit 35ecf21

Please sign in to comment.