Skip to content

Commit f061938

Browse files
authored
Merge pull request #4686 from tautschnig/fix-null-filtering
Fix value-set-based pointer test resolution for non-deterministic pointer values
2 parents 15ae90c + 86858a6 commit f061938

File tree

5 files changed

+25
-7
lines changed

5 files changed

+25
-7
lines changed

regression/cbmc/double_deref/double_deref_with_pointer_arithmetic.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ CORE
22
double_deref_with_pointer_arithmetic.c
33
--show-vcc
44
^\{-[0-9]+\} derefd_pointer::derefd_pointer!0#1 = symex_dynamic::dynamic_object1#3\[cast\(mod #source_location=""\(main::argc!0@1#1, 2\), signedbv\[64\]\)\]
5-
^\{1\} \(derefd_pointer::derefd_pointer!0#1 = address_of\(symex_dynamic::dynamic_object[23]\) \? main::argc!0@1#1 = 2 : main::argc!0@1#1 = 1\)
5+
^\{1\} \(derefd_pointer::derefd_pointer!0#1 = address_of\(symex_dynamic::dynamic_object[23]\) \? main::argc!0@1#1 = 2 : \(derefd_pointer::derefd_pointer!0#1 = address_of\(symex_dynamic::dynamic_object[23]\) \? main::argc!0@1#1 = 1 : symex::invalid_object!0#0 = main::argc!0@1#1\)\)
66
^EXIT=0$
77
^SIGNAL=0$
88
--
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
CORE
22
double_deref_with_pointer_arithmetic_single_alias.c
33
--show-vcc
4-
\{1\} main::argc!0@1#1 = 1
4+
\{1\} \(derefd_pointer::derefd_pointer!0#1 = address_of\(symex_dynamic::dynamic_object2\) \? main::argc!0@1#1 = 1 : symex::invalid_object!0#0 = main::argc!0@1#1\)
55
^EXIT=0$
66
^SIGNAL=0$
77
--
8-
derefd_pointer::derefd_pointer
9-
--
108
See README for details about these tests

regression/cbmc/null5/main.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
int *nondet_ptr();
2+
3+
int main()
4+
{
5+
int *ptr;
6+
ptr = nondet_ptr();
7+
if(ptr == 0)
8+
return;
9+
__CPROVER_assert(ptr != 0, "pointer cannot be null");
10+
}

regression/cbmc/null5/test.desc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CORE
2+
main.c
3+
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
^VERIFICATION SUCCESSFUL$
7+
--
8+
^warning: ignoring
9+
--
10+
Pull request #4444 introduced optimisations during symbolic execution that
11+
caused this test to spuriously fail (as the branch `ptr == 0` was removed).

src/pointer-analysis/value_set.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -976,9 +976,8 @@ void value_sett::get_value_set_rec(
976976
}
977977
else
978978
{
979-
#if 0
980-
std::cout << "WARNING: not doing " << expr.id() << '\n';
981-
#endif
979+
// for example: expr.id() == ID_nondet_symbol
980+
insert(dest, exprt(ID_unknown, original_type));
982981
}
983982

984983
#ifdef DEBUG

0 commit comments

Comments
 (0)