@@ -13,6 +13,7 @@ import pathlib
13
13
MY_PATH = pathlib .Path (__file__ ).parent .parent .absolute ()
14
14
RMC_C_LIB = MY_PATH / "library" / "rmc" / "rmc_lib.c"
15
15
EXIT_CODE_SUCCESS = 0
16
+ CBMC_VERIFICATION_FAILURE_EXIT_CODE = 10
16
17
17
18
18
19
def main ():
@@ -26,12 +27,7 @@ def main():
26
27
crate_group .add_argument ("crate" , help = "crate to verify" , nargs = "?" )
27
28
crate_group .add_argument ("--crate" , help = "crate to verify" , dest = "crate_flag" , metavar = "CRATE" )
28
29
29
- exclude_flags = [
30
- # This should be able to be supported; https://github.com/model-checking/rmc/issues/359
31
- "--gen-symbols" ,
32
- # This should be able to be supported; https://github.com/model-checking/rmc/issues/360
33
- "--allow-cbmc-verification-failure" ,
34
- ]
30
+ exclude_flags = []
35
31
rmc_flags .add_flags (parser , {"default-target" : "target" }, exclude_flags = exclude_flags )
36
32
args = parser .parse_args ()
37
33
@@ -59,6 +55,7 @@ def main():
59
55
60
56
cbmc_filename = os .path .join (args .target_dir , "cbmc.out" )
61
57
c_filename = os .path .join (args .target_dir , "cbmc.c" )
58
+ symbols_filename = os .path .join (args .target_dir , "cbmc.symbols" )
62
59
if EXIT_CODE_SUCCESS != rmc .symbol_table_to_gotoc (jsons [0 ], cbmc_filename , args .verbose , args .keep_temps , args .dry_run ):
63
60
return 1
64
61
@@ -71,17 +68,26 @@ def main():
71
68
if EXIT_CODE_SUCCESS != rmc .goto_to_c (cbmc_filename , c_filename , args .verbose , args .dry_run ):
72
69
return 1
73
70
71
+ if args .gen_symbols :
72
+ if EXIT_CODE_SUCCESS != rmc .goto_to_symbols (cbmc_filename , symbols_filename , args .verbose , args .dry_run ):
73
+ return 1
74
+
74
75
if "--function" not in args .cbmc_args :
75
76
args .cbmc_args .extend (["--function" , args .function ])
76
77
77
78
if args .visualize :
78
79
# Use a separate set of flags for coverage checking (empty for now)
79
80
cover_args = []
80
- return rmc .run_visualize (cbmc_filename , args .cbmc_args , cover_args , \
81
+ retcode = rmc .run_visualize (cbmc_filename , args .cbmc_args , cover_args , \
81
82
args .verbose , args .quiet , args .keep_temps , \
82
83
args .function , args .srcdir , args .wkdir , args .target_dir , args .dry_run )
83
84
else :
84
- return rmc .run_cbmc (cbmc_filename , args .cbmc_args , args .verbose , args .quiet , args .dry_run )
85
+ retcode = rmc .run_cbmc (cbmc_filename , args .cbmc_args , args .verbose , args .quiet , args .dry_run )
86
+
87
+ if retcode == CBMC_VERIFICATION_FAILURE_EXIT_CODE and args .allow_cbmc_verification_failure :
88
+ retcode = EXIT_CODE_SUCCESS
89
+
90
+ return retcode
85
91
86
92
87
93
if __name__ == "__main__" :
0 commit comments