Skip to content

Commit 733b753

Browse files
committed
Don't try to create CPROVER_memory references when processing a Java source program.
1 parent 1c9abbd commit 733b753

File tree

5 files changed

+24
-4
lines changed

5 files changed

+24
-4
lines changed

src/cbmc/bmc.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Author: Daniel Kroening, [email protected]
1616
#include <util/time_stopping.h>
1717
#include <util/message.h>
1818
#include <util/json.h>
19+
#include <util/cprover_prefix.h>
1920

2021
#include <langapi/mode.h>
2122
#include <langapi/languages.h>
@@ -410,6 +411,12 @@ safety_checkert::resultt bmct::run(
410411
symex.set_message_handler(get_message_handler());
411412
symex.options=options;
412413

414+
{
415+
const symbolt *init_symbol;
416+
if(!ns.lookup(CPROVER_PREFIX "initialize", init_symbol))
417+
symex.mode=init_symbol->mode;
418+
}
419+
413420
status() << "Starting Bounded Model Checking" << eom;
414421

415422
symex.last_source_location.make_nil();

src/goto-symex/goto_symex.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class goto_symext
5151
new_symbol_table(_new_symbol_table),
5252
ns(_ns),
5353
target(_target),
54+
mode(),
5455
atomic_section_counter(0),
5556
guard_identifier("goto_symex::\\guard")
5657
{
@@ -95,9 +96,11 @@ class goto_symext
9596
optionst options;
9697
symbol_tablet &new_symbol_table;
9798

99+
irep_idt mode;
100+
98101
protected:
99102
const namespacet &ns;
100-
symex_targett &target;
103+
symex_targett &target;
101104
unsigned atomic_section_counter;
102105

103106
friend class symex_dereference_statet;

src/goto-symex/symex_dereference.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,8 @@ void goto_symext::dereference_rec(
295295
ns,
296296
new_symbol_table,
297297
options,
298-
symex_dereference_state);
298+
symex_dereference_state,
299+
mode);
299300

300301
// std::cout << "**** " << from_expr(ns, "", tmp1) << std::endl;
301302
exprt tmp2=dereference.dereference(

src/pointer-analysis/value_set_dereference.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,12 @@ value_set_dereferencet::valuet value_set_dereferencet::build_reference_to(
463463
// This is stuff like *((char *)5).
464464
// This is turned into an access to __CPROVER_memory[...].
465465

466+
if(language_mode==ID_java)
467+
{
468+
result.value=nil_exprt();
469+
return result;
470+
}
471+
466472
const symbolt &memory_symbol=ns.lookup(CPROVER_PREFIX "memory");
467473
exprt symbol_expr=symbol_exprt(memory_symbol.name, memory_symbol.type);
468474

src/pointer-analysis/value_set_dereference.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,13 @@ class value_set_dereferencet
3939
const namespacet &_ns,
4040
symbol_tablet &_new_symbol_table,
4141
const optionst &_options,
42-
dereference_callbackt &_dereference_callback):
42+
dereference_callbackt &_dereference_callback,
43+
const irep_idt _language_mode = irep_idt()):
4344
ns(_ns),
4445
new_symbol_table(_new_symbol_table),
4546
options(_options),
46-
dereference_callback(_dereference_callback)
47+
dereference_callback(_dereference_callback),
48+
language_mode(_language_mode)
4749
{ }
4850

4951
virtual ~value_set_dereferencet() { }
@@ -80,6 +82,7 @@ class value_set_dereferencet
8082
symbol_tablet &new_symbol_table;
8183
const optionst &options;
8284
dereference_callbackt &dereference_callback;
85+
const irep_idt language_mode;
8386
static unsigned invalid_counter;
8487

8588
bool dereference_type_compare(

0 commit comments

Comments
 (0)