Skip to content

Commit 6397f62

Browse files
author
Daniel Kroening
authored
Merge pull request diffblue#2626 from qaphla/local_bitvector_analysis_fix
Fixed a bug in local_bitvector_analysis wherein an expression's ID was used in place of the expression's type's ID.
2 parents 0c0e288 + 1e07546 commit 6397f62

File tree

3 files changed

+19
-10
lines changed

3 files changed

+19
-10
lines changed

regression/cbmc/memory_allocation1/test.desc

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ main.c
33
--pointer-check
44
^EXIT=10$
55
^SIGNAL=0$
6-
\[main.pointer_dereference.2\] dereference failure: pointer invalid in \*p: SUCCESS
6+
\[main.pointer_dereference.[0-9]+\] dereference failure: pointer invalid in \*p: SUCCESS
77
\[main.assertion.1\] assertion \*p==42: SUCCESS
8-
\[main.pointer_dereference.14\] dereference failure: pointer invalid in p\[.*1\]: FAILURE
8+
\[main.pointer_dereference.[0-9]+\] dereference failure: pointer invalid in p\[.*1\]: FAILURE
99
\[main.assertion.2\] assertion \*\(p\+1\)==42: SUCCESS
10-
\*\* 12 of 26 failed
10+
^VERIFICATION FAILED$
1111
--
1212
^warning: ignoring

src/analyses/goto_check.cpp

+15-6
Original file line numberDiff line numberDiff line change
@@ -991,7 +991,8 @@ void goto_checkt::pointer_validity_check(
991991
allocs=disjunction(disjuncts);
992992
}
993993

994-
if(flags.is_unknown() || flags.is_null())
994+
if(flags.is_unknown() ||
995+
flags.is_null())
995996
{
996997
add_guarded_claim(
997998
or_exprt(allocs, not_exprt(null_pointer(pointer))),
@@ -1002,7 +1003,8 @@ void goto_checkt::pointer_validity_check(
10021003
guard);
10031004
}
10041005

1005-
if(flags.is_unknown())
1006+
if(flags.is_unknown() ||
1007+
flags.is_integer_address())
10061008
add_guarded_claim(
10071009
or_exprt(allocs, not_exprt(invalid_pointer(pointer))),
10081010
"dereference failure: pointer invalid",
@@ -1020,7 +1022,9 @@ void goto_checkt::pointer_validity_check(
10201022
expr,
10211023
guard);
10221024

1023-
if(flags.is_unknown() || flags.is_dynamic_heap())
1025+
if(flags.is_unknown() ||
1026+
flags.is_dynamic_heap() ||
1027+
flags.is_integer_address())
10241028
add_guarded_claim(
10251029
or_exprt(allocs, not_exprt(deallocated(pointer, ns))),
10261030
"dereference failure: deallocated dynamic object",
@@ -1029,7 +1033,9 @@ void goto_checkt::pointer_validity_check(
10291033
expr,
10301034
guard);
10311035

1032-
if(flags.is_unknown() || flags.is_dynamic_local())
1036+
if(flags.is_unknown() ||
1037+
flags.is_dynamic_local() ||
1038+
flags.is_integer_address())
10331039
add_guarded_claim(
10341040
or_exprt(allocs, not_exprt(dead_object(pointer, ns))),
10351041
"dereference failure: dead object",
@@ -1038,7 +1044,9 @@ void goto_checkt::pointer_validity_check(
10381044
expr,
10391045
guard);
10401046

1041-
if(flags.is_unknown() || flags.is_dynamic_heap())
1047+
if(flags.is_unknown() ||
1048+
flags.is_dynamic_heap() ||
1049+
flags.is_integer_address())
10421050
{
10431051
const or_exprt dynamic_bounds(
10441052
dynamic_object_lower_bound(pointer, ns, access_lb),
@@ -1059,7 +1067,8 @@ void goto_checkt::pointer_validity_check(
10591067

10601068
if(flags.is_unknown() ||
10611069
flags.is_dynamic_local() ||
1062-
flags.is_static_lifetime())
1070+
flags.is_static_lifetime() ||
1071+
flags.is_integer_address())
10631072
{
10641073
const or_exprt object_bounds(
10651074
object_lower_bound(pointer, ns, access_lb),

src/analyses/local_bitvector_analysis.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ bool local_bitvector_analysist::is_tracked(const irep_idt &identifier)
6262
{
6363
localst::locals_mapt::const_iterator it=locals.locals_map.find(identifier);
6464
if(it==locals.locals_map.end() ||
65-
it->second.id()!=ID_pointer ||
65+
it->second.type().id()!=ID_pointer ||
6666
dirty(identifier))
6767
return false;
6868

0 commit comments

Comments
 (0)