1 /* Command line option handling.
2 Copyright (C) 2002, 2003 Free Software Foundation, Inc.
3 Contributed by Neil Booth.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
24 #include "coretypes.h"
30 #include "langhooks.h"
36 #include "diagnostic.h"
37 #include "tm_p.h" /* For OPTIMIZATION_OPTIONS. */
38 #include "insn-attr.h" /* For INSN_SCHEDULING. */
40 /* Value of the -G xx switch, and whether it was passed or not. */
41 unsigned HOST_WIDE_INT g_switch_value;
44 /* True if we should exit after parsing options. */
45 bool exit_after_options;
50 /* Print various extra warnings. -W/-Wextra. */
53 /* Don't print warning messages. -w. */
54 bool inhibit_warnings;
56 /* Treat warnings as errors. -Werror. */
57 bool warnings_are_errors;
59 /* Warn if a function returns an aggregate, since there are often
60 incompatible calling conventions for doing this. */
61 bool warn_aggregate_return;
63 /* Nonzero means warn about pointer casts that increase the required
64 alignment of the target type (and might therefore lead to a crash
65 due to a misaligned access). */
68 /* Nonzero means warn about uses of __attribute__((deprecated))
70 bool warn_deprecated_decl = true;
72 /* Warn when an optimization pass is disabled. */
73 bool warn_disabled_optimization;
75 /* Nonzero means warn if inline function is too large. */
78 /* True to warn about any objects definitions whose size is larger
79 than N bytes. Also want about function definitions whose returned
80 values are larger than N bytes, where N is `larger_than_size'. */
81 bool warn_larger_than;
82 HOST_WIDE_INT larger_than_size;
84 /* Warn about functions which might be candidates for attribute noreturn. */
85 bool warn_missing_noreturn;
87 /* True to warn about code which is never reached. */
90 /* Warn if packed attribute on struct is unnecessary and inefficient. */
93 /* Warn when gcc pads a structure to an alignment boundary. */
96 /* True means warn about all declarations which shadow others. */
99 /* Nonzero means warn about constructs which might not be
100 strict-aliasing safe. */
101 bool warn_strict_aliasing;
103 /* True to warn if a switch on an enum, that does not have a default
104 case, fails to have a case for every enum value. */
107 /* Warn if a switch does not have a default case. */
108 bool warn_switch_default;
110 /* Warn if a switch on an enum fails to have a case for every enum
111 value (regardless of the presence or otherwise of a default case). */
112 bool warn_switch_enum;
114 /* Don't suppress warnings from system headers. -Wsystem-headers. */
115 bool warn_system_headers;
117 /* True to warn about variables used before they are initialized. */
118 int warn_uninitialized;
120 /* True to warn about unused variables, functions et.al. */
121 bool warn_unused_function;
122 bool warn_unused_label;
123 bool warn_unused_parameter;
124 bool warn_unused_variable;
125 bool warn_unused_value;
127 /* Hack for cooperation between set_Wunused and set_Wextra. */
128 static bool maybe_warn_unused_parameter;
130 static size_t find_opt (const char *, int);
131 static int common_handle_option (size_t scode, const char *arg, int value);
132 static void handle_param (const char *);
133 static void set_Wextra (int);
134 static unsigned int handle_option (const char **argv, unsigned int lang_mask);
135 static char *write_langs (unsigned int lang_mask);
136 static void complain_wrong_lang (const char *, const struct cl_option *,
137 unsigned int lang_mask);
138 static void handle_options (unsigned int, const char **, unsigned int);
140 /* Perform a binary search to find which option the command-line INPUT
141 matches. Returns its index in the option array, and N_OPTS
142 (cl_options_count) on failure.
144 This routine is quite subtle. A normal binary search is not good
145 enough because some options can be suffixed with an argument, and
146 multiple sub-matches can occur, e.g. input of "-pedantic" matching
147 the initial substring of "-pedantic-errors".
149 A more complicated example is -gstabs. It should match "-g" with
150 an argument of "stabs". Suppose, however, that the number and list
151 of switches are such that the binary search tests "-gen-decls"
152 before having tested "-g". This doesn't match, and as "-gen-decls"
153 is less than "-gstabs", it will become the lower bound of the
154 binary search range, and "-g" will never be seen. To resolve this
155 issue, opts.sh makes "-gen-decls" point, via the back_chain member,
156 to "-g" so that failed searches that end between "-gen-decls" and
157 the lexicographically subsequent switch know to go back and see if
158 "-g" causes a match (which it does in this example).
160 This search is done in such a way that the longest match for the
161 front end in question wins. If there is no match for the current
162 front end, the longest match for a different front end is returned
163 (or N_OPTS if none) and the caller emits an error message. */
165 find_opt (const char *input, int lang_mask)
167 size_t mn, mx, md, opt_len;
168 size_t match_wrong_lang;
172 mx = cl_options_count;
174 /* Find mn such this lexicographical inequality holds:
175 cl_options[mn] <= input < cl_options[mn + 1]. */
179 opt_len = cl_options[md].opt_len;
180 comp = strncmp (input, cl_options[md].opt_text, opt_len);
188 /* This is the switch that is the best match but for a different
189 front end, or cl_options_count if there is no match at all. */
190 match_wrong_lang = cl_options_count;
192 /* Backtrace the chain of possible matches, returning the longest
193 one, if any, that fits best. With current GCC switches, this
194 loop executes at most twice. */
197 const struct cl_option *opt = &cl_options[mn];
199 /* Is this switch a prefix of the input? */
200 if (!strncmp (input, opt->opt_text, opt->opt_len))
202 /* If language is OK, and the match is exact or the switch
203 takes a joined argument, return it. */
204 if ((opt->flags & lang_mask)
205 && (input[opt->opt_len] == '\0' || (opt->flags & CL_JOINED)))
208 /* If we haven't remembered a prior match, remember this
209 one. Any prior match is necessarily better. */
210 if (match_wrong_lang == cl_options_count)
211 match_wrong_lang = mn;
214 /* Try the next possibility. This is cl_options_count if there
216 mn = opt->back_chain;
218 while (mn != cl_options_count);
220 /* Return the best wrong match, or cl_options_count if none. */
221 return match_wrong_lang;
224 /* If ARG is a non-negative integer made up solely of digits, return its
225 value, otherwise return -1. */
227 integral_argument (const char *arg)
231 while (*p && ISDIGIT (*p))
240 /* Return a malloced slash-separated list of languages in MASK. */
242 write_langs (unsigned int mask)
244 unsigned int n = 0, len = 0;
245 const char *lang_name;
248 for (n = 0; (lang_name = lang_names[n]) != 0; n++)
249 if (mask & (1U << n))
250 len += strlen (lang_name) + 1;
252 result = xmalloc (len);
254 for (n = 0; (lang_name = lang_names[n]) != 0; n++)
255 if (mask & (1U << n))
259 strcpy (result + len, lang_name);
260 len += strlen (lang_name);
268 /* Complain that switch OPT_INDEX does not apply to this front end. */
270 complain_wrong_lang (const char *text, const struct cl_option *option,
271 unsigned int lang_mask)
273 char *ok_langs, *bad_lang;
275 ok_langs = write_langs (option->flags);
276 bad_lang = write_langs (lang_mask);
278 /* Eventually this should become a hard error IMO. */
279 warning ("command line option \"%s\" is valid for %s but not for %s",
280 text, ok_langs, bad_lang);
286 /* Handle the switch beginning at ARGV for the language indicated by
287 LANG_MASK. Returns the number of switches consumed. */
289 handle_option (const char **argv, unsigned int lang_mask)
292 const char *opt, *arg = 0;
295 unsigned int result = 0;
296 const struct cl_option *option;
300 /* Drop the "no-" from negative switches. */
301 if ((opt[1] == 'W' || opt[1] == 'f')
302 && opt[2] == 'n' && opt[3] == 'o' && opt[4] == '-')
304 size_t len = strlen (opt) - 3;
306 dup = xmalloc (len + 1);
309 memcpy (dup + 2, opt + 5, len - 2 + 1);
314 opt_index = find_opt (opt + 1, lang_mask | CL_COMMON);
315 if (opt_index == cl_options_count)
318 option = &cl_options[opt_index];
320 /* Reject negative form of switches that don't take negatives as
322 if (!value && (option->flags & CL_REJECT_NEGATIVE))
325 /* We've recognized this switch. */
328 /* Sort out any argument the switch takes. */
329 if (option->flags & CL_JOINED)
331 /* Have arg point to the original switch. This is because
332 some code, such as disable_builtin_function, expects its
333 argument to be persistent until the program exits. */
334 arg = argv[0] + cl_options[opt_index].opt_len + 1;
336 arg += strlen ("no-");
338 if (*arg == '\0' && !(option->flags & CL_MISSING_OK))
340 if (option->flags & CL_SEPARATE)
346 /* Missing argument. */
350 else if (option->flags & CL_SEPARATE)
356 /* Now we've swallowed any potential argument, complain if this
357 is a switch for a different front end. */
358 if (!(option->flags & (lang_mask | CL_COMMON)))
360 complain_wrong_lang (argv[0], option, lang_mask);
364 if (arg == NULL && (option->flags & (CL_JOINED | CL_SEPARATE)))
366 if (!(*lang_hooks.missing_argument) (opt, opt_index))
367 error ("missing argument to \"%s\"", opt);
371 /* If the switch takes an integer, convert it. */
372 if (arg && (option->flags & CL_UINTEGER))
374 value = integral_argument (arg);
377 error ("argument to \"-%s\" should be a non-negative integer",
383 if (option->flags & lang_mask)
384 if ((*lang_hooks.handle_option) (opt_index, arg, value) == 0)
387 if (result && (option->flags & CL_COMMON))
388 if (common_handle_option (opt_index, arg, value) == 0)
397 /* Decode and handle the vector of command line options. LANG_MASK
398 contains has a single bit set representing the current
401 handle_options (unsigned int argc, const char **argv, unsigned int lang_mask)
405 for (i = 1; i < argc; i += n)
407 const char *opt = argv[i];
409 /* Interpret "-" or a non-switch as a file name. */
410 if (opt[0] != '-' || opt[1] == '\0')
412 main_input_filename = opt;
413 (*lang_hooks.handle_filename) (opt);
418 n = handle_option (argv + i, lang_mask);
423 error ("unrecognized command line option \"%s\"", opt);
428 /* Parse command line options and set default flag values. Do minimal
429 options processing. */
431 decode_options (unsigned int argc, const char **argv)
433 unsigned int i, lang_mask;
435 /* Perform language-specific options initialization. */
436 lang_mask = (*lang_hooks.init_options) (argc, argv);
438 /* Scan to see what optimization level has been specified. That will
439 determine the default value of many flags. */
440 for (i = 1; i < argc; i++)
442 if (!strcmp (argv[i], "-O"))
447 else if (argv[i][0] == '-' && argv[i][1] == 'O')
449 /* Handle -Os, -O2, -O3, -O69, ... */
450 const char *p = &argv[i][2];
452 if ((p[0] == 's') && (p[1] == 0))
456 /* Optimizing for size forces optimize to be 2. */
461 const int optimize_val = read_integral_parameter (p, p - 2, -1);
462 if (optimize_val != -1)
464 optimize = optimize_val;
473 flag_merge_constants = 0;
479 flag_thread_jumps = 1;
481 flag_delayed_branch = 1;
483 #ifdef CAN_DEBUG_WITHOUT_FP
484 flag_omit_frame_pointer = 1;
486 flag_guess_branch_prob = 1;
487 flag_cprop_registers = 1;
488 flag_loop_optimize = 1;
489 flag_crossjumping = 1;
490 flag_if_conversion = 1;
491 flag_if_conversion2 = 1;
496 flag_optimize_sibling_calls = 1;
497 flag_cse_follow_jumps = 1;
498 flag_cse_skip_blocks = 1;
500 flag_expensive_optimizations = 1;
501 flag_strength_reduce = 1;
502 flag_rerun_cse_after_loop = 1;
503 flag_rerun_loop_opt = 1;
504 flag_caller_saves = 1;
507 #ifdef INSN_SCHEDULING
508 flag_schedule_insns = 1;
509 flag_schedule_insns_after_reload = 1;
512 flag_strict_aliasing = 1;
513 flag_delete_null_pointer_checks = 1;
514 flag_reorder_blocks = 1;
515 flag_reorder_functions = 1;
520 flag_inline_functions = 1;
521 flag_rename_registers = 1;
522 flag_unswitch_loops = 1;
523 flag_unit_at_a_time = 1;
526 if (optimize < 2 || optimize_size)
533 /* Don't reorder blocks when optimizing for size because extra
534 jump insns may be created; also barrier may create extra padding.
536 More correctly we should have a block reordering mode that tried
537 to minimize the combined size of all the jumps. This would more
538 or less automatically remove extra jumps, but would also try to
539 use more short jumps instead of long jumps. */
540 flag_reorder_blocks = 0;
543 /* Initialize whether `char' is signed. */
544 flag_signed_char = DEFAULT_SIGNED_CHAR;
545 #ifdef DEFAULT_SHORT_ENUMS
546 /* Initialize how much space enums occupy, by default. */
547 flag_short_enums = DEFAULT_SHORT_ENUMS;
550 /* Initialize target_flags before OPTIMIZATION_OPTIONS so the latter can
553 set_target_switch ("");
555 /* Unwind tables are always present in an ABI-conformant IA-64
556 object file, so the default should be ON. */
557 #ifdef IA64_UNWIND_INFO
558 flag_unwind_tables = IA64_UNWIND_INFO;
561 #ifdef OPTIMIZATION_OPTIONS
562 /* Allow default optimizations to be specified on a per-machine basis. */
563 OPTIMIZATION_OPTIONS (optimize, optimize_size);
566 handle_options (argc, argv, lang_mask);
570 if (flag_pic && !flag_pie)
573 if (flag_no_inline == 2)
576 flag_really_no_inline = flag_no_inline;
578 /* Set flag_no_inline before the post_options () hook. The C front
579 ends use it to determine tree inlining defaults. FIXME: such
580 code should be lang-independent when all front ends use tree
581 inlining, in which case it, and this condition, should be moved
582 to the top of process_options() instead. */
585 /* Inlining does not work if not optimizing,
586 so force it not to be done. */
590 /* The c_decode_option function and decode_option hook set
591 this to `2' if -Wall is used, so we can avoid giving out
592 lots of errors for people who don't realize what -Wall does. */
593 if (warn_uninitialized == 1)
594 warning ("-Wuninitialized is not supported without -O");
597 if (flag_really_no_inline == 2)
598 flag_really_no_inline = flag_no_inline;
601 /* Handle target- and language-independent options. Return zero to
602 generate an "unknown option" message. */
604 common_handle_option (size_t scode, const char *arg,
605 int value ATTRIBUTE_UNUSED)
607 enum opt_code code = (enum opt_code) scode;
616 exit_after_options = true;
623 case OPT__target_help:
624 display_target_options ();
625 exit_after_options = true;
629 print_version (stderr, "");
630 exit_after_options = true;
634 g_switch_value = value;
640 /* Currently handled in a prescan. */
644 /* For backward compatibility, -W is the same as -Wextra. */
648 case OPT_Waggregate_return:
649 warn_aggregate_return = value;
652 case OPT_Wcast_align:
653 warn_cast_align = value;
656 case OPT_Wdeprecated_declarations:
657 warn_deprecated_decl = value;
660 case OPT_Wdisabled_optimization:
661 warn_disabled_optimization = value;
665 warnings_are_errors = value;
676 case OPT_Wlarger_than_:
677 larger_than_size = value;
678 warn_larger_than = value != -1;
681 case OPT_Wmissing_noreturn:
682 warn_missing_noreturn = value;
697 case OPT_Wstrict_aliasing:
698 warn_strict_aliasing = value;
705 case OPT_Wswitch_default:
706 warn_switch_default = value;
709 case OPT_Wswitch_enum:
710 warn_switch_enum = value;
713 case OPT_Wsystem_headers:
714 warn_system_headers = value;
717 case OPT_Wuninitialized:
718 warn_uninitialized = value;
721 case OPT_Wunreachable_code:
722 warn_notreached = value;
729 case OPT_Wunused_function:
730 warn_unused_function = value;
733 case OPT_Wunused_label:
734 warn_unused_label = value;
737 case OPT_Wunused_parameter:
738 warn_unused_parameter = value;
741 case OPT_Wunused_value:
742 warn_unused_value = value;
745 case OPT_Wunused_variable:
746 warn_unused_variable = value;
751 aux_info_file_name = arg;
752 flag_gen_aux_info = 1;
759 case OPT_auxbase_strip:
761 char *tmp = xstrdup (arg);
762 strip_off_ending (tmp, strlen (tmp));
769 decode_d_option (arg);
773 dump_base_name = arg;
777 flag_pic = value + value;
781 flag_pie = value + value;
784 case OPT_falign_functions:
785 case OPT_falign_functions_:
786 align_functions = !value;
789 case OPT_falign_jumps:
790 case OPT_falign_jumps_:
791 align_jumps = !value;
794 case OPT_falign_labels:
795 case OPT_falign_labels_:
796 align_labels = !value;
799 case OPT_falign_loops:
800 case OPT_falign_loops_:
801 align_loops = !value;
804 case OPT_fargument_alias:
805 flag_argument_noalias = !value;
808 case OPT_fargument_noalias:
809 flag_argument_noalias = value;
812 case OPT_fargument_noalias_global:
813 flag_argument_noalias = value + value;
816 case OPT_fasynchronous_unwind_tables:
817 flag_asynchronous_unwind_tables = value;
820 case OPT_fbounds_check:
821 flag_bounds_check = value;
824 case OPT_fbranch_count_reg:
825 flag_branch_on_count_reg = value;
828 case OPT_fbranch_probabilities:
829 flag_branch_probabilities = value;
832 case OPT_fbranch_target_load_optimize:
833 flag_branch_target_load_optimize = value;
836 case OPT_fbranch_target_load_optimize2:
837 flag_branch_target_load_optimize2 = value;
840 case OPT_fcall_used_:
841 fix_register (arg, 0, 1);
844 case OPT_fcall_saved_:
845 fix_register (arg, 0, 0);
848 case OPT_fcaller_saves:
849 flag_caller_saves = value;
853 flag_no_common = !value;
856 case OPT_fcprop_registers:
857 flag_cprop_registers = value;
860 case OPT_fcrossjumping:
861 flag_crossjumping = value;
864 case OPT_fcse_follow_jumps:
865 flag_cse_follow_jumps = value;
868 case OPT_fcse_skip_blocks:
869 flag_cse_skip_blocks = value;
872 case OPT_fdata_sections:
873 flag_data_sections = value;
877 flag_defer_pop = value;
880 case OPT_fdelayed_branch:
881 flag_delayed_branch = value;
884 case OPT_fdelete_null_pointer_checks:
885 flag_delete_null_pointer_checks = value;
888 case OPT_fdiagnostics_show_location_:
889 if (!strcmp (arg, "once"))
890 diagnostic_prefixing_rule (global_dc) = DIAGNOSTICS_SHOW_PREFIX_ONCE;
891 else if (!strcmp (arg, "every-line"))
892 diagnostic_prefixing_rule (global_dc)
893 = DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE;
898 case OPT_fdump_unnumbered:
899 flag_dump_unnumbered = value;
902 case OPT_feliminate_dwarf2_dups:
903 flag_eliminate_dwarf2_dups = value;
906 case OPT_feliminate_unused_debug_types:
907 flag_eliminate_unused_debug_types = value;
910 case OPT_feliminate_unused_debug_symbols:
911 flag_debug_only_used_symbols = value;
914 case OPT_fexceptions:
915 flag_exceptions = value;
918 case OPT_fexpensive_optimizations:
919 flag_expensive_optimizations = value;
923 set_fast_math_flags (value);
926 case OPT_ffinite_math_only:
927 flag_finite_math_only = value;
931 fix_register (arg, 1, 1);
934 case OPT_ffunction_cse:
935 flag_no_function_cse = !value;
938 case OPT_ffloat_store:
939 flag_float_store = value;
942 case OPT_fforce_addr:
943 flag_force_addr = value;
947 flag_force_mem = value;
950 case OPT_ffunction_sections:
951 flag_function_sections = value;
959 flag_gcse_lm = value;
963 flag_gcse_sm = value;
966 case OPT_fgnu_linker:
967 flag_gnu_linker = value;
970 case OPT_fguess_branch_probability:
971 flag_guess_branch_prob = value;
975 flag_no_ident = !value;
978 case OPT_fif_conversion:
979 flag_if_conversion = value;
982 case OPT_fif_conversion2:
983 flag_if_conversion2 = value;
986 case OPT_finhibit_size_directive:
987 flag_inhibit_size_directive = value;
991 flag_no_inline = !value;
994 case OPT_finline_functions:
995 flag_inline_functions = value;
998 case OPT_finline_limit_:
999 case OPT_finline_limit_eq:
1000 set_param_value ("max-inline-insns", value);
1001 set_param_value ("max-inline-insns-single", value / 2);
1002 set_param_value ("max-inline-insns-auto", value / 2);
1003 set_param_value ("max-inline-insns-rtl", value);
1004 if (value / 4 < MIN_INLINE_INSNS)
1007 set_param_value ("min-inline-insns", value / 4);
1009 set_param_value ("min-inline-insns", 10);
1013 case OPT_finstrument_functions:
1014 flag_instrument_function_entry_exit = value;
1017 case OPT_fkeep_inline_functions:
1018 flag_keep_inline_functions =value;
1021 case OPT_fkeep_static_consts:
1022 flag_keep_static_consts = value;
1025 case OPT_fleading_underscore:
1026 flag_leading_underscore = value;
1029 case OPT_floop_optimize:
1030 flag_loop_optimize = value;
1033 case OPT_fmath_errno:
1034 flag_errno_math = value;
1037 case OPT_fmem_report:
1041 case OPT_fmerge_all_constants:
1042 flag_merge_constants = value + value;
1045 case OPT_fmerge_constants:
1046 flag_merge_constants = value;
1049 case OPT_fmessage_length_:
1050 output_set_maximum_length (&global_dc->buffer, value);
1053 case OPT_fmove_all_movables:
1054 flag_move_all_movables = value;
1058 flag_new_regalloc = value;
1061 case OPT_fnon_call_exceptions:
1062 flag_non_call_exceptions = value;
1065 case OPT_fold_unroll_all_loops:
1066 flag_old_unroll_all_loops = value;
1069 case OPT_fold_unroll_loops:
1070 flag_old_unroll_loops = value;
1073 case OPT_fomit_frame_pointer:
1074 flag_omit_frame_pointer = value;
1077 case OPT_foptimize_register_move:
1078 flag_regmove = value;
1081 case OPT_foptimize_sibling_calls:
1082 flag_optimize_sibling_calls = value;
1085 case OPT_fpack_struct:
1086 flag_pack_struct = value;
1089 case OPT_fpeel_loops:
1090 flag_peel_loops = value;
1093 case OPT_fpcc_struct_return:
1094 flag_pcc_struct_return = value;
1098 flag_no_peephole = !value;
1101 case OPT_fpeephole2:
1102 flag_peephole2 = value;
1113 case OPT_fprefetch_loop_arrays:
1114 flag_prefetch_loop_arrays = value;
1118 profile_flag = value;
1121 case OPT_fprofile_arcs:
1122 profile_arc_flag = value;
1125 case OPT_frandom_seed:
1126 /* The real switch is -fno-random-seed. */
1129 flag_random_seed = NULL;
1132 case OPT_frandom_seed_:
1133 flag_random_seed = arg;
1136 case OPT_freduce_all_givs:
1137 flag_reduce_all_givs = value;
1140 case OPT_freg_struct_return:
1141 flag_pcc_struct_return = !value;
1145 flag_regmove = value;
1148 case OPT_frename_registers:
1149 flag_rename_registers = value;
1152 case OPT_freorder_blocks:
1153 flag_reorder_blocks = value;
1156 case OPT_freorder_functions:
1157 flag_reorder_functions = value;
1160 case OPT_frerun_cse_after_loop:
1161 flag_rerun_cse_after_loop = value;
1164 case OPT_frerun_loop_opt:
1165 flag_rerun_loop_opt = value;
1168 case OPT_fsched_interblock:
1169 flag_schedule_interblock= value;
1172 case OPT_fsched_spec:
1173 flag_schedule_speculative = value;
1176 case OPT_fsched_spec_load:
1177 flag_schedule_speculative_load = value;
1180 case OPT_fsched_spec_load_dangerous:
1181 flag_schedule_speculative_load_dangerous = value;
1184 case OPT_fsched_verbose_:
1185 #ifdef INSN_SCHEDULING
1186 fix_sched_param ("verbose", arg);
1192 case OPT_fsched2_use_superblocks:
1193 flag_sched2_use_superblocks = value;
1196 case OPT_fsched2_use_traces:
1197 flag_sched2_use_traces = value;
1200 case OPT_fschedule_insns:
1201 flag_schedule_insns = value;
1204 case OPT_fschedule_insns2:
1205 flag_schedule_insns_after_reload = value;
1208 case OPT_fshared_data:
1209 flag_shared_data = value;
1212 case OPT_fsignaling_nans:
1213 flag_signaling_nans = value;
1216 case OPT_fsingle_precision_constant:
1217 flag_single_precision_constant = value;
1225 flag_ssa_ccp = value;
1229 flag_ssa_dce = value;
1232 case OPT_fstack_check:
1233 flag_stack_check = value;
1236 case OPT_fstack_limit:
1237 /* The real switch is -fno-stack-limit. */
1240 stack_limit_rtx = NULL_RTX;
1243 case OPT_fstack_limit_register_:
1245 int reg = decode_reg_name (arg);
1247 error ("unrecognized register name \"%s\"", arg);
1249 stack_limit_rtx = gen_rtx_REG (Pmode, reg);
1253 case OPT_fstack_limit_symbol_:
1254 stack_limit_rtx = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (arg));
1257 case OPT_fstrength_reduce:
1258 flag_strength_reduce = value;
1261 case OPT_fstrict_aliasing:
1262 flag_strict_aliasing = value;
1265 case OPT_fsyntax_only:
1266 flag_syntax_only = value;
1269 case OPT_ftest_coverage:
1270 flag_test_coverage = value;
1273 case OPT_fthread_jumps:
1274 flag_thread_jumps = value;
1277 case OPT_ftime_report:
1278 time_report = value;
1281 case OPT_ftls_model_:
1282 if (!strcmp (arg, "global-dynamic"))
1283 flag_tls_default = TLS_MODEL_GLOBAL_DYNAMIC;
1284 else if (!strcmp (arg, "local-dynamic"))
1285 flag_tls_default = TLS_MODEL_LOCAL_DYNAMIC;
1286 else if (!strcmp (arg, "initial-exec"))
1287 flag_tls_default = TLS_MODEL_INITIAL_EXEC;
1288 else if (!strcmp (arg, "local-exec"))
1289 flag_tls_default = TLS_MODEL_LOCAL_EXEC;
1291 warning ("unknown tls-model \"%s\"", arg);
1295 flag_tracer = value;
1298 case OPT_ftrapping_math:
1299 flag_trapping_math = value;
1306 case OPT_funit_at_a_time:
1307 flag_unit_at_a_time = value;
1310 case OPT_funroll_all_loops:
1311 flag_unroll_all_loops = value;
1314 case OPT_funroll_loops:
1315 flag_unroll_loops = value;
1318 case OPT_funsafe_math_optimizations:
1319 flag_unsafe_math_optimizations = value;
1322 case OPT_funswitch_loops:
1323 flag_unswitch_loops = value;
1326 case OPT_funwind_tables:
1327 flag_unwind_tables = value;
1330 case OPT_fverbose_asm:
1331 flag_verbose_asm = value;
1338 case OPT_fwritable_strings:
1339 flag_writable_strings = value;
1342 case OPT_fzero_initialized_in_bss:
1343 flag_zero_initialized_in_bss = value;
1347 decode_g_option (arg);
1351 set_target_switch (arg);
1355 asm_file_name = arg;
1366 case OPT_pedantic_errors:
1367 flag_pedantic_errors = pedantic = 1;
1379 inhibit_warnings = true;
1386 /* Handle --param NAME=VALUE. */
1388 handle_param (const char *carg)
1393 arg = xstrdup (carg);
1394 equal = strchr (arg, '=');
1396 error ("%s: --param arguments should be of the form NAME=VALUE", arg);
1399 value = integral_argument (equal + 1);
1401 error ("invalid --param value `%s'", equal + 1);
1405 set_param_value (arg, value);
1412 /* Handle -W and -Wextra. */
1414 set_Wextra (int setting)
1416 extra_warnings = setting;
1417 warn_unused_value = setting;
1418 warn_unused_parameter = (setting && maybe_warn_unused_parameter);
1420 /* We save the value of warn_uninitialized, since if they put
1421 -Wuninitialized on the command line, we need to generate a
1422 warning about not using it without also specifying -O. */
1424 warn_uninitialized = 0;
1425 else if (warn_uninitialized != 1)
1426 warn_uninitialized = 2;
1429 /* Initialize unused warning flags. */
1431 set_Wunused (int setting)
1433 warn_unused_function = setting;
1434 warn_unused_label = setting;
1435 /* Unused function parameter warnings are reported when either
1436 ``-Wextra -Wunused'' or ``-Wunused-parameter'' is specified.
1437 Thus, if -Wextra has already been seen, set warn_unused_parameter;
1438 otherwise set maybe_warn_extra_parameter, which will be picked up
1440 maybe_warn_unused_parameter = setting;
1441 warn_unused_parameter = (setting && extra_warnings);
1442 warn_unused_variable = setting;
1443 warn_unused_value = setting;
1446 /* The following routines are useful in setting all the flags that
1447 -ffast-math and -fno-fast-math imply. */
1449 set_fast_math_flags (int set)
1451 flag_trapping_math = !set;
1452 flag_unsafe_math_optimizations = set;
1453 flag_finite_math_only = set;
1454 flag_errno_math = !set;
1456 flag_signaling_nans = 0;
1459 /* Return true iff flags are set as if -ffast-math. */
1461 fast_math_flags_set_p (void)
1463 return (!flag_trapping_math
1464 && flag_unsafe_math_optimizations
1465 && flag_finite_math_only
1466 && !flag_errno_math);