|
23 | 23 |
|
24 | 24 | #include <goto-programs/class_hierarchy.h> |
25 | 25 | #include <goto-programs/goto_convert_functions.h> |
| 26 | +#include <goto-programs/remove_calls_no_body.h> |
26 | 27 | #include <goto-programs/remove_function_pointers.h> |
27 | 28 | #include <goto-programs/remove_virtual_functions.h> |
28 | 29 | #include <goto-programs/remove_exceptions.h> |
@@ -729,6 +730,10 @@ int goto_instrument_parse_optionst::doit() |
729 | 730 | status() << "Performing full inlining" << eom; |
730 | 731 | goto_inline(goto_model, get_message_handler()); |
731 | 732 |
|
| 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 | + |
732 | 737 | status() << "Accelerating" << eom; |
733 | 738 | accelerate_functions( |
734 | 739 | goto_model, get_message_handler(), cmdline.isset("z3")); |
@@ -992,7 +997,7 @@ void goto_instrument_parse_optionst::instrument_goto_program() |
992 | 997 | // now do full inlining, if requested |
993 | 998 | if(cmdline.isset("inline")) |
994 | 999 | { |
995 | | - do_indirect_call_and_rtti_removal(/*force=*/true); |
| 1000 | + do_indirect_call_and_rtti_removal(true); |
996 | 1001 |
|
997 | 1002 | if(cmdline.isset("show-custom-bitvector-analysis") || |
998 | 1003 | cmdline.isset("custom-bitvector-analysis")) |
@@ -1113,10 +1118,21 @@ void goto_instrument_parse_optionst::instrument_goto_program() |
1113 | 1118 | do_indirect_call_and_rtti_removal(); |
1114 | 1119 |
|
1115 | 1120 | status() << "Partial inlining" << eom; |
1116 | | - goto_partial_inline(goto_functions, ns, ui_message_handler, 0, true); |
| 1121 | + goto_partial_inline(goto_model, ui_message_handler, 0, true); |
| 1122 | + |
| 1123 | + goto_model.goto_functions.update(); |
| 1124 | + goto_model.goto_functions.compute_loop_numbers(); |
| 1125 | + } |
1117 | 1126 |
|
1118 | | - goto_functions.update(); |
1119 | | - goto_functions.compute_loop_numbers(); |
| 1127 | + if(cmdline.isset("remove-calls-no-body")) |
| 1128 | + { |
| 1129 | + status() << "Removing calls to functions without a body" << eom; |
| 1130 | + |
| 1131 | + remove_calls_no_bodyt remove_calls_no_body; |
| 1132 | + remove_calls_no_body(goto_model.goto_functions); |
| 1133 | + |
| 1134 | + goto_model.goto_functions.update(); |
| 1135 | + goto_model.goto_functions.compute_loop_numbers(); |
1120 | 1136 | } |
1121 | 1137 |
|
1122 | 1138 | if(cmdline.isset("constant-propagator")) |
@@ -1545,6 +1561,7 @@ void goto_instrument_parse_optionst::help() |
1545 | 1561 | " --no-caching disable caching of intermediate results during transitive function inlining\n" // NOLINT(*) |
1546 | 1562 | " --log <file> log in json format which code segments were inlined, use with --function-inline\n" // NOLINT(*) |
1547 | 1563 | " --remove-function-pointers replace function pointers by case statement over function calls\n" // NOLINT(*) |
| 1564 | + HELP_REMOVE_CALLS_NO_BODY |
1548 | 1565 | HELP_REMOVE_CONST_FUNCTION_POINTERS |
1549 | 1566 | " --add-library add models of C library functions\n" |
1550 | 1567 | " --model-argc-argv <n> model up to <n> command line arguments\n" |
|
0 commit comments