Skip to content

Commit efd40b2

Browse files
committed
allow ID_index expressions in history variables
1 parent 75b1e03 commit efd40b2

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#include <assert.h>
2+
3+
int main()
4+
{
5+
int i, n, x[10];
6+
__CPROVER_assume(x[0] == x[9]);
7+
while(i < n)
8+
__CPROVER_loop_invariant(x[0] == __CPROVER_loop_entry(x[0]))
9+
{
10+
x[0] = x[9] - 1;
11+
x[0]++;
12+
}
13+
assert(x[0] == x[9]);
14+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
CORE
2+
main.c
3+
--apply-loop-contracts
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
^VERIFICATION SUCCESSFUL$
7+
--
8+
^Tracking history of index expressions is not supported yet\.
9+
--
10+
This test checks that `ID_index` expressions are allowed within history variables.

src/goto-instrument/contracts/contracts.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -664,7 +664,8 @@ void code_contractst::replace_history_parameter(
664664
const auto &id = parameter.id();
665665
if(
666666
id == ID_dereference || id == ID_member || id == ID_symbol ||
667-
id == ID_ptrmember || id == ID_constant || id == ID_typecast)
667+
id == ID_ptrmember || id == ID_constant || id == ID_typecast ||
668+
id == ID_index)
668669
{
669670
auto it = parameter2history.find(parameter);
670671

0 commit comments

Comments
 (0)