@@ -124,6 +124,69 @@ int goto_instrument_parse_optionst::doit()
124124 return CPROVER_EXIT_USAGE_ERROR;
125125 }
126126
127+ // Check if an output file is required before expensive operations
128+ // Most operations that modify the model require an output file
129+ if (cmdline.args .size () < 2 )
130+ {
131+ // Check if this is a read-only operation that doesn't require output
132+ // clang-format off
133+ bool is_read_only_operation =
134+ cmdline.isset (" call-graph" ) ||
135+ cmdline.isset (" check-call-sequence" ) ||
136+ cmdline.isset (" document-claims-html" ) ||
137+ cmdline.isset (" document-claims-latex" ) ||
138+ cmdline.isset (" document-properties-html" ) ||
139+ cmdline.isset (" document-properties-latex" ) ||
140+ cmdline.isset (" dot" ) ||
141+ cmdline.isset (" dump-c" ) ||
142+ cmdline.isset (" horn" ) ||
143+ cmdline.isset (" interpreter" ) ||
144+ cmdline.isset (" list-calls-args" ) ||
145+ cmdline.isset (" list-goto-functions" ) ||
146+ cmdline.isset (" list-symbols" ) ||
147+ cmdline.isset (" list-undefined-functions" ) ||
148+ cmdline.isset (" print-internal-representation" ) ||
149+ cmdline.isset (" reachable-call-graph" ) ||
150+ cmdline.isset (" show-call-sequences" ) ||
151+ cmdline.isset (" show-claims" ) ||
152+ cmdline.isset (" show-custom-bitvector-analysis" ) ||
153+ cmdline.isset (" show-dependence-graph" ) ||
154+ cmdline.isset (" show-escape-analysis" ) ||
155+ cmdline.isset (" show-global-may-alias" ) ||
156+ cmdline.isset (" show-goto-function-call-graph" ) ||
157+ cmdline.isset (" show-goto-functions" ) ||
158+ cmdline.isset (" show-intervals" ) ||
159+ cmdline.isset (" show-lexical-loops" ) ||
160+ cmdline.isset (" show-local-bitvector-analysis" ) ||
161+ cmdline.isset (" show-local-safe-pointers" ) ||
162+ cmdline.isset (" show-locations" ) ||
163+ cmdline.isset (" show-loops" ) ||
164+ cmdline.isset (" show-natural-loops" ) ||
165+ cmdline.isset (" show-points-to" ) ||
166+ cmdline.isset (" show-properties" ) ||
167+ cmdline.isset (" show-reaching-definitions" ) ||
168+ cmdline.isset (" show-rw-set" ) ||
169+ cmdline.isset (" show-safe-dereferences" ) ||
170+ cmdline.isset (" show-sese-regions" ) ||
171+ cmdline.isset (" show-struct-alignment" ) ||
172+ cmdline.isset (" show-symbol-table" ) ||
173+ cmdline.isset (" show-threaded" ) ||
174+ cmdline.isset (" show-uninitialized" ) ||
175+ cmdline.isset (" show-value-sets" ) ||
176+ cmdline.isset (" validate-goto-binary" ) ||
177+ cmdline.isset (" validate-goto-model" ) ||
178+ cmdline.isset (" xml" );
179+ // clang-format on
180+
181+ if (!is_read_only_operation)
182+ {
183+ log.error () << " Error: Output file name required. "
184+ << " Run 'goto-instrument --help' for usage information."
185+ << messaget::eom;
186+ return CPROVER_EXIT_USAGE_ERROR;
187+ }
188+ }
189+
127190 messaget::eval_verbosity (
128191 cmdline.get_value (" verbosity" ), messaget::M_STATUS, ui_message_handler);
129192
0 commit comments