Skip to content

Commit d5a0359

Browse files
Reorder address checks
This is a slight change in functionality. A future refactor of the address checks will necessitate reordering these anyway, and doing it in isolation first gives us some additional confidence that our refactor didn’t have any unintended consequences aside from the reordering. Also changes the regression tests that break because of the reorder.
1 parent f00b222 commit d5a0359

File tree

3 files changed

+10
-10
lines changed

3 files changed

+10
-10
lines changed

regression/cbmc/pointer-extra-checks/test.desc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ main.c
88
^\[main.pointer_dereference.3\] .* dereference failure: pointer outside object bounds in \*q: SUCCESS$
99
^\[main.pointer_dereference.4\] .* dereference failure: deallocated dynamic object in \*r: SUCCESS$
1010
^\[main.pointer_dereference.5\] .* dereference failure: pointer outside dynamic object bounds in \*r: SUCCESS$
11-
^\[main.pointer_dereference.6\] .* dereference failure: pointer invalid in \*s: FAILURE$
12-
^\[main.pointer_dereference.7\] .* dereference failure: pointer NULL in \*s: FAILURE$
11+
^\[main.pointer_dereference.6\] .* dereference failure: pointer NULL in \*s: FAILURE$
12+
^\[main.pointer_dereference.7\] .* dereference failure: pointer invalid in \*s: FAILURE$
1313
^\[main.pointer_dereference.8\] .* dereference failure: deallocated dynamic object in \*s: FAILURE$
1414
^\[main.pointer_dereference.9\] .* dereference failure: dead object in \*s: FAILURE$
1515
^\[main.pointer_dereference.10\] .* dereference failure: pointer outside dynamic object bounds in \*s: FAILURE$

regression/goto-harness/pointer-to-array-function-parameters-with-size/test.desc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ test.c
33
--harness-type call-function --function test --treat-pointer-as-array arr --associated-array-size arr:sz
44
^EXIT=0$
55
^SIGNAL=0$
6-
\[test.pointer_dereference.1\] line \d+ dereference failure: pointer invalid in arr\[\(signed( long)* int\)i\]: SUCCESS
7-
\[test.pointer_dereference.2\] line \d+ dereference failure: pointer NULL in arr\[\(signed( long)* int\)i\]: SUCCESS
6+
\[test.pointer_dereference.1\] line \d+ dereference failure: pointer NULL in arr\[\(signed( long)* int\)i\]: SUCCESS
7+
\[test.pointer_dereference.2\] line \d+ dereference failure: pointer invalid in arr\[\(signed( long)* int\)i\]: SUCCESS
88
\[test.pointer_dereference.3\] line \d+ dereference failure: deallocated dynamic object in arr\[\(signed( long)* int\)i\]: SUCCESS
99
\[test.pointer_dereference.4\] line \d+ dereference failure: dead object in arr\[\(signed( long)* int\)i\]: SUCCESS
1010
\[test.pointer_dereference.5\] line \d+ dereference failure: pointer outside dynamic object bounds in arr\[\(signed( long)* int\)i\]: SUCCESS

src/analyses/goto_check.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1298,12 +1298,6 @@ goto_checkt::address_check(const exprt &address, const exprt &size)
12981298

12991299
const bool unknown = flags.is_unknown() || flags.is_uninitialized();
13001300

1301-
if(unknown)
1302-
{
1303-
conditions.push_back(conditiont{
1304-
not_exprt{is_invalid_pointer_exprt{address}}, "pointer invalid"});
1305-
}
1306-
13071301
if(unknown || flags.is_null())
13081302
{
13091303
conditions.push_back(conditiont(
@@ -1313,6 +1307,12 @@ goto_checkt::address_check(const exprt &address, const exprt &size)
13131307
"pointer NULL"));
13141308
}
13151309

1310+
if(unknown)
1311+
{
1312+
conditions.push_back(conditiont{
1313+
not_exprt{is_invalid_pointer_exprt{address}}, "pointer invalid"});
1314+
}
1315+
13161316
if(unknown || flags.is_dynamic_heap())
13171317
{
13181318
conditions.push_back(conditiont(

0 commit comments

Comments
 (0)