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
25 #include "coretypes.h"
31 #include "langhooks.h"
37 #include "diagnostic.h"
38 #include "tm_p.h" /* For OPTIMIZATION_OPTIONS. */
39 #include "insn-attr.h" /* For INSN_SCHEDULING. */
41 /* Value of the -G xx switch, and whether it was passed or not. */
42 unsigned HOST_WIDE_INT g_switch_value;
45 /* True if we should exit after parsing options. */
46 bool exit_after_options;
51 /* Print various extra warnings. -W/-Wextra. */
54 /* Don't print warning messages. -w. */
55 bool inhibit_warnings;
57 /* Treat warnings as errors. -Werror. */
58 bool warnings_are_errors;
60 /* Warn if a function returns an aggregate, since there are often
61 incompatible calling conventions for doing this. */
62 bool warn_aggregate_return;
64 /* Nonzero means warn about pointer casts that increase the required
65 alignment of the target type (and might therefore lead to a crash
66 due to a misaligned access). */
69 /* Nonzero means warn about uses of __attribute__((deprecated))
71 bool warn_deprecated_decl = true;
73 /* Warn when an optimization pass is disabled. */
74 bool warn_disabled_optimization;
76 /* Nonzero means warn if inline function is too large. */
79 /* True to warn about any objects definitions whose size is larger
80 than N bytes. Also want about function definitions whose returned
81 values are larger than N bytes, where N is `larger_than_size'. */
82 bool warn_larger_than;
83 HOST_WIDE_INT larger_than_size;
85 /* Warn about functions which might be candidates for attribute noreturn. */
86 bool warn_missing_noreturn;
88 /* True to warn about code which is never reached. */
91 /* Warn if packed attribute on struct is unnecessary and inefficient. */
94 /* Warn when gcc pads a structure to an alignment boundary. */
97 /* True means warn about all declarations which shadow others. */
100 /* Nonzero means warn about constructs which might not be
101 strict-aliasing safe. */
102 bool warn_strict_aliasing;
104 /* True to warn if a switch on an enum, that does not have a default
105 case, fails to have a case for every enum value. */
108 /* Warn if a switch does not have a default case. */
109 bool warn_switch_default;
111 /* Warn if a switch on an enum fails to have a case for every enum
112 value (regardless of the presence or otherwise of a default case). */
113 bool warn_switch_enum;
115 /* Don't suppress warnings from system headers. -Wsystem-headers. */
116 bool warn_system_headers;
118 /* True to warn about variables used before they are initialized. */
119 int warn_uninitialized;
121 /* True to warn about unused variables, functions et.al. */
122 bool warn_unused_function;
123 bool warn_unused_label;
124 bool warn_unused_parameter;
125 bool warn_unused_variable;
126 bool warn_unused_value;
128 /* Hack for cooperation between set_Wunused and set_Wextra. */
129 static bool maybe_warn_unused_parameter;
131 static size_t find_opt (const char *, int);
132 static int common_handle_option (size_t scode, const char *arg, int value);
133 static void handle_param (const char *);
134 static void set_Wextra (int);
135 static unsigned int handle_option (const char **argv, unsigned int lang_mask);
136 static char *write_langs (unsigned int lang_mask);
137 static void complain_wrong_lang (const char *, const struct cl_option *,
138 unsigned int lang_mask);
139 static void handle_options (unsigned int, const char **, unsigned int);
140 static void wrap_help (const char *help, const char *item, int item_width);
141 static void print_help (void);
142 static void print_filtered_help (unsigned int flag);
144 /* Perform a binary search to find which option the command-line INPUT
145 matches. Returns its index in the option array, and N_OPTS
146 (cl_options_count) on failure.
148 This routine is quite subtle. A normal binary search is not good
149 enough because some options can be suffixed with an argument, and
150 multiple sub-matches can occur, e.g. input of "-pedantic" matching
151 the initial substring of "-pedantic-errors".
153 A more complicated example is -gstabs. It should match "-g" with
154 an argument of "stabs". Suppose, however, that the number and list
155 of switches are such that the binary search tests "-gen-decls"
156 before having tested "-g". This doesn't match, and as "-gen-decls"
157 is less than "-gstabs", it will become the lower bound of the
158 binary search range, and "-g" will never be seen. To resolve this
159 issue, opts.sh makes "-gen-decls" point, via the back_chain member,
160 to "-g" so that failed searches that end between "-gen-decls" and
161 the lexicographically subsequent switch know to go back and see if
162 "-g" causes a match (which it does in this example).
164 This search is done in such a way that the longest match for the
165 front end in question wins. If there is no match for the current
166 front end, the longest match for a different front end is returned
167 (or N_OPTS if none) and the caller emits an error message. */
169 find_opt (const char *input, int lang_mask)
171 size_t mn, mx, md, opt_len;
172 size_t match_wrong_lang;
176 mx = cl_options_count;
178 /* Find mn such this lexicographical inequality holds:
179 cl_options[mn] <= input < cl_options[mn + 1]. */
183 opt_len = cl_options[md].opt_len;
184 comp = strncmp (input, cl_options[md].opt_text + 1, opt_len);
192 /* This is the switch that is the best match but for a different
193 front end, or cl_options_count if there is no match at all. */
194 match_wrong_lang = cl_options_count;
196 /* Backtrace the chain of possible matches, returning the longest
197 one, if any, that fits best. With current GCC switches, this
198 loop executes at most twice. */
201 const struct cl_option *opt = &cl_options[mn];
203 /* Is this switch a prefix of the input? */
204 if (!strncmp (input, opt->opt_text + 1, opt->opt_len))
206 /* If language is OK, and the match is exact or the switch
207 takes a joined argument, return it. */
208 if ((opt->flags & lang_mask)
209 && (input[opt->opt_len] == '\0' || (opt->flags & CL_JOINED)))
212 /* If we haven't remembered a prior match, remember this
213 one. Any prior match is necessarily better. */
214 if (match_wrong_lang == cl_options_count)
215 match_wrong_lang = mn;
218 /* Try the next possibility. This is cl_options_count if there
220 mn = opt->back_chain;
222 while (mn != cl_options_count);
224 /* Return the best wrong match, or cl_options_count if none. */
225 return match_wrong_lang;
228 /* If ARG is a non-negative integer made up solely of digits, return its
229 value, otherwise return -1. */
231 integral_argument (const char *arg)
235 while (*p && ISDIGIT (*p))
244 /* Return a malloced slash-separated list of languages in MASK. */
246 write_langs (unsigned int mask)
248 unsigned int n = 0, len = 0;
249 const char *lang_name;
252 for (n = 0; (lang_name = lang_names[n]) != 0; n++)
253 if (mask & (1U << n))
254 len += strlen (lang_name) + 1;
256 result = xmalloc (len);
258 for (n = 0; (lang_name = lang_names[n]) != 0; n++)
259 if (mask & (1U << n))
263 strcpy (result + len, lang_name);
264 len += strlen (lang_name);
272 /* Complain that switch OPT_INDEX does not apply to this front end. */
274 complain_wrong_lang (const char *text, const struct cl_option *option,
275 unsigned int lang_mask)
277 char *ok_langs, *bad_lang;
279 ok_langs = write_langs (option->flags);
280 bad_lang = write_langs (lang_mask);
282 /* Eventually this should become a hard error IMO. */
283 warning ("command line option \"%s\" is valid for %s but not for %s",
284 text, ok_langs, bad_lang);
290 /* Handle the switch beginning at ARGV for the language indicated by
291 LANG_MASK. Returns the number of switches consumed. */
293 handle_option (const char **argv, unsigned int lang_mask)
296 const char *opt, *arg = 0;
299 unsigned int result = 0;
300 const struct cl_option *option;
304 /* Drop the "no-" from negative switches. */
305 if ((opt[1] == 'W' || opt[1] == 'f')
306 && opt[2] == 'n' && opt[3] == 'o' && opt[4] == '-')
308 size_t len = strlen (opt) - 3;
310 dup = xmalloc (len + 1);
313 memcpy (dup + 2, opt + 5, len - 2 + 1);
318 opt_index = find_opt (opt + 1, lang_mask | CL_COMMON);
319 if (opt_index == cl_options_count)
322 option = &cl_options[opt_index];
324 /* Reject negative form of switches that don't take negatives as
326 if (!value && (option->flags & CL_REJECT_NEGATIVE))
329 /* We've recognized this switch. */
332 /* Sort out any argument the switch takes. */
333 if (option->flags & CL_JOINED)
335 /* Have arg point to the original switch. This is because
336 some code, such as disable_builtin_function, expects its
337 argument to be persistent until the program exits. */
338 arg = argv[0] + cl_options[opt_index].opt_len + 1;
340 arg += strlen ("no-");
342 if (*arg == '\0' && !(option->flags & CL_MISSING_OK))
344 if (option->flags & CL_SEPARATE)
350 /* Missing argument. */
354 else if (option->flags & CL_SEPARATE)
360 /* Now we've swallowed any potential argument, complain if this
361 is a switch for a different front end. */
362 if (!(option->flags & (lang_mask | CL_COMMON)))
364 complain_wrong_lang (argv[0], option, lang_mask);
368 if (arg == NULL && (option->flags & (CL_JOINED | CL_SEPARATE)))
370 if (!(*lang_hooks.missing_argument) (opt, opt_index))
371 error ("missing argument to \"%s\"", opt);
375 /* If the switch takes an integer, convert it. */
376 if (arg && (option->flags & CL_UINTEGER))
378 value = integral_argument (arg);
381 error ("argument to \"%s\" should be a non-negative integer",
387 if (option->flags & lang_mask)
388 if ((*lang_hooks.handle_option) (opt_index, arg, value) == 0)
391 if (result && (option->flags & CL_COMMON))
392 if (common_handle_option (opt_index, arg, value) == 0)
401 /* Decode and handle the vector of command line options. LANG_MASK
402 contains has a single bit set representing the current
405 handle_options (unsigned int argc, const char **argv, unsigned int lang_mask)
409 for (i = 1; i < argc; i += n)
411 const char *opt = argv[i];
413 /* Interpret "-" or a non-switch as a file name. */
414 if (opt[0] != '-' || opt[1] == '\0')
416 main_input_filename = opt;
417 (*lang_hooks.handle_filename) (opt);
422 n = handle_option (argv + i, lang_mask);
427 error ("unrecognized command line option \"%s\"", opt);
432 /* Parse command line options and set default flag values. Do minimal
433 options processing. */
435 decode_options (unsigned int argc, const char **argv)
437 unsigned int i, lang_mask;
439 /* Perform language-specific options initialization. */
440 lang_mask = (*lang_hooks.init_options) (argc, argv);
442 /* Scan to see what optimization level has been specified. That will
443 determine the default value of many flags. */
444 for (i = 1; i < argc; i++)
446 if (!strcmp (argv[i], "-O"))
451 else if (argv[i][0] == '-' && argv[i][1] == 'O')
453 /* Handle -Os, -O2, -O3, -O69, ... */
454 const char *p = &argv[i][2];
456 if ((p[0] == 's') && (p[1] == 0))
460 /* Optimizing for size forces optimize to be 2. */
465 const int optimize_val = read_integral_parameter (p, p - 2, -1);
466 if (optimize_val != -1)
468 optimize = optimize_val;
477 flag_merge_constants = 0;
483 flag_thread_jumps = 1;
485 flag_delayed_branch = 1;
487 #ifdef CAN_DEBUG_WITHOUT_FP
488 flag_omit_frame_pointer = 1;
490 flag_guess_branch_prob = 1;
491 flag_cprop_registers = 1;
492 flag_loop_optimize = 1;
493 flag_crossjumping = 1;
494 flag_if_conversion = 1;
495 flag_if_conversion2 = 1;
500 flag_optimize_sibling_calls = 1;
501 flag_cse_follow_jumps = 1;
502 flag_cse_skip_blocks = 1;
504 flag_expensive_optimizations = 1;
505 flag_strength_reduce = 1;
506 flag_rerun_cse_after_loop = 1;
507 flag_rerun_loop_opt = 1;
508 flag_caller_saves = 1;
511 #ifdef INSN_SCHEDULING
512 flag_schedule_insns = 1;
513 flag_schedule_insns_after_reload = 1;
516 flag_strict_aliasing = 1;
517 flag_delete_null_pointer_checks = 1;
518 flag_reorder_blocks = 1;
519 flag_reorder_functions = 1;
524 flag_inline_functions = 1;
525 flag_rename_registers = 1;
526 flag_unswitch_loops = 1;
527 flag_unit_at_a_time = 1;
530 if (optimize < 2 || optimize_size)
537 /* Don't reorder blocks when optimizing for size because extra
538 jump insns may be created; also barrier may create extra padding.
540 More correctly we should have a block reordering mode that tried
541 to minimize the combined size of all the jumps. This would more
542 or less automatically remove extra jumps, but would also try to
543 use more short jumps instead of long jumps. */
544 flag_reorder_blocks = 0;
547 /* Initialize whether `char' is signed. */
548 flag_signed_char = DEFAULT_SIGNED_CHAR;
549 #ifdef DEFAULT_SHORT_ENUMS
550 /* Initialize how much space enums occupy, by default. */
551 flag_short_enums = DEFAULT_SHORT_ENUMS;
554 /* Initialize target_flags before OPTIMIZATION_OPTIONS so the latter can
557 set_target_switch ("");
559 /* Unwind tables are always present in an ABI-conformant IA-64
560 object file, so the default should be ON. */
561 #ifdef IA64_UNWIND_INFO
562 flag_unwind_tables = IA64_UNWIND_INFO;
565 #ifdef OPTIMIZATION_OPTIONS
566 /* Allow default optimizations to be specified on a per-machine basis. */
567 OPTIMIZATION_OPTIONS (optimize, optimize_size);
570 handle_options (argc, argv, lang_mask);
574 if (flag_pic && !flag_pie)
577 if (flag_no_inline == 2)
580 flag_really_no_inline = flag_no_inline;
582 /* Set flag_no_inline before the post_options () hook. The C front
583 ends use it to determine tree inlining defaults. FIXME: such
584 code should be lang-independent when all front ends use tree
585 inlining, in which case it, and this condition, should be moved
586 to the top of process_options() instead. */
589 /* Inlining does not work if not optimizing,
590 so force it not to be done. */
594 /* The c_decode_option function and decode_option hook set
595 this to `2' if -Wall is used, so we can avoid giving out
596 lots of errors for people who don't realize what -Wall does. */
597 if (warn_uninitialized == 1)
598 warning ("-Wuninitialized is not supported without -O");
601 if (flag_really_no_inline == 2)
602 flag_really_no_inline = flag_no_inline;
605 /* Handle target- and language-independent options. Return zero to
606 generate an "unknown option" message. */
608 common_handle_option (size_t scode, const char *arg,
609 int value ATTRIBUTE_UNUSED)
611 enum opt_code code = (enum opt_code) scode;
620 exit_after_options = true;
627 case OPT__target_help:
628 display_target_options ();
629 exit_after_options = true;
633 print_version (stderr, "");
634 exit_after_options = true;
638 g_switch_value = value;
644 /* Currently handled in a prescan. */
648 /* For backward compatibility, -W is the same as -Wextra. */
652 case OPT_Waggregate_return:
653 warn_aggregate_return = value;
656 case OPT_Wcast_align:
657 warn_cast_align = value;
660 case OPT_Wdeprecated_declarations:
661 warn_deprecated_decl = value;
664 case OPT_Wdisabled_optimization:
665 warn_disabled_optimization = value;
669 warnings_are_errors = value;
680 case OPT_Wlarger_than_:
681 larger_than_size = value;
682 warn_larger_than = value != -1;
685 case OPT_Wmissing_noreturn:
686 warn_missing_noreturn = value;
701 case OPT_Wstrict_aliasing:
702 warn_strict_aliasing = value;
709 case OPT_Wswitch_default:
710 warn_switch_default = value;
713 case OPT_Wswitch_enum:
714 warn_switch_enum = value;
717 case OPT_Wsystem_headers:
718 warn_system_headers = value;
721 case OPT_Wuninitialized:
722 warn_uninitialized = value;
725 case OPT_Wunreachable_code:
726 warn_notreached = value;
733 case OPT_Wunused_function:
734 warn_unused_function = value;
737 case OPT_Wunused_label:
738 warn_unused_label = value;
741 case OPT_Wunused_parameter:
742 warn_unused_parameter = value;
745 case OPT_Wunused_value:
746 warn_unused_value = value;
749 case OPT_Wunused_variable:
750 warn_unused_variable = value;
755 aux_info_file_name = arg;
756 flag_gen_aux_info = 1;
763 case OPT_auxbase_strip:
765 char *tmp = xstrdup (arg);
766 strip_off_ending (tmp, strlen (tmp));
773 decode_d_option (arg);
777 dump_base_name = arg;
781 flag_pic = value + value;
785 flag_pie = value + value;
788 case OPT_falign_functions:
789 align_functions = !value;
792 case OPT_falign_functions_:
793 align_functions = value;
796 case OPT_falign_jumps:
797 align_jumps = !value;
800 case OPT_falign_jumps_:
804 case OPT_falign_labels:
805 align_labels = !value;
808 case OPT_falign_labels_:
809 align_labels = value;
812 case OPT_falign_loops:
813 align_loops = !value;
816 case OPT_falign_loops_:
820 case OPT_fargument_alias:
821 flag_argument_noalias = !value;
824 case OPT_fargument_noalias:
825 flag_argument_noalias = value;
828 case OPT_fargument_noalias_global:
829 flag_argument_noalias = value + value;
832 case OPT_fasynchronous_unwind_tables:
833 flag_asynchronous_unwind_tables = value;
836 case OPT_fbounds_check:
837 flag_bounds_check = value;
840 case OPT_fbranch_count_reg:
841 flag_branch_on_count_reg = value;
844 case OPT_fbranch_probabilities:
845 flag_branch_probabilities = value;
848 case OPT_fbranch_target_load_optimize:
849 flag_branch_target_load_optimize = value;
852 case OPT_fbranch_target_load_optimize2:
853 flag_branch_target_load_optimize2 = value;
856 case OPT_fcall_used_:
857 fix_register (arg, 0, 1);
860 case OPT_fcall_saved_:
861 fix_register (arg, 0, 0);
864 case OPT_fcaller_saves:
865 flag_caller_saves = value;
869 flag_no_common = !value;
872 case OPT_fcprop_registers:
873 flag_cprop_registers = value;
876 case OPT_fcrossjumping:
877 flag_crossjumping = value;
880 case OPT_fcse_follow_jumps:
881 flag_cse_follow_jumps = value;
884 case OPT_fcse_skip_blocks:
885 flag_cse_skip_blocks = value;
888 case OPT_fdata_sections:
889 flag_data_sections = value;
893 flag_defer_pop = value;
896 case OPT_fdelayed_branch:
897 flag_delayed_branch = value;
900 case OPT_fdelete_null_pointer_checks:
901 flag_delete_null_pointer_checks = value;
904 case OPT_fdiagnostics_show_location_:
905 if (!strcmp (arg, "once"))
906 diagnostic_prefixing_rule (global_dc) = DIAGNOSTICS_SHOW_PREFIX_ONCE;
907 else if (!strcmp (arg, "every-line"))
908 diagnostic_prefixing_rule (global_dc)
909 = DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE;
914 case OPT_fdump_unnumbered:
915 flag_dump_unnumbered = value;
918 case OPT_feliminate_dwarf2_dups:
919 flag_eliminate_dwarf2_dups = value;
922 case OPT_feliminate_unused_debug_types:
923 flag_eliminate_unused_debug_types = value;
926 case OPT_feliminate_unused_debug_symbols:
927 flag_debug_only_used_symbols = value;
930 case OPT_fexceptions:
931 flag_exceptions = value;
934 case OPT_fexpensive_optimizations:
935 flag_expensive_optimizations = value;
939 set_fast_math_flags (value);
942 case OPT_ffinite_math_only:
943 flag_finite_math_only = value;
947 fix_register (arg, 1, 1);
950 case OPT_ffunction_cse:
951 flag_no_function_cse = !value;
954 case OPT_ffloat_store:
955 flag_float_store = value;
958 case OPT_fforce_addr:
959 flag_force_addr = value;
963 flag_force_mem = value;
966 case OPT_ffunction_sections:
967 flag_function_sections = value;
975 flag_gcse_lm = value;
979 flag_gcse_sm = value;
982 case OPT_fgnu_linker:
983 flag_gnu_linker = value;
986 case OPT_fguess_branch_probability:
987 flag_guess_branch_prob = value;
991 flag_no_ident = !value;
994 case OPT_fif_conversion:
995 flag_if_conversion = value;
998 case OPT_fif_conversion2:
999 flag_if_conversion2 = value;
1002 case OPT_finhibit_size_directive:
1003 flag_inhibit_size_directive = value;
1007 flag_no_inline = !value;
1010 case OPT_finline_functions:
1011 flag_inline_functions = value;
1014 case OPT_finline_limit_:
1015 case OPT_finline_limit_eq:
1016 set_param_value ("max-inline-insns", value);
1017 set_param_value ("max-inline-insns-single", value / 2);
1018 set_param_value ("max-inline-insns-auto", value / 2);
1019 set_param_value ("max-inline-insns-rtl", value);
1020 if (value / 4 < MIN_INLINE_INSNS)
1023 set_param_value ("min-inline-insns", value / 4);
1025 set_param_value ("min-inline-insns", 10);
1029 case OPT_finstrument_functions:
1030 flag_instrument_function_entry_exit = value;
1033 case OPT_fkeep_inline_functions:
1034 flag_keep_inline_functions =value;
1037 case OPT_fkeep_static_consts:
1038 flag_keep_static_consts = value;
1041 case OPT_fleading_underscore:
1042 flag_leading_underscore = value;
1045 case OPT_floop_optimize:
1046 flag_loop_optimize = value;
1049 case OPT_fmath_errno:
1050 flag_errno_math = value;
1053 case OPT_fmem_report:
1057 case OPT_fmerge_all_constants:
1058 flag_merge_constants = value + value;
1061 case OPT_fmerge_constants:
1062 flag_merge_constants = value;
1065 case OPT_fmessage_length_:
1066 output_set_maximum_length (&global_dc->buffer, value);
1069 case OPT_fmove_all_movables:
1070 flag_move_all_movables = value;
1074 flag_new_regalloc = value;
1077 case OPT_fnon_call_exceptions:
1078 flag_non_call_exceptions = value;
1081 case OPT_fold_unroll_all_loops:
1082 flag_old_unroll_all_loops = value;
1085 case OPT_fold_unroll_loops:
1086 flag_old_unroll_loops = value;
1089 case OPT_fomit_frame_pointer:
1090 flag_omit_frame_pointer = value;
1093 case OPT_foptimize_register_move:
1094 flag_regmove = value;
1097 case OPT_foptimize_sibling_calls:
1098 flag_optimize_sibling_calls = value;
1101 case OPT_fpack_struct:
1102 flag_pack_struct = value;
1105 case OPT_fpeel_loops:
1106 flag_peel_loops = value;
1109 case OPT_fpcc_struct_return:
1110 flag_pcc_struct_return = value;
1114 flag_no_peephole = !value;
1117 case OPT_fpeephole2:
1118 flag_peephole2 = value;
1129 case OPT_fprefetch_loop_arrays:
1130 flag_prefetch_loop_arrays = value;
1134 profile_flag = value;
1137 case OPT_fprofile_arcs:
1138 profile_arc_flag = value;
1141 case OPT_frandom_seed:
1142 /* The real switch is -fno-random-seed. */
1145 flag_random_seed = NULL;
1148 case OPT_frandom_seed_:
1149 flag_random_seed = arg;
1152 case OPT_freduce_all_givs:
1153 flag_reduce_all_givs = value;
1156 case OPT_freg_struct_return:
1157 flag_pcc_struct_return = !value;
1161 flag_regmove = value;
1164 case OPT_frename_registers:
1165 flag_rename_registers = value;
1168 case OPT_freorder_blocks:
1169 flag_reorder_blocks = value;
1172 case OPT_freorder_functions:
1173 flag_reorder_functions = value;
1176 case OPT_frerun_cse_after_loop:
1177 flag_rerun_cse_after_loop = value;
1180 case OPT_frerun_loop_opt:
1181 flag_rerun_loop_opt = value;
1184 case OPT_fsched_interblock:
1185 flag_schedule_interblock= value;
1188 case OPT_fsched_spec:
1189 flag_schedule_speculative = value;
1192 case OPT_fsched_spec_load:
1193 flag_schedule_speculative_load = value;
1196 case OPT_fsched_spec_load_dangerous:
1197 flag_schedule_speculative_load_dangerous = value;
1200 case OPT_fsched_verbose_:
1201 #ifdef INSN_SCHEDULING
1202 fix_sched_param ("verbose", arg);
1208 case OPT_fsched2_use_superblocks:
1209 flag_sched2_use_superblocks = value;
1212 case OPT_fsched2_use_traces:
1213 flag_sched2_use_traces = value;
1216 case OPT_fschedule_insns:
1217 flag_schedule_insns = value;
1220 case OPT_fschedule_insns2:
1221 flag_schedule_insns_after_reload = value;
1224 case OPT_fshared_data:
1225 flag_shared_data = value;
1228 case OPT_fsignaling_nans:
1229 flag_signaling_nans = value;
1232 case OPT_fsingle_precision_constant:
1233 flag_single_precision_constant = value;
1241 flag_ssa_ccp = value;
1245 flag_ssa_dce = value;
1248 case OPT_fstack_check:
1249 flag_stack_check = value;
1252 case OPT_fstack_limit:
1253 /* The real switch is -fno-stack-limit. */
1256 stack_limit_rtx = NULL_RTX;
1259 case OPT_fstack_limit_register_:
1261 int reg = decode_reg_name (arg);
1263 error ("unrecognized register name \"%s\"", arg);
1265 stack_limit_rtx = gen_rtx_REG (Pmode, reg);
1269 case OPT_fstack_limit_symbol_:
1270 stack_limit_rtx = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (arg));
1273 case OPT_fstrength_reduce:
1274 flag_strength_reduce = value;
1277 case OPT_fstrict_aliasing:
1278 flag_strict_aliasing = value;
1281 case OPT_fsyntax_only:
1282 flag_syntax_only = value;
1285 case OPT_ftest_coverage:
1286 flag_test_coverage = value;
1289 case OPT_fthread_jumps:
1290 flag_thread_jumps = value;
1293 case OPT_ftime_report:
1294 time_report = value;
1297 case OPT_ftls_model_:
1298 if (!strcmp (arg, "global-dynamic"))
1299 flag_tls_default = TLS_MODEL_GLOBAL_DYNAMIC;
1300 else if (!strcmp (arg, "local-dynamic"))
1301 flag_tls_default = TLS_MODEL_LOCAL_DYNAMIC;
1302 else if (!strcmp (arg, "initial-exec"))
1303 flag_tls_default = TLS_MODEL_INITIAL_EXEC;
1304 else if (!strcmp (arg, "local-exec"))
1305 flag_tls_default = TLS_MODEL_LOCAL_EXEC;
1307 warning ("unknown tls-model \"%s\"", arg);
1311 flag_tracer = value;
1314 case OPT_ftrapping_math:
1315 flag_trapping_math = value;
1322 case OPT_funit_at_a_time:
1323 flag_unit_at_a_time = value;
1326 case OPT_funroll_all_loops:
1327 flag_unroll_all_loops = value;
1330 case OPT_funroll_loops:
1331 flag_unroll_loops = value;
1334 case OPT_funsafe_math_optimizations:
1335 flag_unsafe_math_optimizations = value;
1338 case OPT_funswitch_loops:
1339 flag_unswitch_loops = value;
1342 case OPT_funwind_tables:
1343 flag_unwind_tables = value;
1346 case OPT_fverbose_asm:
1347 flag_verbose_asm = value;
1354 case OPT_fwritable_strings:
1355 flag_writable_strings = value;
1358 case OPT_fzero_initialized_in_bss:
1359 flag_zero_initialized_in_bss = value;
1363 decode_g_option (arg);
1367 set_target_switch (arg);
1371 asm_file_name = arg;
1382 case OPT_pedantic_errors:
1383 flag_pedantic_errors = pedantic = 1;
1395 inhibit_warnings = true;
1402 /* Handle --param NAME=VALUE. */
1404 handle_param (const char *carg)
1409 arg = xstrdup (carg);
1410 equal = strchr (arg, '=');
1412 error ("%s: --param arguments should be of the form NAME=VALUE", arg);
1415 value = integral_argument (equal + 1);
1417 error ("invalid --param value `%s'", equal + 1);
1421 set_param_value (arg, value);
1428 /* Handle -W and -Wextra. */
1430 set_Wextra (int setting)
1432 extra_warnings = setting;
1433 warn_unused_value = setting;
1434 warn_unused_parameter = (setting && maybe_warn_unused_parameter);
1436 /* We save the value of warn_uninitialized, since if they put
1437 -Wuninitialized on the command line, we need to generate a
1438 warning about not using it without also specifying -O. */
1440 warn_uninitialized = 0;
1441 else if (warn_uninitialized != 1)
1442 warn_uninitialized = 2;
1445 /* Initialize unused warning flags. */
1447 set_Wunused (int setting)
1449 warn_unused_function = setting;
1450 warn_unused_label = setting;
1451 /* Unused function parameter warnings are reported when either
1452 ``-Wextra -Wunused'' or ``-Wunused-parameter'' is specified.
1453 Thus, if -Wextra has already been seen, set warn_unused_parameter;
1454 otherwise set maybe_warn_extra_parameter, which will be picked up
1456 maybe_warn_unused_parameter = setting;
1457 warn_unused_parameter = (setting && extra_warnings);
1458 warn_unused_variable = setting;
1459 warn_unused_value = setting;
1462 /* The following routines are useful in setting all the flags that
1463 -ffast-math and -fno-fast-math imply. */
1465 set_fast_math_flags (int set)
1467 flag_trapping_math = !set;
1468 flag_unsafe_math_optimizations = set;
1469 flag_finite_math_only = set;
1470 flag_errno_math = !set;
1472 flag_signaling_nans = 0;
1475 /* Return true iff flags are set as if -ffast-math. */
1477 fast_math_flags_set_p (void)
1479 return (!flag_trapping_math
1480 && flag_unsafe_math_optimizations
1481 && flag_finite_math_only
1482 && !flag_errno_math);
1485 /* Output --help text. */
1491 puts (_("The following options are language-independent:\n"));
1493 print_filtered_help (CL_COMMON);
1495 for (i = 0; lang_names[i]; i++)
1497 printf (_("\nThe %s front end recognizes the following options:\n"),
1499 print_filtered_help (1U << i);
1506 /* Print help for a specific front-end, etc. */
1508 print_filtered_help (unsigned int flag)
1511 unsigned int filter;
1513 /* Don't print COMMON options twice. */
1515 if (flag != CL_COMMON)
1516 filter |= CL_COMMON;
1518 for (i = 0; i < cl_options_count; i++)
1521 const char *opt, *tab;
1523 if ((cl_options[i].flags & filter) != flag)
1526 /* Skip help for internal switches. */
1527 if (cl_options[i].flags & CL_UNDOCUMENTED)
1530 /* During transition, ignore switches with no help. */
1531 help = cl_options[i].help;
1535 /* Get the translation. */
1538 tab = strchr (help, '\t');
1547 opt = cl_options[i].opt_text;
1551 wrap_help (help, opt, len);
1555 /* Output ITEM, of length ITEM_WIDTH, in the left column, followed by
1556 word-wrapped HELP in a second column. */
1558 wrap_help (const char *help, const char *item, int item_width)
1560 const int columns = 80, col_width = 27;
1561 unsigned int remaining, room, len;
1563 remaining = strlen (help);
1567 room = columns - 3 - MAX (col_width, item_width);
1574 for (i = 0; help[i]; i++)
1576 if (i >= room && len != remaining)
1580 else if (help[i] == '-')
1585 printf( " %-*.*s %.*s\n", col_width, item_width, item, len, help);
1587 while (help[len] == ' ')