Skip to content

Commit d59e110

Browse files
Initialize nondet locals in regression tests
Prepares for --uninitialized-check becoming a default check. Replace bare uninitialized local variable declarations with explicit initialization in ~175 regression test files. These tests use uninitialized locals as a shorthand for nondeterministic values (e.g., int x; __CPROVER_assume(x > 0);). This is undefined behaviour in C that we used to tolerate in CBMC. Once we enable --uninitialized-check by default, however, those would have become (unwanted) verification failures. Co-authored-by: Kiro <kiro-agent@users.noreply.github.com>
1 parent cd64a96 commit d59e110

File tree

175 files changed

+319
-303
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

175 files changed

+319
-303
lines changed

regression/cbmc/ACSL/operators.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
void boolean()
22
{
3-
__CPROVER_bool a, b;
3+
__CPROVER_bool a = __VERIFIER_nondet__Bool(), b = __VERIFIER_nondet__Bool();
44
__CPROVER_assert((ab) == (a == b), "≡");
55
__CPROVER_assert((ab) == (a != b), "≢");
66
__CPROVER_assert((ab) == (!a || b), "⇒");
@@ -13,7 +13,7 @@ void boolean()
1313

1414
void relations()
1515
{
16-
int a, b;
16+
int a = __VERIFIER_nondet_int(), b = __VERIFIER_nondet_int();
1717
__CPROVER_assert((ab) == (a >= b), "≥");
1818
__CPROVER_assert((ab) == (a <= b), "≤");
1919
__CPROVER_assert((ab) == (a == b), "≡");

regression/cbmc/Array_Pointer3/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
int x, y;
1+
int x = __VERIFIER_nondet_int(), y = __VERIFIER_nondet_int();
22

33
int z[10];
44

@@ -62,7 +62,7 @@ int f(int j, int k)
6262

6363
int main()
6464
{
65-
int x, y;
65+
int x = __VERIFIER_nondet_int(), y = __VERIFIER_nondet_int();
6666
__CPROVER_assume(x > y);
6767
__CPROVER_assume(x >= 0);
6868
__CPROVER_assume((y > 15) && (y < 18));

regression/cbmc/Array_UF1/main.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
int main()
22
{
33
int a[10], b[10];
4-
int x, y, z;
4+
int x = __VERIFIER_nondet_int(), y = __VERIFIER_nondet_int(),
5+
z = __VERIFIER_nondet_int();
56
__CPROVER_assume(2 <= y && y <= 4);
67
__CPROVER_assume(6 <= z && z <= 8);
78
b[y] = x;

regression/cbmc/Array_UF2/main.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
int main()
22
{
33
int a[4], b[4];
4-
int x, y, z;
4+
int x = __VERIFIER_nondet_int(), y = __VERIFIER_nondet_int(),
5+
z = __VERIFIER_nondet_int();
56
__CPROVER_assume(1 <= y && y <= 3);
67
__CPROVER_assume(0 <= z && z <= 2);
78
b[y] = x;

regression/cbmc/Array_operations1/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ void test_equal()
22
{
33
char array1[100], array2[100];
44
_Bool cmp;
5-
int index;
5+
int index = __VERIFIER_nondet_int();
66

77
cmp = __CPROVER_array_equal(array1, array2);
88

regression/cbmc/Array_operations2/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ int main()
1111
{
1212
my_struct arr[3] = {0};
1313
char *ptr = &(arr[1].c[2]);
14-
int offset;
14+
int offset = __VERIFIER_nondet_int();
1515
__CPROVER_assume(offset < 1 && offset > -1);
1616
void *ptr_plus = ptr + offset;
1717
char nondet[3];

regression/cbmc/Array_operations4/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ int main()
33
char source[8];
44
int int_source[2];
55
int target[4];
6-
int n;
6+
int n = __VERIFIER_nondet_int();
77
if(n >= 0 && n < 3)
88
{
99
__CPROVER_array_replace(&target[n], source);
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
#include <assert.h>
22

33
int main (void) {
4-
int x;
4+
int x = __VERIFIER_nondet_int();
55

6-
while ((x + 1) -x != 1) {
7-
assert(0);
8-
}
6+
while((x + 1) - x != 1)
7+
{
8+
assert(0);
9+
}
910

10-
return 0;
11+
return 0;
1112
}

regression/cbmc/BV_Arithmetic6/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
int main()
22
{
33
{
4-
unsigned i, j, k, l;
4+
unsigned i, j, k = __VERIFIER_nondet_unsigned(), l;
55

66
j=k;
77
i=j/2;
@@ -15,7 +15,7 @@ int main()
1515
}
1616

1717
{
18-
signed int i, j, k, l;
18+
signed int i, j, k = __VERIFIER_nondet_signed_int(), l;
1919

2020
// shifting rounds into the wrong direction
2121
__CPROVER_assume(!(k&1));

regression/cbmc/Bitfields1/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ struct bft {
3030
};
3131

3232
int main() {
33-
struct bft bf;
33+
struct bft bf = {0};
3434

3535
assert(bf.a<=7);
3636
assert(bf.b<=1);

0 commit comments

Comments
 (0)