Skip to content

Commit f38d738

Browse files
authored
Merge pull request #903 from diffblue/smv-empty
SMV: error on empty integer range
2 parents 3ce519c + 264181b commit f38d738

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed

regression/smv/range-type/empty.desc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CORE
2+
empty.smv
3+
4+
^file empty\.smv line 4: range is empty$
5+
^EXIT=2$
6+
^SIGNAL=0$
7+
--

regression/smv/range-type/empty.smv

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
MODULE main
2+
3+
-- wrong order
4+
VAR x : 10..1;
5+

src/smvlang/smv_typecheck.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,8 +472,14 @@ smv_ranget smv_typecheckt::convert_type(const typet &src)
472472
}
473473
else if(src.id()==ID_range)
474474
{
475-
dest.from=string2integer(src.get_string(ID_from));
476-
dest.to=string2integer(src.get_string(ID_to));
475+
auto from = string2integer(src.get_string(ID_from));
476+
auto to = string2integer(src.get_string(ID_to));
477+
478+
if(from > to)
479+
throw errort().with_location(src.source_location()) << "range is empty";
480+
481+
dest.from = from;
482+
dest.to = to;
477483
}
478484
else if(src.id()==ID_enumeration)
479485
{
@@ -1232,6 +1238,10 @@ void smv_typecheckt::convert(smv_parse_treet::mc_varst &vars)
12321238
{
12331239
const smv_parse_treet::mc_vart &var = var_it.second;
12341240

1241+
// check the type, if given
1242+
if(var.type.is_not_nil() && var.type.id() != "submodule")
1243+
convert_type(var.type);
1244+
12351245
symbol.base_name = var_it.first;
12361246

12371247
if(var.identifier=="")

0 commit comments

Comments
 (0)