2323
2424#include < goto-programs/class_hierarchy.h>
2525#include < goto-programs/goto_convert_functions.h>
26+ #include < goto-programs/remove_calls_no_body.h>
2627#include < goto-programs/remove_function_pointers.h>
2728#include < goto-programs/remove_virtual_functions.h>
2829#include < goto-programs/remove_exceptions.h>
@@ -729,6 +730,10 @@ int goto_instrument_parse_optionst::doit()
729730 status () << " Performing full inlining" << eom;
730731 goto_inline (goto_model, get_message_handler ());
731732
733+ status () << " Removing calls to functions without a body" << eom;
734+ remove_calls_no_bodyt remove_calls_no_body;
735+ remove_calls_no_body (goto_model.goto_functions );
736+
732737 status () << " Accelerating" << eom;
733738 accelerate_functions (
734739 goto_model, get_message_handler (), cmdline.isset (" z3" ));
@@ -992,7 +997,7 @@ void goto_instrument_parse_optionst::instrument_goto_program()
992997 // now do full inlining, if requested
993998 if (cmdline.isset (" inline" ))
994999 {
995- do_indirect_call_and_rtti_removal ();
1000+ do_indirect_call_and_rtti_removal (true );
9961001
9971002 if (cmdline.isset (" show-custom-bitvector-analysis" ) ||
9981003 cmdline.isset (" custom-bitvector-analysis" ))
@@ -1003,7 +1008,7 @@ void goto_instrument_parse_optionst::instrument_goto_program()
10031008 }
10041009
10051010 status () << " Performing full inlining" << eom;
1006- goto_inline (goto_model, get_message_handler ());
1011+ goto_inline (goto_model, get_message_handler (), true );
10071012 }
10081013
10091014 if (cmdline.isset (" show-custom-bitvector-analysis" ) ||
@@ -1111,27 +1116,23 @@ void goto_instrument_parse_optionst::instrument_goto_program()
11111116 if (cmdline.isset (" partial-inline" ))
11121117 {
11131118 do_indirect_call_and_rtti_removal ();
1114- do_partial_inlining ();
1119+
1120+ status () << " Partial inlining" << eom;
1121+ goto_partial_inline (goto_model, ui_message_handler, 0 , true );
11151122
11161123 goto_model.goto_functions .update ();
11171124 goto_model.goto_functions .compute_loop_numbers ();
11181125 }
11191126
1120- // now do full inlining, if requested
1121- if (cmdline.isset (" inline" ))
1127+ if (cmdline.isset (" remove-calls-no-body" ))
11221128 {
1123- do_indirect_call_and_rtti_removal ( /* force= */ true ) ;
1129+ status () << " Removing calls to functions without a body " << eom ;
11241130
1125- if (cmdline.isset (" show-custom-bitvector-analysis" ) ||
1126- cmdline.isset (" custom-bitvector-analysis" ))
1127- {
1128- do_remove_returns ();
1129- thread_exit_instrumentation (goto_model);
1130- mutex_init_instrumentation (goto_model);
1131- }
1131+ remove_calls_no_bodyt remove_calls_no_body;
1132+ remove_calls_no_body (goto_model.goto_functions );
11321133
1133- status () << " Performing full inlining " << eom ;
1134- goto_inline ( goto_model, get_message_handler (), true );
1134+ goto_model. goto_functions . update () ;
1135+ goto_model. goto_functions . compute_loop_numbers ( );
11351136 }
11361137
11371138 if (cmdline.isset (" constant-propagator" ))
@@ -1560,6 +1561,7 @@ void goto_instrument_parse_optionst::help()
15601561 " --no-caching disable caching of intermediate results during transitive function inlining\n " // NOLINT(*)
15611562 " --log <file> log in json format which code segments were inlined, use with --function-inline\n " // NOLINT(*)
15621563 " --remove-function-pointers replace function pointers by case statement over function calls\n " // NOLINT(*)
1564+ HELP_REMOVE_CALLS_NO_BODY
15631565 HELP_REMOVE_CONST_FUNCTION_POINTERS
15641566 " --add-library add models of C library functions\n "
15651567 " --model-argc-argv <n> model up to <n> command line arguments\n "
0 commit comments