27
27
#include < chrono>
28
28
#include < iostream>
29
29
30
- int word_level_bmc (
30
+ property_checker_resultt word_level_bmc (
31
31
const cmdlinet &cmdline,
32
32
const transition_systemt &transition_system,
33
33
ebmc_propertiest &properties,
@@ -38,8 +38,6 @@ int word_level_bmc(
38
38
bool convert_only = cmdline.isset (" smt2" ) || cmdline.isset (" outfile" ) ||
39
39
cmdline.isset (" show-formula" );
40
40
41
- int result = 0 ;
42
-
43
41
try
44
42
{
45
43
if (cmdline.isset (" max-bound" ))
@@ -93,38 +91,34 @@ int word_level_bmc(
93
91
solver_factory,
94
92
message_handler);
95
93
96
- if (!convert_only)
97
- {
98
- const namespacet ns (transition_system.symbol_table );
99
- report_results (cmdline, properties, ns, message_handler);
100
- result = properties.exit_code ();
101
- }
94
+ if (convert_only)
95
+ return property_checker_resultt::SUCCESS;
102
96
}
103
97
}
104
98
105
99
catch (const char *e)
106
100
{
107
101
messaget message{message_handler};
108
102
message.error () << e << messaget::eom;
109
- return 10 ;
103
+ return property_checker_resultt::ERROR ;
110
104
}
111
105
112
106
catch (const std::string &e)
113
107
{
114
108
messaget message{message_handler};
115
109
message.error () << e << messaget::eom;
116
- return 10 ;
110
+ return property_checker_resultt::ERROR ;
117
111
}
118
112
119
113
catch (int )
120
114
{
121
- return 10 ;
115
+ return property_checker_resultt::ERROR ;
122
116
}
123
117
124
- return result ;
118
+ return property_checker_resultt::VERIFICATION_RESULT ;
125
119
}
126
120
127
- int finish_bit_level_bmc (
121
+ property_checker_resultt finish_bit_level_bmc (
128
122
std::size_t bound,
129
123
const bmc_mapt &bmc_map,
130
124
propt &solver,
@@ -179,12 +173,12 @@ int finish_bit_level_bmc(
179
173
180
174
case propt::resultt::P_ERROR:
181
175
message.error () << " Error from decision procedure" << messaget::eom;
182
- return 2 ;
176
+ return property_checker_resultt::ERROR ;
183
177
184
178
default :
185
179
message.error () << " Unexpected result from decision procedure"
186
180
<< messaget::eom;
187
- return 1 ;
181
+ return property_checker_resultt::ERROR ;
188
182
}
189
183
}
190
184
@@ -195,10 +189,10 @@ int finish_bit_level_bmc(
195
189
<< std::chrono::duration<double >(sat_stop_time - sat_start_time).count ()
196
190
<< messaget::eom;
197
191
198
- return properties. exit_code () ;
192
+ return property_checker_resultt::VERIFICATION_RESULT ;
199
193
}
200
194
201
- int bit_level_bmc (
195
+ property_checker_resultt bit_level_bmc (
202
196
cnft &solver,
203
197
bool convert_only,
204
198
const cmdlinet &cmdline,
@@ -220,8 +214,6 @@ int bit_level_bmc(
220
214
bound = 1 ;
221
215
}
222
216
223
- int result;
224
-
225
217
try
226
218
{
227
219
bmc_mapt bmc_map;
@@ -288,38 +280,35 @@ int bit_level_bmc(
288
280
}
289
281
290
282
if (convert_only)
291
- result = 0 ;
283
+ return property_checker_resultt::SUCCESS ;
292
284
else
293
285
{
294
- result = finish_bit_level_bmc (
286
+ return finish_bit_level_bmc (
295
287
bound, bmc_map, solver, transition_system, properties, message_handler);
296
- report_results (cmdline, properties, ns, message_handler);
297
288
}
298
289
}
299
290
300
291
catch (const char *e)
301
292
{
302
293
messaget message{message_handler};
303
294
message.error () << e << messaget::eom;
304
- return 10 ;
295
+ return property_checker_resultt::ERROR ;
305
296
}
306
297
307
298
catch (const std::string &e)
308
299
{
309
300
messaget message{message_handler};
310
301
message.error () << e << messaget::eom;
311
- return 10 ;
302
+ return property_checker_resultt::ERROR ;
312
303
}
313
304
314
305
catch (int )
315
306
{
316
- return 10 ;
307
+ return property_checker_resultt::ERROR ;
317
308
}
318
-
319
- return result;
320
309
}
321
310
322
- int bit_level_bmc (
311
+ property_checker_resultt bit_level_bmc (
323
312
const cmdlinet &cmdline,
324
313
transition_systemt &transition_system,
325
314
ebmc_propertiest &properties,
@@ -380,23 +369,43 @@ int property_checker(
380
369
ebmc_propertiest &properties,
381
370
message_handlert &message_handler)
382
371
{
372
+ property_checker_resultt result;
373
+
383
374
if (cmdline.isset (" bdd" ) || cmdline.isset (" show-bdds" ))
384
375
{
385
- return bdd_engine (cmdline, transition_system, properties, message_handler);
376
+ result =
377
+ bdd_engine (cmdline, transition_system, properties, message_handler);
386
378
}
387
379
else if (cmdline.isset (" aig" ) || cmdline.isset (" dimacs" ))
388
380
{
389
- return bit_level_bmc (
390
- cmdline, transition_system, properties, message_handler);
381
+ result =
382
+ bit_level_bmc ( cmdline, transition_system, properties, message_handler);
391
383
}
392
384
else if (cmdline.isset (" k-induction" ))
393
385
{
394
- return k_induction (cmdline, transition_system, properties, message_handler);
386
+ result =
387
+ k_induction (cmdline, transition_system, properties, message_handler);
395
388
}
396
389
else
397
390
{
398
391
// default engine is word-level BMC
399
- return word_level_bmc (
400
- cmdline, transition_system, properties, message_handler);
392
+ result =
393
+ word_level_bmc (cmdline, transition_system, properties, message_handler);
394
+ }
395
+
396
+ switch (result)
397
+ {
398
+ case property_checker_resultt::ERROR:
399
+ return 10 ;
400
+
401
+ case property_checker_resultt::SUCCESS:
402
+ return 0 ;
403
+
404
+ case property_checker_resultt::VERIFICATION_RESULT:
405
+ const namespacet ns{transition_system.symbol_table };
406
+ report_results (cmdline, properties, ns, message_handler);
407
+ return properties.exit_code ();
401
408
}
409
+
410
+ UNREACHABLE;
402
411
}
0 commit comments