Skip to content

Commit a1baea5

Browse files
For Java skip the check for dereference of a deallocated or dead object
1 parent 5b67c01 commit a1baea5

File tree

1 file changed

+25
-16
lines changed

1 file changed

+25
-16
lines changed

src/analyses/goto_check.cpp

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -944,23 +944,32 @@ void goto_checkt::pointer_validity_check(
944944
expr,
945945
guard);
946946

947-
if(flags.is_unknown() || flags.is_dynamic_heap())
948-
add_guarded_claim(
949-
not_exprt(deallocated(pointer, ns)),
950-
"dereference failure: deallocated dynamic object",
951-
"pointer dereference",
952-
expr.find_source_location(),
953-
expr,
954-
guard);
947+
symbol_tablet symbol_table = ns.get_symbol_table();
955948

956-
if(flags.is_unknown() || flags.is_dynamic_local())
957-
add_guarded_claim(
958-
not_exprt(dead_object(pointer, ns)),
959-
"dereference failure: dead object",
960-
"pointer dereference",
961-
expr.find_source_location(),
962-
expr,
963-
guard);
949+
symbol_tablet::symbolst::iterator s_it =
950+
symbol_table.symbols.find(CPROVER_PREFIX "initialize");
951+
952+
// For Java don't check dereference of a deallocated or dead object
953+
if (s_it == symbol_table.symbols.end() || (s_it->second).mode != ID_java)
954+
{
955+
if(flags.is_unknown() || flags.is_dynamic_heap())
956+
add_guarded_claim(
957+
not_exprt(deallocated(pointer, ns)),
958+
"dereference failure: deallocated dynamic object",
959+
"pointer dereference",
960+
expr.find_source_location(),
961+
expr,
962+
guard);
963+
964+
if(flags.is_unknown() || flags.is_dynamic_local())
965+
add_guarded_claim(
966+
not_exprt(dead_object(pointer, ns)),
967+
"dereference failure: dead object",
968+
"pointer dereference",
969+
expr.find_source_location(),
970+
expr,
971+
guard);
972+
}
964973

965974
if(enable_bounds_check)
966975
{

0 commit comments

Comments
 (0)