Skip to content

Commit c3e78b3

Browse files
committed
introduce property_checker_resultt
This introduces a type for the result from an engine, as a replacement for 'int'.
1 parent c60cabb commit c3e78b3

File tree

6 files changed

+66
-58
lines changed

6 files changed

+66
-58
lines changed

src/ebmc/bdd_engine.cpp

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ Author: Daniel Kroening, [email protected]
2222
#include <trans-netlist/unwind_netlist.h>
2323
#include <verilog/sva_expr.h>
2424

25-
#include "report_results.h"
26-
2725
#include <algorithm>
2826
#include <iostream>
2927

@@ -51,7 +49,7 @@ class bdd_enginet
5149
{
5250
}
5351

54-
int operator()();
52+
property_checker_resultt operator()();
5553

5654
protected:
5755
using propertiest = ebmc_propertiest;
@@ -173,7 +171,7 @@ Function: bdd_enginet::operator()
173171
174172
\*******************************************************************/
175173

176-
int bdd_enginet::operator()()
174+
property_checker_resultt bdd_enginet::operator()()
177175
{
178176
try
179177
{
@@ -216,30 +214,29 @@ int bdd_enginet::operator()()
216214
}
217215

218216
std::cout << '\n';
219-
220-
return 0;
217+
218+
return property_checker_resultt::SUCCESS;
221219
}
222220

223221
if(properties.properties.empty())
224222
{
225223
message.error() << "no properties" << messaget::eom;
226-
return 1;
224+
return property_checker_resultt::ERROR;
227225
}
228226

229227
for(propertyt &p : properties.properties)
230228
check_property(p);
231229

232-
report_results(cmdline, properties, ns, message.get_message_handler());
233-
return properties.exit_code();
230+
return property_checker_resultt::REPORT_RESULT;
234231
}
235232
catch(const char *error_msg)
236233
{
237234
message.error() << error_msg << messaget::eom;
238-
return 1;
235+
return property_checker_resultt::ERROR;
239236
}
240237
catch(int)
241238
{
242-
return 1;
239+
return property_checker_resultt::ERROR;
243240
}
244241
}
245242

@@ -1002,7 +999,7 @@ Function: bdd_engine
1002999
10031000
\*******************************************************************/
10041001

1005-
int bdd_engine(
1002+
property_checker_resultt bdd_engine(
10061003
const cmdlinet &cmdline,
10071004
transition_systemt &transition_system,
10081005
ebmc_propertiest &properties,

src/ebmc/bdd_engine.h

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,9 @@ Author: Daniel Kroening, [email protected]
99
#ifndef CPROVER_EBMC_BDD_ENGINE_H
1010
#define CPROVER_EBMC_BDD_ENGINE_H
1111

12-
#include <util/cmdline.h>
13-
#include <util/message.h>
12+
#include "property_checker.h"
1413

15-
#include "ebmc_properties.h"
16-
17-
int bdd_engine(
14+
property_checker_resultt bdd_engine(
1815
const cmdlinet &,
1916
transition_systemt &,
2017
ebmc_propertiest &,

src/ebmc/k_induction.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ Author: Daniel Kroening, [email protected]
1919
#include "ebmc_error.h"
2020
#include "ebmc_solver_factory.h"
2121
#include "liveness_to_safety.h"
22-
#include "report_results.h"
2322

2423
#include <fstream>
2524

@@ -118,7 +117,7 @@ Function: k_induction
118117
119118
\*******************************************************************/
120119

121-
int k_induction(
120+
property_checker_resultt k_induction(
122121
const cmdlinet &cmdline,
123122
transition_systemt &transition_system,
124123
ebmc_propertiest &properties,
@@ -154,9 +153,7 @@ int k_induction(
154153
k_induction(
155154
k, transition_system, properties, solver_factory, message_handler);
156155

157-
const namespacet ns(transition_system.symbol_table);
158-
report_results(cmdline, properties, ns, message_handler);
159-
return properties.exit_code();
156+
return property_checker_resultt::REPORT_RESULT;
160157
}
161158

162159
/*******************************************************************\

src/ebmc/k_induction.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@ Author: Daniel Kroening, [email protected]
1313
#include <util/message.h>
1414

1515
#include "ebmc_solver_factory.h"
16+
#include "property_checker.h"
1617

1718
class transition_systemt;
1819
class ebmc_propertiest;
1920

20-
int k_induction(
21+
property_checker_resultt k_induction(
2122
const cmdlinet &,
2223
transition_systemt &,
2324
ebmc_propertiest &,

src/ebmc/property_checker.cpp

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Author: Daniel Kroening, [email protected]
2727
#include <chrono>
2828
#include <iostream>
2929

30-
int word_level_bmc(
30+
property_checker_resultt word_level_bmc(
3131
const cmdlinet &cmdline,
3232
const transition_systemt &transition_system,
3333
ebmc_propertiest &properties,
@@ -38,8 +38,6 @@ int word_level_bmc(
3838
bool convert_only = cmdline.isset("smt2") || cmdline.isset("outfile") ||
3939
cmdline.isset("show-formula");
4040

41-
int result = 0;
42-
4341
try
4442
{
4543
if(cmdline.isset("max-bound"))
@@ -93,38 +91,34 @@ int word_level_bmc(
9391
solver_factory,
9492
message_handler);
9593

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;
10296
}
10397
}
10498

10599
catch(const char *e)
106100
{
107101
messaget message{message_handler};
108102
message.error() << e << messaget::eom;
109-
return 10;
103+
return property_checker_resultt::ERROR;
110104
}
111105

112106
catch(const std::string &e)
113107
{
114108
messaget message{message_handler};
115109
message.error() << e << messaget::eom;
116-
return 10;
110+
return property_checker_resultt::ERROR;
117111
}
118112

119113
catch(int)
120114
{
121-
return 10;
115+
return property_checker_resultt::ERROR;
122116
}
123117

124-
return result;
118+
return property_checker_resultt::REPORT_RESULT;
125119
}
126120

127-
int finish_bit_level_bmc(
121+
property_checker_resultt finish_bit_level_bmc(
128122
std::size_t bound,
129123
const bmc_mapt &bmc_map,
130124
propt &solver,
@@ -179,12 +173,12 @@ int finish_bit_level_bmc(
179173

180174
case propt::resultt::P_ERROR:
181175
message.error() << "Error from decision procedure" << messaget::eom;
182-
return 2;
176+
return property_checker_resultt::ERROR;
183177

184178
default:
185179
message.error() << "Unexpected result from decision procedure"
186180
<< messaget::eom;
187-
return 1;
181+
return property_checker_resultt::ERROR;
188182
}
189183
}
190184

@@ -195,10 +189,10 @@ int finish_bit_level_bmc(
195189
<< std::chrono::duration<double>(sat_stop_time - sat_start_time).count()
196190
<< messaget::eom;
197191

198-
return properties.exit_code();
192+
return property_checker_resultt::REPORT_RESULT;
199193
}
200194

201-
int bit_level_bmc(
195+
property_checker_resultt bit_level_bmc(
202196
cnft &solver,
203197
bool convert_only,
204198
const cmdlinet &cmdline,
@@ -220,8 +214,6 @@ int bit_level_bmc(
220214
bound = 1;
221215
}
222216

223-
int result;
224-
225217
try
226218
{
227219
bmc_mapt bmc_map;
@@ -288,38 +280,35 @@ int bit_level_bmc(
288280
}
289281

290282
if(convert_only)
291-
result = 0;
283+
return property_checker_resultt::SUCCESS;
292284
else
293285
{
294-
result = finish_bit_level_bmc(
286+
return finish_bit_level_bmc(
295287
bound, bmc_map, solver, transition_system, properties, message_handler);
296-
report_results(cmdline, properties, ns, message_handler);
297288
}
298289
}
299290

300291
catch(const char *e)
301292
{
302293
messaget message{message_handler};
303294
message.error() << e << messaget::eom;
304-
return 10;
295+
return property_checker_resultt::ERROR;
305296
}
306297

307298
catch(const std::string &e)
308299
{
309300
messaget message{message_handler};
310301
message.error() << e << messaget::eom;
311-
return 10;
302+
return property_checker_resultt::ERROR;
312303
}
313304

314305
catch(int)
315306
{
316-
return 10;
307+
return property_checker_resultt::ERROR;
317308
}
318-
319-
return result;
320309
}
321310

322-
int bit_level_bmc(
311+
property_checker_resultt bit_level_bmc(
323312
const cmdlinet &cmdline,
324313
transition_systemt &transition_system,
325314
ebmc_propertiest &properties,
@@ -380,23 +369,43 @@ int property_checker(
380369
ebmc_propertiest &properties,
381370
message_handlert &message_handler)
382371
{
372+
property_checker_resultt result;
373+
383374
if(cmdline.isset("bdd") || cmdline.isset("show-bdds"))
384375
{
385-
return bdd_engine(cmdline, transition_system, properties, message_handler);
376+
result =
377+
bdd_engine(cmdline, transition_system, properties, message_handler);
386378
}
387379
else if(cmdline.isset("aig") || cmdline.isset("dimacs"))
388380
{
389-
return bit_level_bmc(
390-
cmdline, transition_system, properties, message_handler);
381+
result =
382+
bit_level_bmc(cmdline, transition_system, properties, message_handler);
391383
}
392384
else if(cmdline.isset("k-induction"))
393385
{
394-
return k_induction(cmdline, transition_system, properties, message_handler);
386+
result =
387+
k_induction(cmdline, transition_system, properties, message_handler);
395388
}
396389
else
397390
{
398391
// 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::REPORT_RESULT:
405+
const namespacet ns{transition_system.symbol_table};
406+
report_results(cmdline, properties, ns, message_handler);
407+
return properties.exit_code();
401408
}
409+
410+
UNREACHABLE;
402411
}

src/ebmc/property_checker.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ Author: Daniel Kroening, [email protected]
1212
#include "ebmc_properties.h"
1313
#include "transition_system.h"
1414

15+
enum class property_checker_resultt
16+
{
17+
REPORT_RESULT,
18+
SUCCESS,
19+
ERROR
20+
};
21+
1522
int property_checker(
1623
const cmdlinet &,
1724
transition_systemt &,

0 commit comments

Comments
 (0)