xref: /dflybsd-src/contrib/gcc-4.7/gcc/opts-global.c (revision 04febcfb30580676d3e95f58a16c5137ee478b32)
1*e4b17023SJohn Marino /* Command line option handling.  Code involving global state that
2*e4b17023SJohn Marino    should not be shared with the driver.
3*e4b17023SJohn Marino    Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4*e4b17023SJohn Marino    Free Software Foundation, Inc.
5*e4b17023SJohn Marino 
6*e4b17023SJohn Marino This file is part of GCC.
7*e4b17023SJohn Marino 
8*e4b17023SJohn Marino GCC is free software; you can redistribute it and/or modify it under
9*e4b17023SJohn Marino the terms of the GNU General Public License as published by the Free
10*e4b17023SJohn Marino Software Foundation; either version 3, or (at your option) any later
11*e4b17023SJohn Marino version.
12*e4b17023SJohn Marino 
13*e4b17023SJohn Marino GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14*e4b17023SJohn Marino WARRANTY; without even the implied warranty of MERCHANTABILITY or
15*e4b17023SJohn Marino FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16*e4b17023SJohn Marino for more details.
17*e4b17023SJohn Marino 
18*e4b17023SJohn Marino You should have received a copy of the GNU General Public License
19*e4b17023SJohn Marino along with GCC; see the file COPYING3.  If not see
20*e4b17023SJohn Marino <http://www.gnu.org/licenses/>.  */
21*e4b17023SJohn Marino 
22*e4b17023SJohn Marino #include "config.h"
23*e4b17023SJohn Marino #include "system.h"
24*e4b17023SJohn Marino #include "coretypes.h"
25*e4b17023SJohn Marino #include "diagnostic.h"
26*e4b17023SJohn Marino #include "opts.h"
27*e4b17023SJohn Marino #include "flags.h"
28*e4b17023SJohn Marino #include "ggc.h"
29*e4b17023SJohn Marino #include "tree.h" /* Required by langhooks.h.  */
30*e4b17023SJohn Marino #include "langhooks.h"
31*e4b17023SJohn Marino #include "tm.h" /* Required by rtl.h.  */
32*e4b17023SJohn Marino #include "rtl.h"
33*e4b17023SJohn Marino #include "dbgcnt.h"
34*e4b17023SJohn Marino #include "debug.h"
35*e4b17023SJohn Marino #include "lto-streamer.h"
36*e4b17023SJohn Marino #include "output.h"
37*e4b17023SJohn Marino #include "plugin.h"
38*e4b17023SJohn Marino #include "toplev.h"
39*e4b17023SJohn Marino #include "tree-pass.h"
40*e4b17023SJohn Marino 
41*e4b17023SJohn Marino typedef const char *const_char_p; /* For DEF_VEC_P.  */
42*e4b17023SJohn Marino DEF_VEC_P(const_char_p);
43*e4b17023SJohn Marino DEF_VEC_ALLOC_P(const_char_p,heap);
44*e4b17023SJohn Marino 
45*e4b17023SJohn Marino static VEC(const_char_p,heap) *ignored_options;
46*e4b17023SJohn Marino 
47*e4b17023SJohn Marino /* Input file names.  */
48*e4b17023SJohn Marino const char **in_fnames;
49*e4b17023SJohn Marino unsigned num_in_fnames;
50*e4b17023SJohn Marino 
51*e4b17023SJohn Marino /* Return a malloced slash-separated list of languages in MASK.  */
52*e4b17023SJohn Marino 
53*e4b17023SJohn Marino static char *
write_langs(unsigned int mask)54*e4b17023SJohn Marino write_langs (unsigned int mask)
55*e4b17023SJohn Marino {
56*e4b17023SJohn Marino   unsigned int n = 0, len = 0;
57*e4b17023SJohn Marino   const char *lang_name;
58*e4b17023SJohn Marino   char *result;
59*e4b17023SJohn Marino 
60*e4b17023SJohn Marino   for (n = 0; (lang_name = lang_names[n]) != 0; n++)
61*e4b17023SJohn Marino     if (mask & (1U << n))
62*e4b17023SJohn Marino       len += strlen (lang_name) + 1;
63*e4b17023SJohn Marino 
64*e4b17023SJohn Marino   result = XNEWVEC (char, len);
65*e4b17023SJohn Marino   len = 0;
66*e4b17023SJohn Marino   for (n = 0; (lang_name = lang_names[n]) != 0; n++)
67*e4b17023SJohn Marino     if (mask & (1U << n))
68*e4b17023SJohn Marino       {
69*e4b17023SJohn Marino 	if (len)
70*e4b17023SJohn Marino 	  result[len++] = '/';
71*e4b17023SJohn Marino 	strcpy (result + len, lang_name);
72*e4b17023SJohn Marino 	len += strlen (lang_name);
73*e4b17023SJohn Marino       }
74*e4b17023SJohn Marino 
75*e4b17023SJohn Marino   result[len] = 0;
76*e4b17023SJohn Marino 
77*e4b17023SJohn Marino   return result;
78*e4b17023SJohn Marino }
79*e4b17023SJohn Marino 
80*e4b17023SJohn Marino /* Complain that switch DECODED does not apply to this front end (mask
81*e4b17023SJohn Marino    LANG_MASK).  */
82*e4b17023SJohn Marino 
83*e4b17023SJohn Marino static void
complain_wrong_lang(const struct cl_decoded_option * decoded,unsigned int lang_mask)84*e4b17023SJohn Marino complain_wrong_lang (const struct cl_decoded_option *decoded,
85*e4b17023SJohn Marino 		     unsigned int lang_mask)
86*e4b17023SJohn Marino {
87*e4b17023SJohn Marino   const struct cl_option *option = &cl_options[decoded->opt_index];
88*e4b17023SJohn Marino   const char *text = decoded->orig_option_with_args_text;
89*e4b17023SJohn Marino   char *ok_langs = NULL, *bad_lang = NULL;
90*e4b17023SJohn Marino   unsigned int opt_flags = option->flags;
91*e4b17023SJohn Marino 
92*e4b17023SJohn Marino   if (!lang_hooks.complain_wrong_lang_p (option))
93*e4b17023SJohn Marino     return;
94*e4b17023SJohn Marino 
95*e4b17023SJohn Marino   opt_flags &= ((1U << cl_lang_count) - 1) | CL_DRIVER;
96*e4b17023SJohn Marino   if (opt_flags != CL_DRIVER)
97*e4b17023SJohn Marino     ok_langs = write_langs (opt_flags);
98*e4b17023SJohn Marino   if (lang_mask != CL_DRIVER)
99*e4b17023SJohn Marino     bad_lang = write_langs (lang_mask);
100*e4b17023SJohn Marino 
101*e4b17023SJohn Marino   if (opt_flags == CL_DRIVER)
102*e4b17023SJohn Marino     error ("command line option %qs is valid for the driver but not for %s",
103*e4b17023SJohn Marino 	   text, bad_lang);
104*e4b17023SJohn Marino   else if (lang_mask == CL_DRIVER)
105*e4b17023SJohn Marino     gcc_unreachable ();
106*e4b17023SJohn Marino   else
107*e4b17023SJohn Marino     /* Eventually this should become a hard error IMO.  */
108*e4b17023SJohn Marino     warning (0, "command line option %qs is valid for %s but not for %s",
109*e4b17023SJohn Marino 	     text, ok_langs, bad_lang);
110*e4b17023SJohn Marino 
111*e4b17023SJohn Marino   free (ok_langs);
112*e4b17023SJohn Marino   free (bad_lang);
113*e4b17023SJohn Marino }
114*e4b17023SJohn Marino 
115*e4b17023SJohn Marino /* Buffer the unknown option described by the string OPT.  Currently,
116*e4b17023SJohn Marino    we only complain about unknown -Wno-* options if they may have
117*e4b17023SJohn Marino    prevented a diagnostic. Otherwise, we just ignore them.  Note that
118*e4b17023SJohn Marino    if we do complain, it is only as a warning, not an error; passing
119*e4b17023SJohn Marino    the compiler an unrecognised -Wno-* option should never change
120*e4b17023SJohn Marino    whether the compilation succeeds or fails.  */
121*e4b17023SJohn Marino 
122*e4b17023SJohn Marino static void
postpone_unknown_option_warning(const char * opt)123*e4b17023SJohn Marino postpone_unknown_option_warning (const char *opt)
124*e4b17023SJohn Marino {
125*e4b17023SJohn Marino   VEC_safe_push (const_char_p, heap, ignored_options, opt);
126*e4b17023SJohn Marino }
127*e4b17023SJohn Marino 
128*e4b17023SJohn Marino /* Produce a warning for each option previously buffered.  */
129*e4b17023SJohn Marino 
130*e4b17023SJohn Marino void
print_ignored_options(void)131*e4b17023SJohn Marino print_ignored_options (void)
132*e4b17023SJohn Marino {
133*e4b17023SJohn Marino   while (!VEC_empty (const_char_p, ignored_options))
134*e4b17023SJohn Marino     {
135*e4b17023SJohn Marino       const char *opt;
136*e4b17023SJohn Marino 
137*e4b17023SJohn Marino       opt = VEC_pop (const_char_p, ignored_options);
138*e4b17023SJohn Marino       warning_at (UNKNOWN_LOCATION, 0,
139*e4b17023SJohn Marino 		  "unrecognized command line option \"%s\"", opt);
140*e4b17023SJohn Marino     }
141*e4b17023SJohn Marino }
142*e4b17023SJohn Marino 
143*e4b17023SJohn Marino /* Handle an unknown option DECODED, returning true if an error should
144*e4b17023SJohn Marino    be given.  */
145*e4b17023SJohn Marino 
146*e4b17023SJohn Marino static bool
unknown_option_callback(const struct cl_decoded_option * decoded)147*e4b17023SJohn Marino unknown_option_callback (const struct cl_decoded_option *decoded)
148*e4b17023SJohn Marino {
149*e4b17023SJohn Marino   const char *opt = decoded->arg;
150*e4b17023SJohn Marino 
151*e4b17023SJohn Marino   if (opt[1] == 'W' && opt[2] == 'n' && opt[3] == 'o' && opt[4] == '-'
152*e4b17023SJohn Marino       && !(decoded->errors & CL_ERR_NEGATIVE))
153*e4b17023SJohn Marino     {
154*e4b17023SJohn Marino       /* We don't generate warnings for unknown -Wno-* options unless
155*e4b17023SJohn Marino 	 we issue diagnostics.  */
156*e4b17023SJohn Marino       postpone_unknown_option_warning (opt);
157*e4b17023SJohn Marino       return false;
158*e4b17023SJohn Marino     }
159*e4b17023SJohn Marino   else
160*e4b17023SJohn Marino     return true;
161*e4b17023SJohn Marino }
162*e4b17023SJohn Marino 
163*e4b17023SJohn Marino /* Handle a front-end option; arguments and return value as for
164*e4b17023SJohn Marino    handle_option.  */
165*e4b17023SJohn Marino 
166*e4b17023SJohn Marino static bool
lang_handle_option(struct gcc_options * opts,struct gcc_options * opts_set,const struct cl_decoded_option * decoded,unsigned int lang_mask ATTRIBUTE_UNUSED,int kind,location_t loc,const struct cl_option_handlers * handlers,diagnostic_context * dc)167*e4b17023SJohn Marino lang_handle_option (struct gcc_options *opts,
168*e4b17023SJohn Marino 		    struct gcc_options *opts_set,
169*e4b17023SJohn Marino 		    const struct cl_decoded_option *decoded,
170*e4b17023SJohn Marino 		    unsigned int lang_mask ATTRIBUTE_UNUSED, int kind,
171*e4b17023SJohn Marino 		    location_t loc,
172*e4b17023SJohn Marino 		    const struct cl_option_handlers *handlers,
173*e4b17023SJohn Marino 		    diagnostic_context *dc)
174*e4b17023SJohn Marino {
175*e4b17023SJohn Marino   gcc_assert (opts == &global_options);
176*e4b17023SJohn Marino   gcc_assert (opts_set == &global_options_set);
177*e4b17023SJohn Marino   gcc_assert (dc == global_dc);
178*e4b17023SJohn Marino   gcc_assert (decoded->canonical_option_num_elements <= 2);
179*e4b17023SJohn Marino   return lang_hooks.handle_option (decoded->opt_index, decoded->arg,
180*e4b17023SJohn Marino 				   decoded->value, kind, loc, handlers);
181*e4b17023SJohn Marino }
182*e4b17023SJohn Marino 
183*e4b17023SJohn Marino /* Handle FILENAME from the command line.  */
184*e4b17023SJohn Marino 
185*e4b17023SJohn Marino static void
add_input_filename(const char * filename)186*e4b17023SJohn Marino add_input_filename (const char *filename)
187*e4b17023SJohn Marino {
188*e4b17023SJohn Marino   num_in_fnames++;
189*e4b17023SJohn Marino   in_fnames = XRESIZEVEC (const char *, in_fnames, num_in_fnames);
190*e4b17023SJohn Marino   in_fnames[num_in_fnames - 1] = filename;
191*e4b17023SJohn Marino }
192*e4b17023SJohn Marino 
193*e4b17023SJohn Marino /* Handle the vector of command line options (located at LOC), storing
194*e4b17023SJohn Marino    the results of processing DECODED_OPTIONS and DECODED_OPTIONS_COUNT
195*e4b17023SJohn Marino    in OPTS and OPTS_SET and using DC for diagnostic state.  LANG_MASK
196*e4b17023SJohn Marino    contains has a single bit set representing the current language.
197*e4b17023SJohn Marino    HANDLERS describes what functions to call for the options.  */
198*e4b17023SJohn Marino 
199*e4b17023SJohn Marino 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)200*e4b17023SJohn Marino read_cmdline_options (struct gcc_options *opts, struct gcc_options *opts_set,
201*e4b17023SJohn Marino 		      struct cl_decoded_option *decoded_options,
202*e4b17023SJohn Marino 		      unsigned int decoded_options_count,
203*e4b17023SJohn Marino 		      location_t loc,
204*e4b17023SJohn Marino 		      unsigned int lang_mask,
205*e4b17023SJohn Marino 		      const struct cl_option_handlers *handlers,
206*e4b17023SJohn Marino 		      diagnostic_context *dc)
207*e4b17023SJohn Marino {
208*e4b17023SJohn Marino   unsigned int i;
209*e4b17023SJohn Marino 
210*e4b17023SJohn Marino   for (i = 1; i < decoded_options_count; i++)
211*e4b17023SJohn Marino     {
212*e4b17023SJohn Marino       if (decoded_options[i].opt_index == OPT_SPECIAL_input_file)
213*e4b17023SJohn Marino 	{
214*e4b17023SJohn Marino 	  /* Input files should only ever appear on the main command
215*e4b17023SJohn Marino 	     line.  */
216*e4b17023SJohn Marino 	  gcc_assert (opts == &global_options);
217*e4b17023SJohn Marino 	  gcc_assert (opts_set == &global_options_set);
218*e4b17023SJohn Marino 
219*e4b17023SJohn Marino 	  if (opts->x_main_input_filename == NULL)
220*e4b17023SJohn Marino 	    {
221*e4b17023SJohn Marino 	      opts->x_main_input_filename = decoded_options[i].arg;
222*e4b17023SJohn Marino 	      opts->x_main_input_baselength
223*e4b17023SJohn Marino 		= base_of_path (opts->x_main_input_filename,
224*e4b17023SJohn Marino 				&opts->x_main_input_basename);
225*e4b17023SJohn Marino 	    }
226*e4b17023SJohn Marino 	  add_input_filename (decoded_options[i].arg);
227*e4b17023SJohn Marino 	  continue;
228*e4b17023SJohn Marino 	}
229*e4b17023SJohn Marino 
230*e4b17023SJohn Marino       read_cmdline_option (opts, opts_set,
231*e4b17023SJohn Marino 			   decoded_options + i, loc, lang_mask, handlers,
232*e4b17023SJohn Marino 			   dc);
233*e4b17023SJohn Marino     }
234*e4b17023SJohn Marino }
235*e4b17023SJohn Marino 
236*e4b17023SJohn Marino /* Language mask determined at initialization.  */
237*e4b17023SJohn Marino static unsigned int initial_lang_mask;
238*e4b17023SJohn Marino 
239*e4b17023SJohn Marino /* Initialize global options-related settings at start-up.  */
240*e4b17023SJohn Marino 
241*e4b17023SJohn Marino void
init_options_once(void)242*e4b17023SJohn Marino init_options_once (void)
243*e4b17023SJohn Marino {
244*e4b17023SJohn Marino   /* Perform language-specific options initialization.  */
245*e4b17023SJohn Marino   initial_lang_mask = lang_hooks.option_lang_mask ();
246*e4b17023SJohn Marino 
247*e4b17023SJohn Marino   lang_hooks.initialize_diagnostics (global_dc);
248*e4b17023SJohn Marino }
249*e4b17023SJohn Marino 
250*e4b17023SJohn Marino /* Decode command-line options to an array, like
251*e4b17023SJohn Marino    decode_cmdline_options_to_array and with the same arguments but
252*e4b17023SJohn Marino    using the default lang_mask.  */
253*e4b17023SJohn Marino 
254*e4b17023SJohn Marino void
decode_cmdline_options_to_array_default_mask(unsigned int argc,const char ** argv,struct cl_decoded_option ** decoded_options,unsigned int * decoded_options_count)255*e4b17023SJohn Marino decode_cmdline_options_to_array_default_mask (unsigned int argc,
256*e4b17023SJohn Marino 					      const char **argv,
257*e4b17023SJohn Marino 					      struct cl_decoded_option **decoded_options,
258*e4b17023SJohn Marino 					      unsigned int *decoded_options_count)
259*e4b17023SJohn Marino {
260*e4b17023SJohn Marino   decode_cmdline_options_to_array (argc, argv,
261*e4b17023SJohn Marino 				   initial_lang_mask | CL_COMMON | CL_TARGET,
262*e4b17023SJohn Marino 				   decoded_options, decoded_options_count);
263*e4b17023SJohn Marino }
264*e4b17023SJohn Marino 
265*e4b17023SJohn Marino /* Set *HANDLERS to the default set of option handlers for use in the
266*e4b17023SJohn Marino    compilers proper (not the driver).  */
267*e4b17023SJohn Marino void
set_default_handlers(struct cl_option_handlers * handlers)268*e4b17023SJohn Marino set_default_handlers (struct cl_option_handlers *handlers)
269*e4b17023SJohn Marino {
270*e4b17023SJohn Marino   handlers->unknown_option_callback = unknown_option_callback;
271*e4b17023SJohn Marino   handlers->wrong_lang_callback = complain_wrong_lang;
272*e4b17023SJohn Marino   handlers->num_handlers = 3;
273*e4b17023SJohn Marino   handlers->handlers[0].handler = lang_handle_option;
274*e4b17023SJohn Marino   handlers->handlers[0].mask = initial_lang_mask;
275*e4b17023SJohn Marino   handlers->handlers[1].handler = common_handle_option;
276*e4b17023SJohn Marino   handlers->handlers[1].mask = CL_COMMON;
277*e4b17023SJohn Marino   handlers->handlers[2].handler = target_handle_option;
278*e4b17023SJohn Marino   handlers->handlers[2].mask = CL_TARGET;
279*e4b17023SJohn Marino }
280*e4b17023SJohn Marino 
281*e4b17023SJohn Marino /* Parse command line options and set default flag values.  Do minimal
282*e4b17023SJohn Marino    options processing.  The decoded options are in *DECODED_OPTIONS
283*e4b17023SJohn Marino    and *DECODED_OPTIONS_COUNT; settings go in OPTS, OPTS_SET and DC;
284*e4b17023SJohn Marino    the options are located at LOC.  */
285*e4b17023SJohn Marino void
decode_options(struct gcc_options * opts,struct gcc_options * opts_set,struct cl_decoded_option * decoded_options,unsigned int decoded_options_count,location_t loc,diagnostic_context * dc)286*e4b17023SJohn Marino decode_options (struct gcc_options *opts, struct gcc_options *opts_set,
287*e4b17023SJohn Marino 		struct cl_decoded_option *decoded_options,
288*e4b17023SJohn Marino 		unsigned int decoded_options_count,
289*e4b17023SJohn Marino 		location_t loc, diagnostic_context *dc)
290*e4b17023SJohn Marino {
291*e4b17023SJohn Marino   struct cl_option_handlers handlers;
292*e4b17023SJohn Marino 
293*e4b17023SJohn Marino   unsigned int lang_mask;
294*e4b17023SJohn Marino 
295*e4b17023SJohn Marino   lang_mask = initial_lang_mask;
296*e4b17023SJohn Marino 
297*e4b17023SJohn Marino   set_default_handlers (&handlers);
298*e4b17023SJohn Marino 
299*e4b17023SJohn Marino   default_options_optimization (opts, opts_set,
300*e4b17023SJohn Marino 				decoded_options, decoded_options_count,
301*e4b17023SJohn Marino 				loc, lang_mask, &handlers, dc);
302*e4b17023SJohn Marino 
303*e4b17023SJohn Marino   read_cmdline_options (opts, opts_set,
304*e4b17023SJohn Marino 			decoded_options, decoded_options_count,
305*e4b17023SJohn Marino 			loc, lang_mask,
306*e4b17023SJohn Marino 			&handlers, dc);
307*e4b17023SJohn Marino 
308*e4b17023SJohn Marino   finish_options (opts, opts_set, loc);
309*e4b17023SJohn Marino }
310*e4b17023SJohn Marino 
311*e4b17023SJohn Marino /* Process common options that have been deferred until after the
312*e4b17023SJohn Marino    handlers have been called for all options.  */
313*e4b17023SJohn Marino 
314*e4b17023SJohn Marino void
handle_common_deferred_options(void)315*e4b17023SJohn Marino handle_common_deferred_options (void)
316*e4b17023SJohn Marino {
317*e4b17023SJohn Marino   unsigned int i;
318*e4b17023SJohn Marino   cl_deferred_option *opt;
319*e4b17023SJohn Marino   VEC(cl_deferred_option,heap) *vec
320*e4b17023SJohn Marino     = (VEC(cl_deferred_option,heap) *) common_deferred_options;
321*e4b17023SJohn Marino 
322*e4b17023SJohn Marino   if (flag_dump_all_passed)
323*e4b17023SJohn Marino     enable_rtl_dump_file ();
324*e4b17023SJohn Marino 
325*e4b17023SJohn Marino   FOR_EACH_VEC_ELT (cl_deferred_option, vec, i, opt)
326*e4b17023SJohn Marino     {
327*e4b17023SJohn Marino       switch (opt->opt_index)
328*e4b17023SJohn Marino 	{
329*e4b17023SJohn Marino 	case OPT_fcall_used_:
330*e4b17023SJohn Marino 	  fix_register (opt->arg, 0, 1);
331*e4b17023SJohn Marino 	  break;
332*e4b17023SJohn Marino 
333*e4b17023SJohn Marino 	case OPT_fcall_saved_:
334*e4b17023SJohn Marino 	  fix_register (opt->arg, 0, 0);
335*e4b17023SJohn Marino 	  break;
336*e4b17023SJohn Marino 
337*e4b17023SJohn Marino 	case OPT_fdbg_cnt_:
338*e4b17023SJohn Marino 	  dbg_cnt_process_opt (opt->arg);
339*e4b17023SJohn Marino 	  break;
340*e4b17023SJohn Marino 
341*e4b17023SJohn Marino 	case OPT_fdbg_cnt_list:
342*e4b17023SJohn Marino 	  dbg_cnt_list_all_counters ();
343*e4b17023SJohn Marino 	  break;
344*e4b17023SJohn Marino 
345*e4b17023SJohn Marino 	case OPT_fdebug_prefix_map_:
346*e4b17023SJohn Marino 	  add_debug_prefix_map (opt->arg);
347*e4b17023SJohn Marino 	  break;
348*e4b17023SJohn Marino 
349*e4b17023SJohn Marino 	case OPT_fdump_:
350*e4b17023SJohn Marino 	  if (!dump_switch_p (opt->arg))
351*e4b17023SJohn Marino 	    error ("unrecognized command line option %<-fdump-%s%>", opt->arg);
352*e4b17023SJohn Marino 	  break;
353*e4b17023SJohn Marino 
354*e4b17023SJohn Marino 	case OPT_fenable_:
355*e4b17023SJohn Marino 	case OPT_fdisable_:
356*e4b17023SJohn Marino 	  if (opt->opt_index == OPT_fenable_)
357*e4b17023SJohn Marino 	    enable_pass (opt->arg);
358*e4b17023SJohn Marino           else
359*e4b17023SJohn Marino 	    disable_pass (opt->arg);
360*e4b17023SJohn Marino           break;
361*e4b17023SJohn Marino 
362*e4b17023SJohn Marino 	case OPT_ffixed_:
363*e4b17023SJohn Marino 	  /* Deferred.  */
364*e4b17023SJohn Marino 	  fix_register (opt->arg, 1, 1);
365*e4b17023SJohn Marino 	  break;
366*e4b17023SJohn Marino 
367*e4b17023SJohn Marino 	case OPT_fplugin_:
368*e4b17023SJohn Marino #ifdef ENABLE_PLUGIN
369*e4b17023SJohn Marino 	  add_new_plugin (opt->arg);
370*e4b17023SJohn Marino #else
371*e4b17023SJohn Marino 	  error ("plugin support is disabled; configure with --enable-plugin");
372*e4b17023SJohn Marino #endif
373*e4b17023SJohn Marino 	  break;
374*e4b17023SJohn Marino 
375*e4b17023SJohn Marino 	case OPT_fplugin_arg_:
376*e4b17023SJohn Marino #ifdef ENABLE_PLUGIN
377*e4b17023SJohn Marino 	  parse_plugin_arg_opt (opt->arg);
378*e4b17023SJohn Marino #else
379*e4b17023SJohn Marino 	  error ("plugin support is disabled; configure with --enable-plugin");
380*e4b17023SJohn Marino #endif
381*e4b17023SJohn Marino 	  break;
382*e4b17023SJohn Marino 
383*e4b17023SJohn Marino 	case OPT_frandom_seed:
384*e4b17023SJohn Marino 	  /* The real switch is -fno-random-seed.  */
385*e4b17023SJohn Marino 	  if (!opt->value)
386*e4b17023SJohn Marino 	    set_random_seed (NULL);
387*e4b17023SJohn Marino 	  break;
388*e4b17023SJohn Marino 
389*e4b17023SJohn Marino 	case OPT_frandom_seed_:
390*e4b17023SJohn Marino 	  set_random_seed (opt->arg);
391*e4b17023SJohn Marino 	  break;
392*e4b17023SJohn Marino 
393*e4b17023SJohn Marino 	case OPT_fstack_limit:
394*e4b17023SJohn Marino 	  /* The real switch is -fno-stack-limit.  */
395*e4b17023SJohn Marino 	  if (!opt->value)
396*e4b17023SJohn Marino 	    stack_limit_rtx = NULL_RTX;
397*e4b17023SJohn Marino 	  break;
398*e4b17023SJohn Marino 
399*e4b17023SJohn Marino 	case OPT_fstack_limit_register_:
400*e4b17023SJohn Marino 	  {
401*e4b17023SJohn Marino 	    int reg = decode_reg_name (opt->arg);
402*e4b17023SJohn Marino 	    if (reg < 0)
403*e4b17023SJohn Marino 	      error ("unrecognized register name %qs", opt->arg);
404*e4b17023SJohn Marino 	    else
405*e4b17023SJohn Marino 	      stack_limit_rtx = gen_rtx_REG (Pmode, reg);
406*e4b17023SJohn Marino 	  }
407*e4b17023SJohn Marino 	  break;
408*e4b17023SJohn Marino 
409*e4b17023SJohn Marino 	case OPT_fstack_limit_symbol_:
410*e4b17023SJohn Marino 	  stack_limit_rtx = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (opt->arg));
411*e4b17023SJohn Marino 	  break;
412*e4b17023SJohn Marino 
413*e4b17023SJohn Marino 	default:
414*e4b17023SJohn Marino 	  gcc_unreachable ();
415*e4b17023SJohn Marino 	}
416*e4b17023SJohn Marino     }
417*e4b17023SJohn Marino }
418