Skip to content

Commit be555a2

Browse files
author
Daniel Kroening
authored
Merge pull request #335 from smowton/disable_cprover_memory_for_java
Disable cprover memory for java
2 parents 02aea58 + 66db651 commit be555a2

File tree

6 files changed

+33
-5
lines changed

6 files changed

+33
-5
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>
@@ -431,6 +432,12 @@ safety_checkert::resultt bmct::run(
431432
symex.set_message_handler(get_message_handler());
432433
symex.options=options;
433434

435+
{
436+
const symbolt *init_symbol;
437+
if(!ns.lookup(CPROVER_PREFIX "initialize", init_symbol))
438+
symex.language_mode=init_symbol->mode;
439+
}
440+
434441
status() << "Starting Bounded Model Checking" << eom;
435442

436443
symex.last_source_location.make_nil();

src/goto-symex/goto_symex.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class goto_symext
4949
remaining_vccs(0),
5050
constant_propagation(true),
5151
new_symbol_table(_new_symbol_table),
52+
language_mode(),
5253
ns(_ns),
5354
target(_target),
5455
atomic_section_counter(0),
@@ -95,6 +96,10 @@ class goto_symext
9596
optionst options;
9697
symbol_tablet &new_symbol_table;
9798

99+
/// language_mode: ID_java, ID_C or another language identifier
100+
/// if we know the source language in use, irep_idt() otherwise.
101+
irep_idt language_mode;
102+
98103
protected:
99104
const namespacet &ns;
100105
symex_targett &target;

src/goto-symex/symex_dereference.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,9 @@ void goto_symext::dereference_rec(
295295
ns,
296296
new_symbol_table,
297297
options,
298-
symex_dereference_state);
299-
298+
symex_dereference_state,
299+
language_mode);
300+
300301
// std::cout << "**** " << from_expr(ns, "", tmp1) << std::endl;
301302
exprt tmp2=dereference.dereference(
302303
tmp1, guard, write?value_set_dereferencet::WRITE:value_set_dereferencet::READ);

src/pointer-analysis/goto_program_dereference.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ Author: Daniel Kroening, [email protected]
1919
class goto_program_dereferencet:protected dereference_callbackt
2020
{
2121
public:
22+
// Note: this currently doesn't specify a source language
23+
// for the final argument to value_set_dereferencet.
24+
// This means that language-inappropriate values such as
25+
// (struct A*)some_integer_value in Java, may be returned.
2226
goto_program_dereferencet(
2327
const namespacet &_ns,
2428
symbol_tablet &_new_symbol_table,
@@ -27,7 +31,7 @@ class goto_program_dereferencet:protected dereference_callbackt
2731
options(_options),
2832
ns(_ns),
2933
value_sets(_value_sets),
30-
dereference(_ns, _new_symbol_table, _options, *this) { }
34+
dereference(_ns, _new_symbol_table, _options, *this, ID_nil) { }
3135

3236
void dereference_program(
3337
goto_programt &goto_program,

src/pointer-analysis/value_set_dereference.cpp

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

455+
if(language_mode==ID_java)
456+
{
457+
result.value=nil_exprt();
458+
return result;
459+
}
460+
455461
const symbolt &memory_symbol=ns.lookup(CPROVER_PREFIX "memory");
456462
exprt symbol_expr=symbol_exprt(memory_symbol.name, memory_symbol.type);
457463

src/pointer-analysis/value_set_dereference.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,13 @@ class value_set_dereferencet
3737
const namespacet &_ns,
3838
symbol_tablet &_new_symbol_table,
3939
const optionst &_options,
40-
dereference_callbackt &_dereference_callback):
40+
dereference_callbackt &_dereference_callback,
41+
const irep_idt _language_mode):
4142
ns(_ns),
4243
new_symbol_table(_new_symbol_table),
4344
options(_options),
44-
dereference_callback(_dereference_callback)
45+
dereference_callback(_dereference_callback),
46+
language_mode(_language_mode)
4547
{ }
4648

4749
virtual ~value_set_dereferencet() { }
@@ -78,6 +80,9 @@ class value_set_dereferencet
7880
symbol_tablet &new_symbol_table;
7981
const optionst &options;
8082
dereference_callbackt &dereference_callback;
83+
/// language_mode: ID_java, ID_C or another language identifier
84+
/// if we know the source language in use, irep_idt() otherwise.
85+
const irep_idt language_mode;
8186
static unsigned invalid_counter;
8287

8388
bool dereference_type_compare(

0 commit comments

Comments
 (0)