Skip to content

Commit 28c3c9f

Browse files
authored
Merge pull request #853 from owen-jones-diffblue/feature/pointer-function-parameters
Clean up code for pointer function parameters
2 parents ab1b267 + cf4eeb2 commit 28c3c9f

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

src/ansi-c/c_nondet_symbol_factory.cpp

+13-11
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,15 @@ static exprt c_get_nondet_bool(const typet &type)
6161

6262
class symbol_factoryt
6363
{
64-
std::vector<symbolt const *> &symbols_created;
64+
std::vector<const symbolt *> &symbols_created;
6565
symbol_tablet &symbol_table;
6666
const source_locationt &loc;
6767
const bool assume_non_null;
6868
namespacet ns;
6969

7070
public:
7171
symbol_factoryt(
72-
std::vector<symbolt const *> &_symbols_created,
72+
std::vector<const symbolt *> &_symbols_created,
7373
symbol_tablet &_symbol_table,
7474
const source_locationt &loc,
7575
const bool _assume_non_null):
@@ -125,7 +125,7 @@ exprt symbol_factoryt::allocate_object(
125125
// <target_expr> = &tmp$<temporary_counter>
126126
code_assignt assign(target_expr, aoe);
127127
assign.add_source_location()=loc;
128-
assignments.add(assign);
128+
assignments.move(assign);
129129

130130
return aoe;
131131
}
@@ -171,7 +171,7 @@ void symbol_factoryt::gen_nondet_init(
171171
else
172172
{
173173
// Add the following code to assignments:
174-
// IF !(NONDET(_Bool) == FALSE) THEN GOTO <label1>
174+
// IF !NONDET(_Bool) THEN GOTO <label1>
175175
// <expr> = <null pointer>
176176
// GOTO <label2>
177177
// <label1>: <expr> = &tmp$<temporary_counter>;
@@ -186,7 +186,7 @@ void symbol_factoryt::gen_nondet_init(
186186
null_check.then_case()=set_null_inst;
187187
null_check.else_case()=non_null_inst;
188188

189-
assignments.add(null_check);
189+
assignments.move(null_check);
190190
}
191191
}
192192
// TODO(OJones): Add support for structs and arrays
@@ -202,7 +202,7 @@ void symbol_factoryt::gen_nondet_init(
202202
code_assignt assign(expr, rhs);
203203
assign.add_source_location()=loc;
204204

205-
assignments.add(assign);
205+
assignments.move(assign);
206206
}
207207
}
208208

@@ -233,13 +233,15 @@ exprt c_nondet_symbol_factory(
233233
main_symbol.name=identifier;
234234
main_symbol.base_name=base_name;
235235
main_symbol.type=type;
236+
main_symbol.location=loc;
237+
238+
symbol_exprt main_symbol_expr=main_symbol.symbol_expr();
236239

237240
symbolt *main_symbol_ptr;
238241
bool moving_symbol_failed=symbol_table.move(main_symbol, main_symbol_ptr);
239242
CHECK_RETURN(!moving_symbol_failed);
240243

241-
std::vector<symbolt const *> symbols_created;
242-
symbol_exprt main_symbol_expr=(*main_symbol_ptr).symbol_expr();
244+
std::vector<const symbolt *> symbols_created;
243245
symbols_created.push_back(main_symbol_ptr);
244246

245247
symbol_factoryt state(
@@ -252,11 +254,11 @@ exprt c_nondet_symbol_factory(
252254

253255
// Add the following code to init_code for each symbol that's been created:
254256
// <type> <identifier>;
255-
for(symbolt const *symbol_ptr : symbols_created)
257+
for(const symbolt * const symbol_ptr : symbols_created)
256258
{
257259
code_declt decl(symbol_ptr->symbol_expr());
258260
decl.add_source_location()=loc;
259-
init_code.add(decl);
261+
init_code.move(decl);
260262
}
261263

262264
init_code.append(assignments);
@@ -273,7 +275,7 @@ exprt c_nondet_symbol_factory(
273275
from_integer(0, index_type())));
274276
input_code.op1()=symbol_ptr->symbol_expr();
275277
input_code.add_source_location()=loc;
276-
init_code.add(input_code);
278+
init_code.move(input_code);
277279
}
278280

279281
return main_symbol_expr;

src/util/std_code.h

+5
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ class code_blockt:public codet
103103
o.push_back(*it);
104104
}
105105

106+
void move(codet &code)
107+
{
108+
move_to_operands(code);
109+
}
110+
106111
void add(const codet &code)
107112
{
108113
copy_to_operands(code);

0 commit comments

Comments
 (0)