@@ -124,6 +124,55 @@ 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+ bool is_read_only_operation =
133+ cmdline.isset (" validate-goto-binary" ) ||
134+ cmdline.isset (" validate-goto-model" ) ||
135+ cmdline.isset (" show-goto-functions" ) ||
136+ cmdline.isset (" list-goto-functions" ) ||
137+ cmdline.isset (" show-symbol-table" ) || cmdline.isset (" show-properties" ) ||
138+ cmdline.isset (" show-claims" ) || cmdline.isset (" document-claims-html" ) ||
139+ cmdline.isset (" document-properties-html" ) ||
140+ cmdline.isset (" document-claims-latex" ) ||
141+ cmdline.isset (" document-properties-latex" ) ||
142+ cmdline.isset (" show-loops" ) || cmdline.isset (" show-value-sets" ) ||
143+ cmdline.isset (" show-global-may-alias" ) ||
144+ cmdline.isset (" show-local-bitvector-analysis" ) ||
145+ cmdline.isset (" show-custom-bitvector-analysis" ) ||
146+ cmdline.isset (" show-escape-analysis" ) ||
147+ cmdline.isset (" show-struct-alignment" ) ||
148+ cmdline.isset (" show-intervals" ) || cmdline.isset (" show-uninitialized" ) ||
149+ cmdline.isset (" show-locations" ) || cmdline.isset (" show-points-to" ) ||
150+ cmdline.isset (" show-rw-set" ) || cmdline.isset (" show-natural-loops" ) ||
151+ cmdline.isset (" show-lexical-loops" ) || cmdline.isset (" show-threaded" ) ||
152+ cmdline.isset (" show-reaching-definitions" ) ||
153+ cmdline.isset (" show-dependence-graph" ) ||
154+ cmdline.isset (" show-call-sequences" ) ||
155+ cmdline.isset (" check-call-sequence" ) || cmdline.isset (" list-symbols" ) ||
156+ cmdline.isset (" list-undefined-functions" ) ||
157+ cmdline.isset (" list-calls-args" ) ||
158+ cmdline.isset (" show-local-safe-pointers" ) ||
159+ cmdline.isset (" show-safe-dereferences" ) ||
160+ cmdline.isset (" show-sese-regions" ) ||
161+ cmdline.isset (" show-goto-function-call-graph" ) ||
162+ cmdline.isset (" reachable-call-graph" ) || cmdline.isset (" call-graph" ) ||
163+ cmdline.isset (" dot" ) || cmdline.isset (" xml" ) || cmdline.isset (" horn" ) ||
164+ cmdline.isset (" print-internal-representation" ) ||
165+ cmdline.isset (" interpreter" );
166+
167+ if (!is_read_only_operation)
168+ {
169+ log.error () << " Error: Output file name required. "
170+ << " Run 'goto-instrument --help' for usage information."
171+ << messaget::eom;
172+ return CPROVER_EXIT_USAGE_ERROR;
173+ }
174+ }
175+
127176 messaget::eval_verbosity (
128177 cmdline.get_value (" verbosity" ), messaget::M_STATUS, ui_message_handler);
129178
0 commit comments