cprover
Loading...
Searching...
No Matches
goto_instrument_parse_options.h
Go to the documentation of this file.
1/*******************************************************************\
2
3Module: Command Line Parsing
4
5Author: Daniel Kroening, kroening@kroening.com
6
7\*******************************************************************/
8
11
12#ifndef CPROVER_GOTO_INSTRUMENT_GOTO_INSTRUMENT_PARSE_OPTIONS_H
13#define CPROVER_GOTO_INSTRUMENT_GOTO_INSTRUMENT_PARSE_OPTIONS_H
14
15#include <util/config.h>
16#include <util/parse_options.h>
17#include <util/timestamper.h>
18#include <util/ui_message.h>
20
28
32
33#include "aggressive_slicer.h"
34#include "count_eloc.h"
35#include "document_properties.h"
36#include "dump_c.h"
39#include "model_argc_argv.h"
40#include "nondet_volatile.h"
41#include "reachability_slicer.h"
42#include "replace_calls.h"
43#include "uninitialized.h"
44
45#include "contracts/contracts.h"
48#include "wmm/weak_memory.h"
49
50// clang-format off
51#define GOTO_INSTRUMENT_OPTIONS \
52 OPT_DOCUMENT_PROPERTIES \
53 OPT_DUMP_C \
54 "(dot)(xml)" \
55 OPT_GOTO_CHECK \
56 OPT_REMOVE_POINTERS \
57 "(no-simplify)" \
58 OPT_UNINITIALIZED_CHECK \
59 OPT_WMM \
60 "(race-check)" \
61 OPT_UNWINDSET \
62 "(unwindset-file):" \
63 "(unwinding-assertions)(partial-loops)(continue-as-loops)" \
64 "(no-unwinding-assertions)" \
65 "(log):" \
66 "(call-graph)(reachable-call-graph)" \
67 OPT_INSERT_FINAL_ASSERT_FALSE \
68 OPT_SHOW_CLASS_HIERARCHY \
69 "(isr):" \
70 "(stack-depth):(nondet-static)" \
71 "(nondet-static-exclude):" \
72 "(nondet-static-matching):" \
73 "(function-enter):(function-exit):(branch):" \
74 OPT_SHOW_GOTO_FUNCTIONS \
75 OPT_SHOW_PROPERTIES \
76 "(drop-unused-functions)" \
77 "(show-value-sets)" \
78 "(show-global-may-alias)" \
79 "(show-local-bitvector-analysis)(show-custom-bitvector-analysis)" \
80 "(show-escape-analysis)(escape-analysis)" \
81 "(custom-bitvector-analysis)" \
82 "(show-struct-alignment)(interval-analysis)(show-intervals)" \
83 "(show-uninitialized)(show-locations)" \
84 "(full-slice)(slice-global-inits)" \
85 OPT_REACHABILITY_SLICER \
86 OPT_FP_REACHABILITY_SLICER \
87 "(inline)(partial-inline)(function-inline):(log):(no-caching)" \
88 "(value-set-fi-fp-removal)" \
89 OPT_REMOVE_CONST_FUNCTION_POINTERS \
90 "(print-internal-representation)" \
91 "(remove-function-pointers)" \
92 "(show-claims)(property):" \
93 "(show-symbol-table)(show-points-to)(show-rw-set)" \
94 OPT_TIMESTAMP \
95 "(show-natural-loops)(show-lexical-loops)(accelerate)(havoc-loops)" \
96 "(verbosity):(version)(xml-ui)(json-ui)" \
97 "(accelerate)(constant-propagator)" \
98 "(k-induction):(step-case)(base-case)" \
99 "(show-call-sequences)(check-call-sequence)" \
100 "(interpreter)(show-reaching-definitions)" \
101 "(list-symbols)(list-undefined-functions)" \
102 "(z3)(add-library)(show-dependence-graph)" \
103 "(horn)(skip-loops):" \
104 OPT_ARGC_ARGV \
105 OPT_DFCC \
106 "(" FLAG_LOOP_CONTRACTS ")" \
107 "(" FLAG_DISABLE_SIDE_EFFECT_CHECK ")" \
108 "(" FLAG_LOOP_CONTRACTS_NO_UNWIND ")" \
109 "(" FLAG_LOOP_CONTRACTS_FILE "):" \
110 "(" FLAG_REPLACE_CALL "):" \
111 "(" FLAG_ENFORCE_CONTRACT "):" \
112 OPT_ENFORCE_CONTRACT_REC \
113 "(show-threaded)(list-calls-args)" \
114 "(undefined-function-is-assume-false)" \
115 "(remove-function-body):" \
116 "(remove-function-body-regex):" \
117 OPT_AGGRESSIVE_SLICER \
118 OPT_FLUSH \
119 "(splice-call):" \
120 OPT_REMOVE_CALLS_NO_BODY \
121 OPT_REPLACE_FUNCTION_BODY \
122 OPT_GOTO_PROGRAM_STATS \
123 "(show-local-safe-pointers)(show-safe-dereferences)" \
124 "(show-sese-regions)" \
125 OPT_REPLACE_CALLS \
126 "(validate-goto-binary)" \
127 OPT_VALIDATE \
128 OPT_ANSI_C_LANGUAGE \
129 OPT_RESTRICT_FUNCTION_POINTER \
130 OPT_NONDET_VOLATILE \
131 "(ensure-one-backedge-per-target)" \
132 OPT_CONFIG_LIBRARY \
133 // empty last line
134
135// clang-format on
136
138{
139public:
140 int doit() override;
141 void help() override;
142
143 goto_instrument_parse_optionst(int argc, const char **argv)
146 argc,
147 argv,
148 "goto-instrument"),
152 {
153 }
154
155protected:
156 void register_languages() override;
157
158 void get_goto_program();
160
161 void do_indirect_call_and_rtti_removal(bool force=false);
163 void do_partial_inlining();
164 void do_remove_returns();
165
169
171};
172
173#endif // CPROVER_GOTO_INSTRUMENT_GOTO_INSTRUMENT_PARSE_OPTIONS_H
Aggressive slicer Consider the control flow graph of the goto program and a criterion description of ...
Class Hierarchy.
void help() override
display command line help
void do_remove_const_function_pointers_only()
Remove function pointers that can be resolved by analysing const variables (i.e.
goto_instrument_parse_optionst(int argc, const char **argv)
int doit() override
invoke main modules
parse_options_baset(const std::string &optstring, int argc, const char **argv, const std::string &program)
Verify and use annotated invariants and pre/post-conditions.
Parse and annotate contracts.
Count effective lines of code.
Main class orchestrating the the whole program transformation for function contracts with Dynamic Fra...
Documentation of Properties.
Dump C from Goto Program.
Program Transformation.
#define GOTO_INSTRUMENT_OPTIONS
Insert final assert false into a function.
Initialize command line arguments.
Volatile Variables.
Remove calls to functions without a body.
Replace calls to given functions with calls to other given functions.
Given goto functions and a list of function parameters or globals that are function pointers with lis...
Show the goto functions.
Show the properties.
Emit timestamps.
Detection for Uninitialized Local Variables.
Loop unwinding.
Weak Memory Instrumentation for Threaded Goto Programs.