/* Decode and handle the vector of command line options. LANG_MASK contains has a single bit set representing the current language. */ static void handle_options (unsigned int argc, const char **argv, unsigned int lang_mask) { unsigned int n, i; for (i = 1; i < argc; i += n) { const char *opt = argv[i]; /* Interpret "-" or a non-switch as a file name. */ if (opt[0] != '-' || opt[1] == '\0') { if (main_input_filename == NULL) main_input_filename = opt; add_input_filename (opt); n = 1; continue; } n = handle_option (argv + i, lang_mask); if (!n) { n = 1; error ("unrecognized command line option \"%s\"", opt); } } }
static void read_cmdline_options (struct gcc_options *opts, struct gcc_options *opts_set, struct cl_decoded_option *decoded_options, unsigned int decoded_options_count, location_t loc, unsigned int lang_mask, const struct cl_option_handlers *handlers, diagnostic_context *dc) { unsigned int i; for (i = 1; i < decoded_options_count; i++) { if (decoded_options[i].opt_index == OPT_SPECIAL_input_file) { /* Input files should only ever appear on the main command line. */ gcc_assert (opts == &global_options); gcc_assert (opts_set == &global_options_set); if (opts->x_main_input_filename == NULL) { opts->x_main_input_filename = decoded_options[i].arg; opts->x_main_input_baselength = base_of_path (opts->x_main_input_filename, &opts->x_main_input_basename); } add_input_filename (decoded_options[i].arg); continue; } read_cmdline_option (opts, opts_set, decoded_options + i, loc, lang_mask, handlers, dc); } }