@@ -1145,10 +1145,49 @@ void goto_instrument_parse_optionst::instrument_goto_program()
1145
1145
// recalculate numbers, etc.
1146
1146
goto_model.goto_functions .update ();
1147
1147
}
1148
+ bool new_contracts = false ;
1149
+ if (cmdline.isset (FLAG_DFCC))
1150
+ {
1151
+ new_contracts = true ;
1152
+ if (cmdline.get_values (FLAG_DFCC).size () == 1 )
1153
+ {
1154
+ const std::string &harness_id = *cmdline.get_values (FLAG_DFCC).begin ();
1155
+
1156
+ do_indirect_call_and_rtti_removal ();
1157
+
1158
+ std::set<std::string> to_replace (
1159
+ cmdline.get_values (FLAG_REPLACE_CALL).begin (),
1160
+ cmdline.get_values (FLAG_REPLACE_CALL).end ());
1161
+
1162
+ std::set<std::string> to_check (
1163
+ cmdline.get_values (FLAG_ENFORCE_CONTRACT).begin (),
1164
+ cmdline.get_values (FLAG_ENFORCE_CONTRACT).end ());
1165
+
1166
+ std::set<std::string> to_exclude_from_nondet_static (
1167
+ cmdline.get_values (" nondet-static-exclude" ).begin (),
1168
+ cmdline.get_values (" nondet-static-exclude" ).end ());
1169
+
1170
+ dfcc (
1171
+ goto_model,
1172
+ harness_id,
1173
+ to_check,
1174
+ to_replace,
1175
+ cmdline.isset (FLAG_LOOP_CONTRACTS),
1176
+ to_exclude_from_nondet_static,
1177
+ log);
1178
+ }
1179
+ else
1180
+ {
1181
+ log.error () << " only one --dyncontracts entry point allowed"
1182
+ << messaget::eom;
1183
+ throw 0 ;
1184
+ }
1185
+ }
1148
1186
1149
1187
if (
1150
- cmdline.isset (FLAG_LOOP_CONTRACTS) || cmdline.isset (FLAG_REPLACE_CALL) ||
1151
- cmdline.isset (FLAG_ENFORCE_CONTRACT))
1188
+ !new_contracts &&
1189
+ (cmdline.isset (FLAG_LOOP_CONTRACTS) || cmdline.isset (FLAG_REPLACE_CALL) ||
1190
+ cmdline.isset (FLAG_ENFORCE_CONTRACT)))
1152
1191
{
1153
1192
do_indirect_call_and_rtti_removal ();
1154
1193
code_contractst contracts (goto_model, log);
@@ -1894,6 +1933,7 @@ void goto_instrument_parse_optionst::help()
1894
1933
" force aggressive slicer to preserve all direct paths\n " // NOLINT(*)
1895
1934
" \n "
1896
1935
" Code contracts:\n "
1936
+ HELP_DFCC
1897
1937
HELP_LOOP_CONTRACTS
1898
1938
HELP_REPLACE_CALL
1899
1939
HELP_ENFORCE_CONTRACT
0 commit comments