1 /* Parse and display command line options.
2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
4 Free Software Foundation, Inc.
5 Contributed by Andy Vaught
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 3, or (at your option) any later
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
25 #include "coretypes.h"
30 #include "toplev.h" /* For save_decoded_options. */
33 #include "tree-inline.h"
37 #include "diagnostic-core.h" /* For sorry. */
40 gfc_option_t gfc_option;
43 /* Set flags that control warnings and errors for different
44 Fortran standards to their default values. Keep in sync with
45 libgfortran/runtime/compile_options.c (init_compile_options). */
48 set_default_std_flags (void)
50 gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F95_DEL
51 | GFC_STD_F2003 | GFC_STD_F2008 | GFC_STD_F95 | GFC_STD_F77
52 | GFC_STD_F2008_OBS | GFC_STD_GNU | GFC_STD_LEGACY;
53 gfc_option.warn_std = GFC_STD_F95_DEL | GFC_STD_LEGACY;
57 /* Return language mask for Fortran options. */
60 gfc_option_lang_mask (void)
65 /* Initialize options structure OPTS. */
68 gfc_init_options_struct (struct gcc_options *opts)
70 opts->x_flag_errno_math = 0;
71 opts->x_flag_associative_math = -1;
74 /* Get ready for options handling. Keep in sync with
75 libgfortran/runtime/compile_options.c (init_compile_options). */
78 gfc_init_options (unsigned int decoded_options_count,
79 struct cl_decoded_option *decoded_options)
81 gfc_source_file = NULL;
82 gfc_option.module_dir = NULL;
83 gfc_option.source_form = FORM_UNKNOWN;
84 gfc_option.fixed_line_length = 72;
85 gfc_option.free_line_length = 132;
86 gfc_option.max_continue_fixed = 255;
87 gfc_option.max_continue_free = 255;
88 gfc_option.max_identifier_length = GFC_MAX_SYMBOL_LEN;
89 gfc_option.max_subrecord_length = 0;
90 gfc_option.flag_max_array_constructor = 65535;
91 gfc_option.convert = GFC_CONVERT_NATIVE;
92 gfc_option.record_marker = 0;
93 gfc_option.dump_fortran_original = 0;
94 gfc_option.dump_fortran_optimized = 0;
96 gfc_option.warn_aliasing = 0;
97 gfc_option.warn_ampersand = 0;
98 gfc_option.warn_character_truncation = 0;
99 gfc_option.warn_array_temp = 0;
100 gfc_option.gfc_warn_conversion = 0;
101 gfc_option.warn_conversion_extra = 0;
102 gfc_option.warn_implicit_interface = 0;
103 gfc_option.warn_line_truncation = 0;
104 gfc_option.warn_surprising = 0;
105 gfc_option.warn_tabs = 1;
106 gfc_option.warn_underflow = 1;
107 gfc_option.warn_intrinsic_shadow = 0;
108 gfc_option.warn_intrinsics_std = 0;
109 gfc_option.warn_align_commons = 1;
110 gfc_option.warn_unused_dummy_argument = 0;
111 gfc_option.max_errors = 25;
113 gfc_option.flag_all_intrinsics = 0;
114 gfc_option.flag_default_double = 0;
115 gfc_option.flag_default_integer = 0;
116 gfc_option.flag_default_real = 0;
117 gfc_option.flag_dollar_ok = 0;
118 gfc_option.flag_underscoring = 1;
119 gfc_option.flag_whole_file = 1;
120 gfc_option.flag_f2c = 0;
121 gfc_option.flag_second_underscore = -1;
122 gfc_option.flag_implicit_none = 0;
124 /* Default value of flag_max_stack_var_size is set in gfc_post_options. */
125 gfc_option.flag_max_stack_var_size = -2;
127 gfc_option.flag_range_check = 1;
128 gfc_option.flag_pack_derived = 0;
129 gfc_option.flag_repack_arrays = 0;
130 gfc_option.flag_preprocessed = 0;
131 gfc_option.flag_automatic = 1;
132 gfc_option.flag_backslash = 0;
133 gfc_option.flag_module_private = 0;
134 gfc_option.flag_backtrace = 0;
135 gfc_option.flag_allow_leading_underscore = 0;
136 gfc_option.flag_dump_core = 0;
137 gfc_option.flag_external_blas = 0;
138 gfc_option.blas_matmul_limit = 30;
139 gfc_option.flag_cray_pointer = 0;
140 gfc_option.flag_d_lines = -1;
141 gfc_option.gfc_flag_openmp = 0;
142 gfc_option.flag_sign_zero = 1;
143 gfc_option.flag_recursive = 0;
144 gfc_option.flag_init_integer = GFC_INIT_INTEGER_OFF;
145 gfc_option.flag_init_integer_value = 0;
146 gfc_option.flag_init_real = GFC_INIT_REAL_OFF;
147 gfc_option.flag_init_logical = GFC_INIT_LOGICAL_OFF;
148 gfc_option.flag_init_character = GFC_INIT_CHARACTER_OFF;
149 gfc_option.flag_init_character_value = (char)0;
150 gfc_option.flag_align_commons = 1;
151 gfc_option.flag_protect_parens = 1;
152 gfc_option.flag_realloc_lhs = -1;
153 gfc_option.flag_aggressive_function_elimination = 0;
156 gfc_option.rtcheck = 0;
157 gfc_option.coarray = GFC_FCOARRAY_NONE;
159 set_default_std_flags ();
161 /* Initialize cpp-related options. */
162 gfc_cpp_init_options (decoded_options_count, decoded_options);
166 /* Determine the source form from the filename extension. We assume
167 case insensitivity. */
169 static gfc_source_form
170 form_from_filename (const char *filename)
174 const char *extension;
175 gfc_source_form form;
202 }; /* sentinel value */
204 gfc_source_form f_form;
208 /* Find end of file name. Note, filename is either a NULL pointer or
209 a NUL terminated string. */
211 while (filename[i] != '\0')
214 /* Find last period. */
215 while (i >= 0 && (filename[i] != '.'))
218 /* Did we see a file extension? */
220 return FORM_UNKNOWN; /* Nope */
222 /* Get file extension and compare it to others. */
223 fileext = &(filename[i]);
226 f_form = FORM_UNKNOWN;
230 if (strcasecmp (fileext, exttype[i].extension) == 0)
232 f_form = exttype[i].form;
236 while (exttype[i].form != FORM_UNKNOWN);
242 /* Finalize commandline options. */
245 gfc_post_options (const char **pfilename)
247 const char *filename = *pfilename, *canon_source_file = NULL;
251 /* Excess precision other than "fast" requires front-end
253 if (flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD
254 && TARGET_FLT_EVAL_METHOD_NON_DEFAULT)
255 sorry ("-fexcess-precision=standard for Fortran");
256 flag_excess_precision_cmdline = EXCESS_PRECISION_FAST;
258 /* Whole program needs whole file mode. */
259 if (flag_whole_program)
260 gfc_option.flag_whole_file = 1;
262 /* Enable whole-file mode if LTO is in effect. */
264 gfc_option.flag_whole_file = 1;
266 /* Fortran allows associative math - but we cannot reassociate if
267 we want traps or signed zeros. Cf. also flag_protect_parens. */
268 if (flag_associative_math == -1)
269 flag_associative_math = (!flag_trapping_math && !flag_signed_zeros);
271 /* By default, disable (re)allocation during assignment for -std=f95,
272 and enable it for F2003/F2008/GNU/Legacy. */
273 if (gfc_option.flag_realloc_lhs == -1)
275 if (gfc_option.allow_std & GFC_STD_F2003)
276 gfc_option.flag_realloc_lhs = 1;
278 gfc_option.flag_realloc_lhs = 0;
281 /* -fbounds-check is equivalent to -fcheck=bounds */
282 if (flag_bounds_check)
283 gfc_option.rtcheck |= GFC_RTCHECK_BOUNDS;
285 if (flag_compare_debug)
286 gfc_option.dump_fortran_original = 0;
288 /* Make -fmax-errors visible to gfortran's diagnostic machinery. */
289 if (global_options_set.x_flag_max_errors)
290 gfc_option.max_errors = flag_max_errors;
292 /* Verify the input file name. */
293 if (!filename || strcmp (filename, "-") == 0)
298 if (gfc_option.flag_preprocessed)
300 /* For preprocessed files, if the first tokens are of the form # NUM.
301 handle the directives so we know the original file name. */
302 gfc_source_file = gfc_read_orig_filename (filename, &canon_source_file);
303 if (gfc_source_file == NULL)
304 gfc_source_file = filename;
306 *pfilename = gfc_source_file;
309 gfc_source_file = filename;
311 if (canon_source_file == NULL)
312 canon_source_file = gfc_source_file;
314 /* Adds the path where the source file is to the list of include files. */
316 i = strlen (canon_source_file);
317 while (i > 0 && !IS_DIR_SEPARATOR (canon_source_file[i]))
322 source_path = (char *) alloca (i + 1);
323 memcpy (source_path, canon_source_file, i);
325 gfc_add_include_path (source_path, true, true);
328 gfc_add_include_path (".", true, true);
330 if (canon_source_file != gfc_source_file)
331 gfc_free (CONST_CAST (char *, canon_source_file));
333 /* Decide which form the file will be read in as. */
335 if (gfc_option.source_form != FORM_UNKNOWN)
336 gfc_current_form = gfc_option.source_form;
339 gfc_current_form = form_from_filename (filename);
341 if (gfc_current_form == FORM_UNKNOWN)
343 gfc_current_form = FORM_FREE;
344 gfc_warning_now ("Reading file '%s' as free form",
345 (filename[0] == '\0') ? "<stdin>" : filename);
349 /* If the user specified -fd-lines-as-{code|comments} verify that we're
351 if (gfc_current_form == FORM_FREE)
353 if (gfc_option.flag_d_lines == 0)
354 gfc_warning_now ("'-fd-lines-as-comments' has no effect "
356 else if (gfc_option.flag_d_lines == 1)
357 gfc_warning_now ("'-fd-lines-as-code' has no effect in free form");
360 /* If -pedantic, warn about the use of GNU extensions. */
361 if (pedantic && (gfc_option.allow_std & GFC_STD_GNU) != 0)
362 gfc_option.warn_std |= GFC_STD_GNU;
363 /* -std=legacy -pedantic is effectively -std=gnu. */
364 if (pedantic && (gfc_option.allow_std & GFC_STD_LEGACY) != 0)
365 gfc_option.warn_std |= GFC_STD_F95_OBS | GFC_STD_F95_DEL | GFC_STD_LEGACY;
367 /* If the user didn't explicitly specify -f(no)-second-underscore we
368 use it if we're trying to be compatible with f2c, and not
370 if (gfc_option.flag_second_underscore == -1)
371 gfc_option.flag_second_underscore = gfc_option.flag_f2c;
373 if (!gfc_option.flag_automatic && gfc_option.flag_max_stack_var_size != -2
374 && gfc_option.flag_max_stack_var_size != 0)
375 gfc_warning_now ("Flag -fno-automatic overwrites -fmax-stack-var-size=%d",
376 gfc_option.flag_max_stack_var_size);
377 else if (!gfc_option.flag_automatic && gfc_option.flag_recursive)
378 gfc_warning_now ("Flag -fno-automatic overwrites -frecursive");
379 else if (!gfc_option.flag_automatic && gfc_option.gfc_flag_openmp)
380 gfc_warning_now ("Flag -fno-automatic overwrites -frecursive implied by "
382 else if (gfc_option.flag_max_stack_var_size != -2
383 && gfc_option.flag_recursive)
384 gfc_warning_now ("Flag -frecursive overwrites -fmax-stack-var-size=%d",
385 gfc_option.flag_max_stack_var_size);
386 else if (gfc_option.flag_max_stack_var_size != -2
387 && gfc_option.gfc_flag_openmp)
388 gfc_warning_now ("Flag -fmax-stack-var-size=%d overwrites -frecursive "
389 "implied by -fopenmp",
390 gfc_option.flag_max_stack_var_size);
392 /* Implement -frecursive as -fmax-stack-var-size=-1. */
393 if (gfc_option.flag_recursive)
394 gfc_option.flag_max_stack_var_size = -1;
396 /* Implied -frecursive; implemented as -fmax-stack-var-size=-1. */
397 if (gfc_option.flag_max_stack_var_size == -2 && gfc_option.gfc_flag_openmp
398 && gfc_option.flag_automatic)
400 gfc_option.flag_recursive = 1;
401 gfc_option.flag_max_stack_var_size = -1;
405 if (gfc_option.flag_max_stack_var_size == -2)
406 gfc_option.flag_max_stack_var_size = 32768;
408 /* Implement -fno-automatic as -fmax-stack-var-size=0. */
409 if (!gfc_option.flag_automatic)
410 gfc_option.flag_max_stack_var_size = 0;
414 gfc_option.warn_ampersand = 1;
415 gfc_option.warn_tabs = 0;
418 if (pedantic && gfc_option.flag_whole_file)
419 gfc_option.flag_whole_file = 2;
421 gfc_cpp_post_options ();
423 /* FIXME: return gfc_cpp_preprocess_only ();
425 The return value of this function indicates whether the
426 backend needs to be initialized. On -E, we don't need
427 the backend. However, if we return 'true' here, an
428 ICE occurs. Initializing the backend doesn't hurt much,
429 hence, for now we can live with it as is. */
434 /* Set the options for -Wall. */
437 set_Wall (int setting)
439 gfc_option.warn_aliasing = setting;
440 gfc_option.warn_ampersand = setting;
441 gfc_option.gfc_warn_conversion = setting;
442 gfc_option.warn_line_truncation = setting;
443 gfc_option.warn_surprising = setting;
444 gfc_option.warn_tabs = !setting;
445 gfc_option.warn_underflow = setting;
446 gfc_option.warn_intrinsic_shadow = setting;
447 gfc_option.warn_intrinsics_std = setting;
448 gfc_option.warn_character_truncation = setting;
449 gfc_option.warn_unused_dummy_argument = setting;
451 warn_unused = setting;
452 warn_return_type = setting;
453 warn_switch = setting;
454 warn_uninitialized = setting;
459 gfc_handle_module_path_options (const char *arg)
462 if (gfc_option.module_dir != NULL)
463 gfc_fatal_error ("gfortran: Only one -J option allowed");
465 gfc_option.module_dir = (char *) gfc_getmem (strlen (arg) + 2);
466 strcpy (gfc_option.module_dir, arg);
468 gfc_add_include_path (gfc_option.module_dir, true, false);
470 strcat (gfc_option.module_dir, "/");
475 gfc_handle_fpe_trap_option (const char *arg)
477 int result, pos = 0, n;
478 static const char * const exception[] = { "invalid", "denormal", "zero",
479 "overflow", "underflow",
481 static const int opt_exception[] = { GFC_FPE_INVALID, GFC_FPE_DENORMAL,
482 GFC_FPE_ZERO, GFC_FPE_OVERFLOW,
483 GFC_FPE_UNDERFLOW, GFC_FPE_PRECISION,
491 while (arg[pos] && arg[pos] != ',')
495 for (n = 0; exception[n] != NULL; n++)
497 if (exception[n] && strncmp (exception[n], arg, pos) == 0)
499 gfc_option.fpe |= opt_exception[n];
507 gfc_fatal_error ("Argument to -ffpe-trap is not valid: %s", arg);
513 gfc_handle_coarray_option (const char *arg)
515 if (strcmp (arg, "none") == 0)
516 gfc_option.coarray = GFC_FCOARRAY_NONE;
517 else if (strcmp (arg, "single") == 0)
518 gfc_option.coarray = GFC_FCOARRAY_SINGLE;
519 else if (strcmp (arg, "lib") == 0)
520 gfc_option.coarray = GFC_FCOARRAY_LIB;
522 gfc_fatal_error ("Argument to -fcoarray is not valid: %s", arg);
527 gfc_handle_runtime_check_option (const char *arg)
529 int result, pos = 0, n;
530 static const char * const optname[] = { "all", "bounds", "array-temps",
531 "recursion", "do", "pointer",
533 static const int optmask[] = { GFC_RTCHECK_ALL, GFC_RTCHECK_BOUNDS,
534 GFC_RTCHECK_ARRAY_TEMPS,
535 GFC_RTCHECK_RECURSION, GFC_RTCHECK_DO,
536 GFC_RTCHECK_POINTER, GFC_RTCHECK_MEM,
544 while (arg[pos] && arg[pos] != ',')
548 for (n = 0; optname[n] != NULL; n++)
550 if (optname[n] && strncmp (optname[n], arg, pos) == 0)
552 gfc_option.rtcheck |= optmask[n];
560 gfc_fatal_error ("Argument to -fcheck is not valid: %s", arg);
565 /* Handle command-line options. Returns 0 if unrecognized, 1 if
566 recognized and handled. */
569 gfc_handle_option (size_t scode, const char *arg, int value,
570 int kind ATTRIBUTE_UNUSED, location_t loc ATTRIBUTE_UNUSED,
571 const struct cl_option_handlers *handlers ATTRIBUTE_UNUSED)
574 enum opt_code code = (enum opt_code) scode;
576 if (gfc_cpp_handle_option (scode, arg, value) == 1)
590 gfc_option.warn_aliasing = value;
594 gfc_option.warn_ampersand = value;
597 case OPT_Warray_temporaries:
598 gfc_option.warn_array_temp = value;
601 case OPT_Wcharacter_truncation:
602 gfc_option.warn_character_truncation = value;
605 case OPT_Wconversion:
606 gfc_option.gfc_warn_conversion = value;
609 case OPT_Wconversion_extra:
610 gfc_option.warn_conversion_extra = value;
613 case OPT_Wimplicit_interface:
614 gfc_option.warn_implicit_interface = value;
617 case OPT_Wimplicit_procedure:
618 gfc_option.warn_implicit_procedure = value;
621 case OPT_Wline_truncation:
622 gfc_option.warn_line_truncation = value;
625 case OPT_Wreturn_type:
626 warn_return_type = value;
629 case OPT_Wsurprising:
630 gfc_option.warn_surprising = value;
634 gfc_option.warn_tabs = value;
638 gfc_option.warn_underflow = value;
641 case OPT_Wintrinsic_shadow:
642 gfc_option.warn_intrinsic_shadow = value;
645 case OPT_Walign_commons:
646 gfc_option.warn_align_commons = value;
649 case OPT_Wunused_dummy_argument:
650 gfc_option.warn_unused_dummy_argument = value;
653 case OPT_fall_intrinsics:
654 gfc_option.flag_all_intrinsics = 1;
658 gfc_option.flag_automatic = value;
661 case OPT_fallow_leading_underscore:
662 gfc_option.flag_allow_leading_underscore = value;
666 gfc_option.flag_backslash = value;
670 gfc_option.flag_backtrace = value;
673 case OPT_fcheck_array_temporaries:
674 gfc_option.rtcheck |= GFC_RTCHECK_ARRAY_TEMPS;
678 gfc_option.flag_dump_core = value;
681 case OPT_fcray_pointer:
682 gfc_option.flag_cray_pointer = value;
686 gfc_option.flag_f2c = value;
690 gfc_option.flag_dollar_ok = value;
693 case OPT_fexternal_blas:
694 gfc_option.flag_external_blas = value;
697 case OPT_fblas_matmul_limit_:
698 gfc_option.blas_matmul_limit = value;
701 case OPT_fd_lines_as_code:
702 gfc_option.flag_d_lines = 1;
705 case OPT_fd_lines_as_comments:
706 gfc_option.flag_d_lines = 0;
709 case OPT_fdump_fortran_original:
710 case OPT_fdump_parse_tree:
711 gfc_option.dump_fortran_original = value;
714 case OPT_fdump_fortran_optimized:
715 gfc_option.dump_fortran_optimized = value;
718 case OPT_ffixed_form:
719 gfc_option.source_form = FORM_FIXED;
722 case OPT_ffixed_line_length_none:
723 gfc_option.fixed_line_length = 0;
726 case OPT_ffixed_line_length_:
727 if (value != 0 && value < 7)
728 gfc_fatal_error ("Fixed line length must be at least seven.");
729 gfc_option.fixed_line_length = value;
733 gfc_option.source_form = FORM_FREE;
737 gfc_option.gfc_flag_openmp = value;
740 case OPT_ffree_line_length_none:
741 gfc_option.free_line_length = 0;
744 case OPT_ffree_line_length_:
745 if (value != 0 && value < 4)
746 gfc_fatal_error ("Free line length must be at least three.");
747 gfc_option.free_line_length = value;
750 case OPT_funderscoring:
751 gfc_option.flag_underscoring = value;
754 case OPT_fwhole_file:
755 gfc_option.flag_whole_file = value;
758 case OPT_fsecond_underscore:
759 gfc_option.flag_second_underscore = value;
762 case OPT_static_libgfortran:
763 #ifndef HAVE_LD_STATIC_DYNAMIC
764 gfc_fatal_error ("-static-libgfortran is not supported in this "
769 case OPT_fimplicit_none:
770 gfc_option.flag_implicit_none = value;
773 case OPT_fintrinsic_modules_path:
774 gfc_add_include_path (arg, false, false);
775 gfc_add_intrinsic_modules_path (arg);
778 case OPT_fmax_array_constructor_:
779 gfc_option.flag_max_array_constructor = value > 65535 ? value : 65535;
782 case OPT_fmax_stack_var_size_:
783 gfc_option.flag_max_stack_var_size = value;
786 case OPT_fmodule_private:
787 gfc_option.flag_module_private = value;
790 case OPT_frange_check:
791 gfc_option.flag_range_check = value;
794 case OPT_fpack_derived:
795 gfc_option.flag_pack_derived = value;
798 case OPT_frepack_arrays:
799 gfc_option.flag_repack_arrays = value;
802 case OPT_fpreprocessed:
803 gfc_option.flag_preprocessed = value;
806 case OPT_fmax_identifier_length_:
807 if (value > GFC_MAX_SYMBOL_LEN)
808 gfc_fatal_error ("Maximum supported identifier length is %d",
810 gfc_option.max_identifier_length = value;
813 case OPT_fdefault_integer_8:
814 gfc_option.flag_default_integer = value;
817 case OPT_fdefault_real_8:
818 gfc_option.flag_default_real = value;
821 case OPT_fdefault_double_8:
822 gfc_option.flag_default_double = value;
825 case OPT_finit_local_zero:
826 gfc_option.flag_init_integer = GFC_INIT_INTEGER_ON;
827 gfc_option.flag_init_integer_value = 0;
828 gfc_option.flag_init_real = GFC_INIT_REAL_ZERO;
829 gfc_option.flag_init_logical = GFC_INIT_LOGICAL_FALSE;
830 gfc_option.flag_init_character = GFC_INIT_CHARACTER_ON;
831 gfc_option.flag_init_character_value = (char)0;
834 case OPT_finit_logical_:
835 if (!strcasecmp (arg, "false"))
836 gfc_option.flag_init_logical = GFC_INIT_LOGICAL_FALSE;
837 else if (!strcasecmp (arg, "true"))
838 gfc_option.flag_init_logical = GFC_INIT_LOGICAL_TRUE;
840 gfc_fatal_error ("Unrecognized option to -finit-logical: %s",
844 case OPT_finit_real_:
845 if (!strcasecmp (arg, "zero"))
846 gfc_option.flag_init_real = GFC_INIT_REAL_ZERO;
847 else if (!strcasecmp (arg, "nan"))
848 gfc_option.flag_init_real = GFC_INIT_REAL_NAN;
849 else if (!strcasecmp (arg, "snan"))
850 gfc_option.flag_init_real = GFC_INIT_REAL_SNAN;
851 else if (!strcasecmp (arg, "inf"))
852 gfc_option.flag_init_real = GFC_INIT_REAL_INF;
853 else if (!strcasecmp (arg, "-inf"))
854 gfc_option.flag_init_real = GFC_INIT_REAL_NEG_INF;
856 gfc_fatal_error ("Unrecognized option to -finit-real: %s",
860 case OPT_finit_integer_:
861 gfc_option.flag_init_integer = GFC_INIT_INTEGER_ON;
862 gfc_option.flag_init_integer_value = atoi (arg);
865 case OPT_finit_character_:
866 if (value >= 0 && value <= 127)
868 gfc_option.flag_init_character = GFC_INIT_CHARACTER_ON;
869 gfc_option.flag_init_character_value = (char)value;
872 gfc_fatal_error ("The value of n in -finit-character=n must be "
873 "between 0 and 127");
877 gfc_add_include_path (arg, true, false);
881 gfc_handle_module_path_options (arg);
885 gfc_option.flag_sign_zero = value;
889 gfc_handle_fpe_trap_option (arg);
893 gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F95 | GFC_STD_F77
895 gfc_option.warn_std = GFC_STD_F95_OBS;
896 gfc_option.max_continue_fixed = 19;
897 gfc_option.max_continue_free = 39;
898 gfc_option.max_identifier_length = 31;
899 gfc_option.warn_ampersand = 1;
900 gfc_option.warn_tabs = 0;
904 gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F77
905 | GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F2008_OBS;
906 gfc_option.warn_std = GFC_STD_F95_OBS;
907 gfc_option.max_identifier_length = 63;
908 gfc_option.warn_ampersand = 1;
909 gfc_option.warn_tabs = 0;
913 gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F77
914 | GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F2008 | GFC_STD_F2008_OBS;
915 gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F2008_OBS;
916 gfc_option.max_identifier_length = 63;
917 gfc_option.warn_ampersand = 1;
918 gfc_option.warn_tabs = 0;
922 set_default_std_flags ();
926 set_default_std_flags ();
927 gfc_option.warn_std = 0;
930 case OPT_Wintrinsics_std:
931 gfc_option.warn_intrinsics_std = value;
934 case OPT_fshort_enums:
935 /* Handled in language-independent code. */
938 case OPT_fconvert_little_endian:
939 gfc_option.convert = GFC_CONVERT_LITTLE;
942 case OPT_fconvert_big_endian:
943 gfc_option.convert = GFC_CONVERT_BIG;
946 case OPT_fconvert_native:
947 gfc_option.convert = GFC_CONVERT_NATIVE;
950 case OPT_fconvert_swap:
951 gfc_option.convert = GFC_CONVERT_SWAP;
954 case OPT_frecord_marker_4:
955 gfc_option.record_marker = 4;
958 case OPT_frecord_marker_8:
959 gfc_option.record_marker = 8;
962 case OPT_fmax_subrecord_length_:
963 if (value > MAX_SUBRECORD_LENGTH)
964 gfc_fatal_error ("Maximum subrecord length cannot exceed %d",
965 MAX_SUBRECORD_LENGTH);
967 gfc_option.max_subrecord_length = value;
971 gfc_option.flag_recursive = value;
974 case OPT_falign_commons:
975 gfc_option.flag_align_commons = value;
978 case OPT_faggressive_function_elimination:
979 gfc_option.flag_aggressive_function_elimination = value;
982 case OPT_fprotect_parens:
983 gfc_option.flag_protect_parens = value;
986 case OPT_frealloc_lhs:
987 gfc_option.flag_realloc_lhs = value;
991 gfc_handle_runtime_check_option (arg);
995 gfc_handle_coarray_option (arg);
1003 /* Return a string with the options passed to the compiler; used for
1004 Fortran's compiler_options() intrinsic. */
1007 gfc_get_option_string (void)
1013 /* Determine required string length. */
1016 for (j = 1; j < save_decoded_options_count; j++)
1018 switch (save_decoded_options[j].opt_index)
1027 case OPT_fintrinsic_modules_path:
1031 /* Ignore file names. */
1032 if (save_decoded_options[j].orig_option_with_args_text[0] == '-')
1034 + strlen (save_decoded_options[j].orig_option_with_args_text);
1038 result = (char *) gfc_getmem (len);
1041 for (j = 1; j < save_decoded_options_count; j++)
1043 switch (save_decoded_options[j].opt_index)
1052 case OPT_fintrinsic_modules_path:
1057 /* Use "-cpp" rather than "-cpp=<temporary file>". */
1062 /* Ignore file names. */
1063 if (save_decoded_options[j].orig_option_with_args_text[0] != '-')
1066 len = strlen (save_decoded_options[j].orig_option_with_args_text);
1069 memcpy (&result[pos], save_decoded_options[j].orig_option_with_args_text, len);
1071 result[pos++] = ' ';
1074 result[--pos] = '\0';