Skip to content

Commit 8127d4d

Browse files
Merge pull request #2141 from romainbrenguier/bugfix/goto-convert-mode
Make mode an argument of goto convert methods
2 parents 4948b70 + fbed57e commit 8127d4d

14 files changed

+464
-303
lines changed

src/goto-instrument/model_argc_argv.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,8 @@ bool model_argc_argv(
143143
to_code(value),
144144
goto_model.symbol_table,
145145
init_instructions,
146-
message_handler);
146+
message_handler,
147+
main_symbol.mode);
147148

148149
Forall_goto_program_instructions(it, init_instructions)
149150
{

src/goto-programs/builtin_functions.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ void goto_convertt::do_cpp_new(
438438
count.make_typecast(object_size.type());
439439

440440
// might have side-effect
441-
clean_expr(count, dest);
441+
clean_expr(count, dest, ID_cpp);
442442
}
443443

444444
exprt tmp_symbol_expr;
@@ -473,7 +473,7 @@ void goto_convertt::do_cpp_new(
473473
new_call.lhs()=tmp_symbol_expr;
474474
new_call.add_source_location()=rhs.source_location();
475475

476-
convert(new_call, dest);
476+
convert(new_call, dest, ID_cpp);
477477
}
478478
else if(rhs.operands().size()==1)
479479
{
@@ -509,7 +509,7 @@ void goto_convertt::do_cpp_new(
509509
if(new_call.arguments()[i].type()!=code_type.parameters()[i].type())
510510
new_call.arguments()[i].make_typecast(code_type.parameters()[i].type());
511511

512-
convert(new_call, dest);
512+
convert(new_call, dest, ID_cpp);
513513
}
514514
else
515515
{
@@ -551,7 +551,7 @@ void goto_convertt::cpp_new_initializer(
551551
const dereference_exprt deref_lhs(lhs, rhs.type().subtype());
552552

553553
replace_new_object(deref_lhs, initializer);
554-
convert(to_code(initializer), dest);
554+
convert(to_code(initializer), dest, ID_cpp);
555555
}
556556
else
557557
UNREACHABLE;

src/goto-programs/convert_nondet.cpp

+15-8
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ static goto_programt::targett insert_nondet_init_code(
3535
const goto_programt::targett &target,
3636
symbol_table_baset &symbol_table,
3737
message_handlert &message_handler,
38-
const object_factory_parameterst &object_factory_parameters)
38+
const object_factory_parameterst &object_factory_parameters,
39+
const irep_idt &mode)
3940
{
4041
// Return if the instruction isn't an assignment
4142
const auto next_instr=std::next(target);
@@ -96,7 +97,8 @@ static goto_programt::targett insert_nondet_init_code(
9697

9798
// Convert this code into goto instructions
9899
goto_programt new_instructions;
99-
goto_convert(init_code, symbol_table, new_instructions, message_handler);
100+
goto_convert(
101+
init_code, symbol_table, new_instructions, message_handler, mode);
100102

101103
// Insert the new instructions into the instruction list
102104
goto_program.destructive_insert(next_instr, new_instructions);
@@ -116,33 +118,37 @@ void convert_nondet(
116118
goto_programt &goto_program,
117119
symbol_table_baset &symbol_table,
118120
message_handlert &message_handler,
119-
const object_factory_parameterst &object_factory_parameters)
121+
const object_factory_parameterst &object_factory_parameters,
122+
const irep_idt &mode)
120123
{
121124
for(auto instruction_iterator=goto_program.instructions.begin(),
122125
end=goto_program.instructions.end();
123126
instruction_iterator!=end;)
124127
{
125-
instruction_iterator=insert_nondet_init_code(
128+
instruction_iterator = insert_nondet_init_code(
126129
goto_program,
127130
instruction_iterator,
128131
symbol_table,
129132
message_handler,
130-
object_factory_parameters);
133+
object_factory_parameters,
134+
mode);
131135
}
132136
}
133137

134138
void convert_nondet(
135139
goto_model_functiont &function,
136140
message_handlert &message_handler,
137-
const object_factory_parameterst &object_factory_parameters)
141+
const object_factory_parameterst &object_factory_parameters,
142+
const irep_idt &mode)
138143
{
139144
object_factory_parameterst parameters = object_factory_parameters;
140145
parameters.function_id = function.get_function_id();
141146
convert_nondet(
142147
function.get_goto_function().body,
143148
function.get_symbol_table(),
144149
message_handler,
145-
parameters);
150+
parameters,
151+
mode);
146152

147153
function.compute_location_numbers();
148154
}
@@ -167,7 +173,8 @@ void convert_nondet(
167173
f_it.second.body,
168174
symbol_table,
169175
message_handler,
170-
object_factory_parameters);
176+
object_factory_parameters,
177+
symbol.mode);
171178
}
172179
}
173180

src/goto-programs/convert_nondet.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Author: Reuben Thomas, [email protected]
1313
#define CPROVER_GOTO_PROGRAMS_CONVERT_NONDET_H
1414

1515
#include <cstddef> // size_t
16+
#include <util/irep.h>
1617

1718
class goto_functionst;
1819
class symbol_table_baset;
@@ -48,6 +49,7 @@ void convert_nondet(
4849
void convert_nondet(
4950
goto_model_functiont &function,
5051
message_handlert &message_handler,
51-
const object_factory_parameterst &object_factory_parameters);
52+
const object_factory_parameterst &object_factory_parameters,
53+
const irep_idt &mode);
5254

5355
#endif

0 commit comments

Comments
 (0)