@@ -291,17 +291,18 @@ void dfcc_wrapper_programt::encode_requires_write_set()
291291 // assume_ensures_ctx = false,
292292 // assert_ensures_ctx = false,
293293 // )
294- const auto write_set = requires_write_set;
295- preamble.add (goto_programt::make_decl (write_set, wrapper_sl));
294+ preamble.add (goto_programt::make_decl (requires_write_set, wrapper_sl));
296295
297- const auto address_of_write_set = addr_of_requires_write_set;
298- preamble. add ( goto_programt::make_decl (address_of_write_set , wrapper_sl));
296+ preamble. add (
297+ goto_programt::make_decl (addr_of_requires_write_set , wrapper_sl));
299298 preamble.add (goto_programt::make_assignment (
300- address_of_write_set, address_of_exprt (write_set), wrapper_sl));
299+ addr_of_requires_write_set,
300+ address_of_exprt (requires_write_set),
301+ wrapper_sl));
301302
302303 bool check_mode = contract_mode == dfcc_contract_modet::CHECK;
303304 code_function_callt call = library.write_set_create_call (
304- address_of_write_set ,
305+ addr_of_requires_write_set ,
305306 from_integer (0 , size_type ()),
306307 from_integer (0 , size_type ()),
307308 make_boolean_expr (check_mode),
@@ -317,7 +318,7 @@ void dfcc_wrapper_programt::encode_requires_write_set()
317318 // check for absence of allocation/deallocation in requires clauses
318319 // ```c
319320 // DECL __check_no_alloc: bool;
320- // CALL __check_no_alloc = check_empty_alloc_dealloc(write_set );
321+ // CALL __check_no_alloc = check_empty_alloc_dealloc(requilres_write_set );
321322 // ASSERT __check_no_alloc;
322323 // DEAD __check_no_alloc: bool;
323324 // ```
@@ -334,7 +335,7 @@ void dfcc_wrapper_programt::encode_requires_write_set()
334335
335336 postamble.add (goto_programt::make_function_call (
336337 library.write_set_check_allocated_deallocated_is_empty_call (
337- check_var, address_of_write_set , wrapper_sl),
338+ check_var, addr_of_requires_write_set , wrapper_sl),
338339 wrapper_sl));
339340
340341 source_locationt check_sl (wrapper_sl);
@@ -347,9 +348,9 @@ void dfcc_wrapper_programt::encode_requires_write_set()
347348
348349 // generate write set release and DEAD instructions
349350 postamble.add (goto_programt::make_function_call (
350- library.write_set_release_call (address_of_write_set , wrapper_sl),
351+ library.write_set_release_call (addr_of_requires_write_set , wrapper_sl),
351352 wrapper_sl));
352- postamble.add (goto_programt::make_dead (write_set , wrapper_sl));
353+ postamble.add (goto_programt::make_dead (requires_write_set , wrapper_sl));
353354}
354355
355356void dfcc_wrapper_programt::encode_ensures_write_set ()
@@ -363,18 +364,18 @@ void dfcc_wrapper_programt::encode_ensures_write_set()
363364 // assume_ensures_ctx = contract_mode != check,
364365 // assert_ensures_ctx = contract_mode == check,
365366 // )
366- const auto write_set = ensures_write_set;
367- preamble.add (goto_programt::make_decl (write_set, wrapper_sl));
367+ preamble.add (goto_programt::make_decl (ensures_write_set, wrapper_sl));
368368
369- const auto address_of_write_set = addr_of_ensures_write_set;
370- preamble.add (goto_programt::make_decl (address_of_write_set, wrapper_sl));
369+ preamble.add (goto_programt::make_decl (addr_of_ensures_write_set, wrapper_sl));
371370 preamble.add (goto_programt::make_assignment (
372- address_of_write_set, address_of_exprt (write_set), wrapper_sl));
371+ addr_of_ensures_write_set,
372+ address_of_exprt (ensures_write_set),
373+ wrapper_sl));
373374
374375 bool check_mode = contract_mode == dfcc_contract_modet::CHECK;
375376
376377 code_function_callt call = library.write_set_create_call (
377- address_of_write_set ,
378+ addr_of_ensures_write_set ,
378379 from_integer (0 , size_type ()),
379380 from_integer (0 , size_type ()),
380381 false_exprt (),
@@ -392,14 +393,14 @@ void dfcc_wrapper_programt::encode_ensures_write_set()
392393 {
393394 link_allocated_caller.add (goto_programt::make_function_call (
394395 library.link_allocated_call (
395- address_of_write_set , caller_write_set, wrapper_sl),
396+ addr_of_ensures_write_set , caller_write_set, wrapper_sl),
396397 wrapper_sl));
397398 }
398399
399400 // check for absence of allocation/deallocation in contract clauses
400401 // ```c
401402 // DECL __check_no_alloc: bool;
402- // CALL __check_no_alloc = check_empty_alloc_dealloc(write_set );
403+ // CALL __check_no_alloc = check_empty_alloc_dealloc(ensures_write_set );
403404 // ASSERT __check_no_alloc;
404405 // DEAD __check_no_alloc: bool;
405406 // ```
@@ -416,7 +417,7 @@ void dfcc_wrapper_programt::encode_ensures_write_set()
416417
417418 postamble.add (goto_programt::make_function_call (
418419 library.write_set_check_allocated_deallocated_is_empty_call (
419- check_var, address_of_write_set , wrapper_sl),
420+ check_var, addr_of_ensures_write_set , wrapper_sl),
420421 wrapper_sl));
421422
422423 source_locationt check_sl (wrapper_sl);
@@ -430,32 +431,33 @@ void dfcc_wrapper_programt::encode_ensures_write_set()
430431
431432 // generate write set release
432433 postamble.add (goto_programt::make_function_call (
433- library.write_set_release_call (address_of_write_set , wrapper_sl),
434+ library.write_set_release_call (addr_of_ensures_write_set , wrapper_sl),
434435 wrapper_sl));
435436
436437 // declare write set DEAD
437- postamble.add (goto_programt::make_dead (write_set , wrapper_sl));
438+ postamble.add (goto_programt::make_dead (ensures_write_set , wrapper_sl));
438439}
439440
440441void dfcc_wrapper_programt::encode_contract_write_set ()
441442{
442- const auto write_set = contract_write_set;
443- preamble.add (goto_programt::make_decl (write_set, wrapper_sl));
443+ preamble.add (goto_programt::make_decl (contract_write_set, wrapper_sl));
444444
445- const auto address_of_contract_write_set = addr_of_contract_write_set;
446445 preamble.add (
447- goto_programt::make_decl (address_of_contract_write_set , wrapper_sl));
446+ goto_programt::make_decl (addr_of_contract_write_set , wrapper_sl));
448447 preamble.add (goto_programt::make_assignment (
449- address_of_contract_write_set, address_of_exprt (write_set), wrapper_sl));
448+ addr_of_contract_write_set,
449+ address_of_exprt (contract_write_set),
450+ wrapper_sl));
450451
451452 // We use the empty write set used to check ensures for side effects
452453 // to check for side effects in the assigns and frees functions as well
453- const auto address_of_requires_write_set = addr_of_requires_write_set;
454+ // TODO: I don't know what the above comment means, why was there an empty
455+ // write set here?
454456
455457 // call write_set_create
456458 {
457459 code_function_callt call = library.write_set_create_call (
458- address_of_contract_write_set ,
460+ addr_of_contract_write_set ,
459461 from_integer (contract_functions.get_nof_assigns_targets (), size_type ()),
460462 from_integer (contract_functions.get_nof_frees_targets (), size_type ()),
461463 false_exprt (),
@@ -489,10 +491,10 @@ void dfcc_wrapper_programt::encode_contract_write_set()
489491 arguments.push_back (arg);
490492
491493 // pass write set to populate
492- arguments.emplace_back (address_of_contract_write_set );
494+ arguments.emplace_back (addr_of_contract_write_set );
493495
494496 // pass the empty write set to check side effects against
495- arguments.emplace_back (address_of_requires_write_set );
497+ arguments.emplace_back (addr_of_requires_write_set );
496498
497499 write_set_checks.add (goto_programt::make_function_call (call, wrapper_sl));
498500 }
@@ -508,56 +510,55 @@ void dfcc_wrapper_programt::encode_contract_write_set()
508510 arguments.push_back (arg);
509511
510512 // pass write set to populate
511- arguments.emplace_back (address_of_contract_write_set );
513+ arguments.emplace_back (addr_of_contract_write_set );
512514
513515 // pass the empty write set to check side effects against
514- arguments.emplace_back (address_of_requires_write_set );
516+ arguments.emplace_back (addr_of_requires_write_set );
515517
516518 write_set_checks.add (goto_programt::make_function_call (call, wrapper_sl));
517519 }
518520
519521 // generate write set release and DEAD instructions
520522 postamble.add (goto_programt::make_function_call (
521- library.write_set_release_call (address_of_contract_write_set , wrapper_sl),
523+ library.write_set_release_call (addr_of_contract_write_set , wrapper_sl),
522524 wrapper_sl));
523- postamble.add (goto_programt::make_dead (write_set, wrapper_sl));
525+ postamble.add (
526+ goto_programt::make_dead (addr_of_contract_write_set, wrapper_sl));
524527}
525528
526529void dfcc_wrapper_programt::encode_is_fresh_set ()
527530{
528- const auto object_set = is_fresh_set;
529- preamble.add (goto_programt::make_decl (object_set, wrapper_sl));
531+ preamble.add (goto_programt::make_decl (is_fresh_set, wrapper_sl));
530532
531- const auto address_of_object_set = addr_of_is_fresh_set;
532- preamble.add (goto_programt::make_decl (address_of_object_set, wrapper_sl));
533+ preamble.add (goto_programt::make_decl (addr_of_is_fresh_set, wrapper_sl));
533534 preamble.add (goto_programt::make_assignment (
534- address_of_object_set , address_of_exprt (object_set ), wrapper_sl));
535+ addr_of_is_fresh_set , address_of_exprt (is_fresh_set ), wrapper_sl));
535536
536537 // CALL obj_set_create_indexed_by_object_id(is_fresh_set) in preamble
537538 preamble.add (goto_programt::make_function_call (
538539 library.obj_set_create_indexed_by_object_id_call (
539- address_of_object_set , wrapper_sl),
540+ addr_of_is_fresh_set , wrapper_sl),
540541 wrapper_sl));
541542
542543 // link to requires write set
543544 link_is_fresh.add (goto_programt::make_function_call (
544545 library.link_is_fresh_call (
545- addr_of_requires_write_set, address_of_object_set , wrapper_sl),
546+ addr_of_requires_write_set, addr_of_is_fresh_set , wrapper_sl),
546547 wrapper_sl));
547548
548549 // link to ensures write set
549550 link_is_fresh.add (goto_programt::make_function_call (
550551 library.link_is_fresh_call (
551- addr_of_ensures_write_set, address_of_object_set , wrapper_sl),
552+ addr_of_ensures_write_set, addr_of_is_fresh_set , wrapper_sl),
552553 wrapper_sl));
553554
554555 // release call in postamble
555556 postamble.add (goto_programt::make_function_call (
556- library.obj_set_release_call (address_of_object_set , wrapper_sl),
557+ library.obj_set_release_call (addr_of_is_fresh_set , wrapper_sl),
557558 wrapper_sl));
558559
559560 // DEAD instructions in postamble
560- postamble.add (goto_programt::make_dead (object_set , wrapper_sl));
561+ postamble.add (goto_programt::make_dead (is_fresh_set , wrapper_sl));
561562}
562563
563564void dfcc_wrapper_programt::encode_requires_clauses ()
@@ -594,7 +595,6 @@ void dfcc_wrapper_programt::encode_requires_clauses()
594595 codet requires_statement (statement_type, {std::move (requires )}, sl);
595596 converter.goto_convert (requires_statement, requires_program, language_mode);
596597 }
597- const auto address_of_requires_write_set = addr_of_requires_write_set;
598598
599599 // fix calls to user-defined memory predicates
600600 memory_predicates.fix_calls (requires_program);
@@ -603,7 +603,7 @@ void dfcc_wrapper_programt::encode_requires_clauses()
603603 instrument.instrument_goto_program (
604604 wrapper_id,
605605 requires_program,
606- address_of_requires_write_set ,
606+ addr_of_requires_write_set ,
607607 function_pointer_contracts);
608608
609609 // append resulting program to preconditions section
@@ -626,8 +626,9 @@ void dfcc_wrapper_programt::encode_ensures_clauses()
626626 // translate each ensures clause
627627 for (const auto &e : contract_code_type.ensures ())
628628 {
629- exprt ensures = to_lambda_expr (e).application (contract_lambda_parameters);
630- ensures.add_source_location () = e.source_location ();
629+ exprt ensures = to_lambda_expr (e)
630+ .application (contract_lambda_parameters)
631+ .with_source_location <exprt>(e);
631632
632633 if (has_subexpr (ensures, ID_exists) || has_subexpr (ensures, ID_forall))
633634 add_quantified_variable (goto_model.symbol_table , ensures, language_mode);
@@ -652,14 +653,12 @@ void dfcc_wrapper_programt::encode_ensures_clauses()
652653 converter.goto_convert (ensures_statement, ensures_program, language_mode);
653654 }
654655
655- const auto address_of_ensures_write_set = addr_of_ensures_write_set;
656-
657656 // When checking an ensures clause we link the contract write set to the
658657 // ensures write set to know what was deallocated by the function so that
659658 // the was_freed predicate can perform its checks
660659 link_deallocated_contract.add (goto_programt::make_function_call (
661660 library.link_deallocated_call (
662- address_of_ensures_write_set , addr_of_contract_write_set, wrapper_sl),
661+ addr_of_ensures_write_set , addr_of_contract_write_set, wrapper_sl),
663662 wrapper_sl));
664663
665664 // fix calls to user-defined user-defined memory predicates
@@ -669,7 +668,7 @@ void dfcc_wrapper_programt::encode_ensures_clauses()
669668 instrument.instrument_goto_program (
670669 wrapper_id,
671670 ensures_program,
672- address_of_ensures_write_set ,
671+ addr_of_ensures_write_set ,
673672 function_pointer_contracts);
674673
675674 // add the snapshot program in the history section
@@ -735,8 +734,6 @@ void dfcc_wrapper_programt::encode_havoced_function_call()
735734 write_set_arguments.push_back (parameter_symbol.symbol_expr ());
736735 }
737736
738- auto address_of_contract_write_set = addr_of_contract_write_set;
739-
740737 // check assigns clause inclusion
741738 // IF __caller_write_set==NULL GOTO skip_target;
742739 // DECL check: bool;
@@ -768,7 +765,7 @@ void dfcc_wrapper_programt::encode_havoced_function_call()
768765
769766 write_set_checks.add (goto_programt::make_function_call (
770767 library.write_set_check_assigns_clause_inclusion_call (
771- check_var, caller_write_set, address_of_contract_write_set , wrapper_sl),
768+ check_var, caller_write_set, addr_of_contract_write_set , wrapper_sl),
772769 wrapper_sl));
773770
774771 source_locationt check_sl (wrapper_sl);
@@ -796,7 +793,7 @@ void dfcc_wrapper_programt::encode_havoced_function_call()
796793
797794 write_set_checks.add (goto_programt::make_function_call (
798795 library.write_set_check_frees_clause_inclusion_call (
799- check_var, caller_write_set, address_of_contract_write_set , wrapper_sl),
796+ check_var, caller_write_set, addr_of_contract_write_set , wrapper_sl),
800797 wrapper_sl));
801798
802799 source_locationt check_sl (wrapper_sl);
@@ -814,7 +811,7 @@ void dfcc_wrapper_programt::encode_havoced_function_call()
814811
815812 code_function_callt havoc_call (
816813 contract_functions.get_spec_assigns_havoc_function_symbol ().symbol_expr (),
817- {address_of_contract_write_set });
814+ {addr_of_contract_write_set });
818815
819816 function_call.add (goto_programt::make_function_call (havoc_call, wrapper_sl));
820817
@@ -844,6 +841,6 @@ void dfcc_wrapper_programt::encode_havoced_function_call()
844841 // set and the caller write set
845842 function_call.add (goto_programt::make_function_call (
846843 library.write_set_deallocate_freeable_call (
847- address_of_contract_write_set , caller_write_set, wrapper_sl),
844+ addr_of_contract_write_set , caller_write_set, wrapper_sl),
848845 wrapper_sl));
849846}
0 commit comments