Skip to content

Commit 9b6d01a

Browse files
committed
Remove some preconditions and appropriately type the expressions.
1 parent 8654b36 commit 9b6d01a

File tree

3 files changed

+39
-41
lines changed

3 files changed

+39
-41
lines changed

src/goto-programs/goto_convert_side_effect.cpp

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ void goto_convertt::remove_assignment(
6060
statement==ID_assign_bitxor ||
6161
statement==ID_assign_bitor)
6262
{
63-
INVARIANT(
63+
DATA_INVARIANT(
6464
expr.operands().size() == 2,
6565
expr.find_source_location().as_string() + ": " + id2string(statement) +
6666
" takes two arguments");
@@ -147,7 +147,7 @@ void goto_convertt::remove_pre(
147147

148148
DATA_INVARIANT(
149149
statement == ID_preincrement || statement == ID_predecrement,
150-
" expected preincrement or predecrement");
150+
"expected preincrement or predecrement");
151151

152152
exprt rhs;
153153
rhs.add_source_location()=expr.source_location();
@@ -236,7 +236,7 @@ void goto_convertt::remove_post(
236236

237237
DATA_INVARIANT(
238238
statement == ID_postincrement || statement == ID_postdecrement,
239-
" expected postincrement or postdecrement");
239+
"expected postincrement or postdecrement");
240240

241241
exprt rhs;
242242
rhs.add_source_location()=expr.source_location();
@@ -326,12 +326,13 @@ void goto_convertt::remove_function_call(
326326
const irep_idt &mode,
327327
bool result_is_used)
328328
{
329+
DATA_INVARIANT(
330+
expr.operands().size() == 2,
331+
expr.find_source_location().as_string() +
332+
": function_call expects two operands");
333+
329334
if(!result_is_used)
330335
{
331-
DATA_INVARIANT(
332-
expr.operands().size() == 2,
333-
expr.find_source_location().as_string() +
334-
": function_call expects two operands");
335336
code_function_callt call(nil_exprt(), expr.op0(), expr.op1().operands());
336337
call.add_source_location()=expr.source_location();
337338
convert_function_call(call, dest, mode);
@@ -345,11 +346,6 @@ void goto_convertt::remove_function_call(
345346
expr.id() == ID_side_effect && expr.get(ID_statement) == ID_function_call,
346347
expr.find_source_location().as_string() + ": expected function call");
347348

348-
DATA_INVARIANT(
349-
!expr.operands().empty(),
350-
expr.find_source_location().as_string() +
351-
": function_call expects at least one operand");
352-
353349
std::string new_base_name = "return_value";
354350
irep_idt new_symbol_mode = mode;
355351

@@ -430,7 +426,8 @@ void goto_convertt::remove_cpp_delete(
430426
side_effect_exprt &expr,
431427
goto_programt &dest)
432428
{
433-
DATA_INVARIANT(expr.operands().size() == 1, "cpp_delete expected 1 operand");
429+
DATA_INVARIANT(expr.operands().size() == 1,
430+
"cpp_delete expected one operand");
434431

435432
codet tmp(expr.get_statement());
436433
tmp.add_source_location()=expr.source_location();
@@ -486,7 +483,7 @@ void goto_convertt::remove_temporary_object(
486483
DATA_INVARIANT(
487484
expr.operands().size() <= 1,
488485
expr.find_source_location().as_string() +
489-
": temporary_object takes 0 or 1 operands");
486+
": temporary_object takes zero or one operands");
490487

491488
symbolt &new_symbol = new_tmp_symbol(
492489
expr.type(), "obj", dest, expr.find_source_location(), mode);
@@ -503,7 +500,7 @@ void goto_convertt::remove_temporary_object(
503500
INVARIANT(
504501
expr.operands().empty(),
505502
expr.find_source_location().as_string() +
506-
": temporary_object takes 0 operands");
503+
": temporary_object takes zero operands");
507504
exprt initializer=static_cast<const exprt &>(expr.find(ID_initializer));
508505
replace_new_object(new_symbol.symbol_expr(), initializer);
509506

@@ -527,7 +524,7 @@ void goto_convertt::remove_statement_expression(
527524
DATA_INVARIANT(
528525
expr.operands().size() == 1,
529526
expr.find_source_location().as_string() +
530-
": statement_expression takes 1 operand");
527+
": statement_expression takes one operand");
531528

532529
DATA_INVARIANT(
533530
expr.op0().id() == ID_code,
@@ -564,7 +561,7 @@ void goto_convertt::remove_statement_expression(
564561
symbol_exprt tmp_symbol_expr(new_symbol.name, new_symbol.type);
565562
tmp_symbol_expr.add_source_location()=source_location;
566563

567-
if(last.get(ID_statement)==ID_expression)
564+
if(last.get(ID_statement_expressionement)==ID_expression)
568565
{
569566
// we turn this into an assignment
570567
exprt e=to_code_expression(last).expression();

src/goto-programs/goto_inline_class.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ void goto_inlinet::parameter_assignments(
5454

5555
const irep_idt &identifier=parameter.get_identifier();
5656

57-
INVARIANT(
57+
DATA_INVARIANT(
5858
!identifier.empty(),
5959
source_location.as_string() + ": no identifier for function parameter");
6060

@@ -842,7 +842,7 @@ void goto_inlinet::goto_inline_logt::copy_from(
842842
{
843843
DATA_INVARIANT(
844844
it2 != to.instructions.end(),
845-
"'to' target function is not alllowed to be empty");
845+
"'to' target function is not allowed to be empty");
846846
DATA_INVARIANT(
847847
it1->location_number == it2->location_number,
848848
"both functions' instruction should point to the same source");

src/goto-programs/goto_program.cpp

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ std::ostream &goto_programt::output_instruction(
165165
instruction.code.find(ID_exception_list).get_sub();
166166
DATA_INVARIANT(
167167
instruction.targets.size() == exception_list.size(),
168-
"size of target list");
168+
"unexpected discrepancy between sizes of instruction"
169+
"targets and exception list");
169170
for(instructiont::targetst::const_iterator
170171
gt_it=instruction.targets.begin();
171172
gt_it!=instruction.targets.end();
@@ -223,10 +224,11 @@ void goto_programt::get_decl_identifiers(
223224
if(it->is_decl())
224225
{
225226
DATA_INVARIANT(
226-
it->code.get_statement() == ID_decl, "declaration statements");
227+
it->code.get_statement() == ID_decl,
228+
"expected statement to be declaration statement");
227229
DATA_INVARIANT(
228230
it->code.operands().size() == 1,
229-
"declaration statement expects 1 operand");
231+
"declaration statement expects one operand");
230232
const symbol_exprt &symbol_expr=to_symbol_expr(it->code.op0());
231233
decl_identifiers.insert(symbol_expr.get_identifier());
232234
}
@@ -237,26 +239,24 @@ void parse_lhs_read(const exprt &src, std::list<exprt> &dest)
237239
{
238240
if(src.id()==ID_dereference)
239241
{
240-
PRECONDITION(src.operands().size() == 1);
241-
dest.push_back(src.op0());
242+
dest.push_back(to_dereference_expr(src).pointer());
242243
}
243244
else if(src.id()==ID_index)
244245
{
245-
PRECONDITION(src.operands().size() == 2);
246-
dest.push_back(src.op1());
247-
parse_lhs_read(src.op0(), dest);
246+
auto &index_expr = to_index_expr(src);
247+
dest.push_back(index_expr.index());
248+
parse_lhs_read(index_expr.array(), dest);
248249
}
249250
else if(src.id()==ID_member)
250251
{
251-
PRECONDITION(src.operands().size() == 1);
252-
parse_lhs_read(src.op0(), dest);
252+
parse_lhs_read(to_member_expr(src).compound(), dest);
253253
}
254254
else if(src.id()==ID_if)
255255
{
256-
PRECONDITION(src.operands().size() == 3);
257-
dest.push_back(src.op0());
258-
parse_lhs_read(src.op1(), dest);
259-
parse_lhs_read(src.op2(), dest);
256+
auto &if_expr = to_if_expr(src);
257+
dest.push_back(if_expr.cond());
258+
parse_lhs_read(if_expr.true_case(), dest);
259+
parse_lhs_read(if_expr.false_case(), dest);
260260
}
261261
}
262262

@@ -346,9 +346,9 @@ void objects_read(
346346
else if(src.id()==ID_dereference)
347347
{
348348
// this reads what is pointed to plus the pointer
349-
PRECONDITION(src.operands().size() == 1);
350-
dest.push_back(src);
351-
objects_read(src.op0(), dest);
349+
auto &deref = to_dereference_expr(src);
350+
dest.push_back(deref);
351+
objects_read(deref.pointer(), dest);
352352
}
353353
else
354354
{
@@ -376,9 +376,9 @@ void objects_written(
376376
{
377377
if(src.id()==ID_if)
378378
{
379-
PRECONDITION(src.operands().size() == 3);
380-
objects_written(src.op1(), dest);
381-
objects_written(src.op2(), dest);
379+
auto &if_expr = to_if_expr(src);
380+
objects_written(if_expr.true_case(), dest);
381+
objects_written(if_expr.false_case(), dest);
382382
}
383383
else
384384
dest.push_back(src);
@@ -544,7 +544,8 @@ void goto_programt::compute_target_numbers()
544544
if(i.is_target())
545545
{
546546
i.target_number=++cnt;
547-
DATA_INVARIANT(i.target_number != 0, "instruction's number cannot be 0");
547+
DATA_INVARIANT(i.target_number != 0,
548+
"instruction's number cannot be zero");
548549
}
549550
}
550551

@@ -558,7 +559,7 @@ void goto_programt::compute_target_numbers()
558559
if(t!=instructions.end())
559560
{
560561
DATA_INVARIANT(
561-
t->target_number != 0, "instruction's number cannot be 0");
562+
t->target_number != 0, "instruction's number cannot be zero");
562563
DATA_INVARIANT(
563564
t->target_number != instructiont::nil_target,
564565
"instruction cannot be an invalid target");

0 commit comments

Comments
 (0)