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_F2008_TS | 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_function_elimination = 0;
103 gfc_option.warn_implicit_interface = 0;
104 gfc_option.warn_line_truncation = 0;
105 gfc_option.warn_surprising = 0;
106 gfc_option.warn_tabs = 1;
107 gfc_option.warn_underflow = 1;
108 gfc_option.warn_intrinsic_shadow = 0;
109 gfc_option.warn_intrinsics_std = 0;
110 gfc_option.warn_align_commons = 1;
111 gfc_option.warn_real_q_constant = 0;
112 gfc_option.warn_unused_dummy_argument = 0;
113 gfc_option.max_errors = 25;
115 gfc_option.flag_all_intrinsics = 0;
116 gfc_option.flag_default_double = 0;
117 gfc_option.flag_default_integer = 0;
118 gfc_option.flag_default_real = 0;
119 gfc_option.flag_integer4_kind = 0;
120 gfc_option.flag_real4_kind = 0;
121 gfc_option.flag_real8_kind = 0;
122 gfc_option.flag_dollar_ok = 0;
123 gfc_option.flag_underscoring = 1;
124 gfc_option.flag_whole_file = 1;
125 gfc_option.flag_f2c = 0;
126 gfc_option.flag_second_underscore = -1;
127 gfc_option.flag_implicit_none = 0;
129 /* Default value of flag_max_stack_var_size is set in gfc_post_options. */
130 gfc_option.flag_max_stack_var_size = -2;
131 gfc_option.flag_stack_arrays = -1;
133 gfc_option.flag_range_check = 1;
134 gfc_option.flag_pack_derived = 0;
135 gfc_option.flag_repack_arrays = 0;
136 gfc_option.flag_preprocessed = 0;
137 gfc_option.flag_automatic = 1;
138 gfc_option.flag_backslash = 0;
139 gfc_option.flag_module_private = 0;
140 gfc_option.flag_backtrace = 1;
141 gfc_option.flag_allow_leading_underscore = 0;
142 gfc_option.flag_external_blas = 0;
143 gfc_option.blas_matmul_limit = 30;
144 gfc_option.flag_cray_pointer = 0;
145 gfc_option.flag_d_lines = -1;
146 gfc_option.gfc_flag_openmp = 0;
147 gfc_option.flag_sign_zero = 1;
148 gfc_option.flag_recursive = 0;
149 gfc_option.flag_init_integer = GFC_INIT_INTEGER_OFF;
150 gfc_option.flag_init_integer_value = 0;
151 gfc_option.flag_init_real = GFC_INIT_REAL_OFF;
152 gfc_option.flag_init_logical = GFC_INIT_LOGICAL_OFF;
153 gfc_option.flag_init_character = GFC_INIT_CHARACTER_OFF;
154 gfc_option.flag_init_character_value = (char)0;
155 gfc_option.flag_align_commons = 1;
156 gfc_option.flag_protect_parens = -1;
157 gfc_option.flag_realloc_lhs = -1;
158 gfc_option.flag_aggressive_function_elimination = 0;
159 gfc_option.flag_frontend_optimize = -1;
162 gfc_option.rtcheck = 0;
163 gfc_option.coarray = GFC_FCOARRAY_NONE;
165 set_default_std_flags ();
167 /* Initialize cpp-related options. */
168 gfc_cpp_init_options (decoded_options_count, decoded_options);
172 /* Determine the source form from the filename extension. We assume
173 case insensitivity. */
175 static gfc_source_form
176 form_from_filename (const char *filename)
180 const char *extension;
181 gfc_source_form form;
208 }; /* sentinel value */
210 gfc_source_form f_form;
214 /* Find end of file name. Note, filename is either a NULL pointer or
215 a NUL terminated string. */
217 while (filename[i] != '\0')
220 /* Find last period. */
221 while (i >= 0 && (filename[i] != '.'))
224 /* Did we see a file extension? */
226 return FORM_UNKNOWN; /* Nope */
228 /* Get file extension and compare it to others. */
229 fileext = &(filename[i]);
232 f_form = FORM_UNKNOWN;
236 if (strcasecmp (fileext, exttype[i].extension) == 0)
238 f_form = exttype[i].form;
242 while (exttype[i].form != FORM_UNKNOWN);
248 /* Finalize commandline options. */
251 gfc_post_options (const char **pfilename)
253 const char *filename = *pfilename, *canon_source_file = NULL;
257 /* Excess precision other than "fast" requires front-end
259 if (flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD
260 && TARGET_FLT_EVAL_METHOD_NON_DEFAULT)
261 sorry ("-fexcess-precision=standard for Fortran");
262 flag_excess_precision_cmdline = EXCESS_PRECISION_FAST;
264 /* Whole program needs whole file mode. */
265 if (flag_whole_program)
266 gfc_option.flag_whole_file = 1;
268 /* Enable whole-file mode if LTO is in effect. */
270 gfc_option.flag_whole_file = 1;
272 /* Fortran allows associative math - but we cannot reassociate if
273 we want traps or signed zeros. Cf. also flag_protect_parens. */
274 if (flag_associative_math == -1)
275 flag_associative_math = (!flag_trapping_math && !flag_signed_zeros);
277 if (gfc_option.flag_protect_parens == -1)
278 gfc_option.flag_protect_parens = !optimize_fast;
280 if (gfc_option.flag_stack_arrays == -1)
281 gfc_option.flag_stack_arrays = optimize_fast;
283 /* By default, disable (re)allocation during assignment for -std=f95,
284 and enable it for F2003/F2008/GNU/Legacy. */
285 if (gfc_option.flag_realloc_lhs == -1)
287 if (gfc_option.allow_std & GFC_STD_F2003)
288 gfc_option.flag_realloc_lhs = 1;
290 gfc_option.flag_realloc_lhs = 0;
293 /* -fbounds-check is equivalent to -fcheck=bounds */
294 if (flag_bounds_check)
295 gfc_option.rtcheck |= GFC_RTCHECK_BOUNDS;
297 if (flag_compare_debug)
298 gfc_option.dump_fortran_original = 0;
300 /* Make -fmax-errors visible to gfortran's diagnostic machinery. */
301 if (global_options_set.x_flag_max_errors)
302 gfc_option.max_errors = flag_max_errors;
304 /* Verify the input file name. */
305 if (!filename || strcmp (filename, "-") == 0)
310 if (gfc_option.flag_preprocessed)
312 /* For preprocessed files, if the first tokens are of the form # NUM.
313 handle the directives so we know the original file name. */
314 gfc_source_file = gfc_read_orig_filename (filename, &canon_source_file);
315 if (gfc_source_file == NULL)
316 gfc_source_file = filename;
318 *pfilename = gfc_source_file;
321 gfc_source_file = filename;
323 if (canon_source_file == NULL)
324 canon_source_file = gfc_source_file;
326 /* Adds the path where the source file is to the list of include files. */
328 i = strlen (canon_source_file);
329 while (i > 0 && !IS_DIR_SEPARATOR (canon_source_file[i]))
334 source_path = (char *) alloca (i + 1);
335 memcpy (source_path, canon_source_file, i);
337 gfc_add_include_path (source_path, true, true);
340 gfc_add_include_path (".", true, true);
342 if (canon_source_file != gfc_source_file)
343 free (CONST_CAST (char *, canon_source_file));
345 /* Decide which form the file will be read in as. */
347 if (gfc_option.source_form != FORM_UNKNOWN)
348 gfc_current_form = gfc_option.source_form;
351 gfc_current_form = form_from_filename (filename);
353 if (gfc_current_form == FORM_UNKNOWN)
355 gfc_current_form = FORM_FREE;
356 gfc_warning_now ("Reading file '%s' as free form",
357 (filename[0] == '\0') ? "<stdin>" : filename);
361 /* If the user specified -fd-lines-as-{code|comments} verify that we're
363 if (gfc_current_form == FORM_FREE)
365 if (gfc_option.flag_d_lines == 0)
366 gfc_warning_now ("'-fd-lines-as-comments' has no effect "
368 else if (gfc_option.flag_d_lines == 1)
369 gfc_warning_now ("'-fd-lines-as-code' has no effect in free form");
372 /* If -pedantic, warn about the use of GNU extensions. */
373 if (pedantic && (gfc_option.allow_std & GFC_STD_GNU) != 0)
374 gfc_option.warn_std |= GFC_STD_GNU;
375 /* -std=legacy -pedantic is effectively -std=gnu. */
376 if (pedantic && (gfc_option.allow_std & GFC_STD_LEGACY) != 0)
377 gfc_option.warn_std |= GFC_STD_F95_OBS | GFC_STD_F95_DEL | GFC_STD_LEGACY;
379 /* If the user didn't explicitly specify -f(no)-second-underscore we
380 use it if we're trying to be compatible with f2c, and not
382 if (gfc_option.flag_second_underscore == -1)
383 gfc_option.flag_second_underscore = gfc_option.flag_f2c;
385 if (!gfc_option.flag_automatic && gfc_option.flag_max_stack_var_size != -2
386 && gfc_option.flag_max_stack_var_size != 0)
387 gfc_warning_now ("Flag -fno-automatic overwrites -fmax-stack-var-size=%d",
388 gfc_option.flag_max_stack_var_size);
389 else if (!gfc_option.flag_automatic && gfc_option.flag_recursive)
390 gfc_warning_now ("Flag -fno-automatic overwrites -frecursive");
391 else if (!gfc_option.flag_automatic && gfc_option.gfc_flag_openmp)
392 gfc_warning_now ("Flag -fno-automatic overwrites -frecursive implied by "
394 else if (gfc_option.flag_max_stack_var_size != -2
395 && gfc_option.flag_recursive)
396 gfc_warning_now ("Flag -frecursive overwrites -fmax-stack-var-size=%d",
397 gfc_option.flag_max_stack_var_size);
398 else if (gfc_option.flag_max_stack_var_size != -2
399 && gfc_option.gfc_flag_openmp)
400 gfc_warning_now ("Flag -fmax-stack-var-size=%d overwrites -frecursive "
401 "implied by -fopenmp",
402 gfc_option.flag_max_stack_var_size);
404 /* Implement -frecursive as -fmax-stack-var-size=-1. */
405 if (gfc_option.flag_recursive)
406 gfc_option.flag_max_stack_var_size = -1;
408 /* Implied -frecursive; implemented as -fmax-stack-var-size=-1. */
409 if (gfc_option.flag_max_stack_var_size == -2 && gfc_option.gfc_flag_openmp
410 && gfc_option.flag_automatic)
412 gfc_option.flag_recursive = 1;
413 gfc_option.flag_max_stack_var_size = -1;
417 if (gfc_option.flag_max_stack_var_size == -2)
418 gfc_option.flag_max_stack_var_size = 32768;
420 /* Implement -fno-automatic as -fmax-stack-var-size=0. */
421 if (!gfc_option.flag_automatic)
422 gfc_option.flag_max_stack_var_size = 0;
426 gfc_option.warn_ampersand = 1;
427 gfc_option.warn_tabs = 0;
430 if (pedantic && gfc_option.flag_whole_file)
431 gfc_option.flag_whole_file = 2;
433 /* Optimization implies front end optimization, unless the user
434 specified it directly. */
436 if (gfc_option.flag_frontend_optimize == -1)
437 gfc_option.flag_frontend_optimize = optimize;
439 gfc_cpp_post_options ();
441 /* FIXME: return gfc_cpp_preprocess_only ();
443 The return value of this function indicates whether the
444 backend needs to be initialized. On -E, we don't need
445 the backend. However, if we return 'true' here, an
446 ICE occurs. Initializing the backend doesn't hurt much,
447 hence, for now we can live with it as is. */
452 /* Set the options for -Wall. */
455 set_Wall (int setting)
457 gfc_option.warn_aliasing = setting;
458 gfc_option.warn_ampersand = setting;
459 gfc_option.gfc_warn_conversion = setting;
460 gfc_option.warn_line_truncation = setting;
461 gfc_option.warn_surprising = setting;
462 gfc_option.warn_tabs = !setting;
463 gfc_option.warn_underflow = setting;
464 gfc_option.warn_intrinsic_shadow = setting;
465 gfc_option.warn_intrinsics_std = setting;
466 gfc_option.warn_character_truncation = setting;
467 gfc_option.warn_real_q_constant = setting;
468 gfc_option.warn_unused_dummy_argument = setting;
470 warn_unused = setting;
471 warn_return_type = setting;
472 warn_switch = setting;
473 warn_uninitialized = setting;
474 warn_maybe_uninitialized = setting;
479 gfc_handle_module_path_options (const char *arg)
482 if (gfc_option.module_dir != NULL)
483 gfc_fatal_error ("gfortran: Only one -J option allowed");
485 gfc_option.module_dir = XCNEWVEC (char, strlen (arg) + 2);
486 strcpy (gfc_option.module_dir, arg);
488 gfc_add_include_path (gfc_option.module_dir, true, false);
490 strcat (gfc_option.module_dir, "/");
495 gfc_handle_fpe_trap_option (const char *arg)
497 int result, pos = 0, n;
498 /* precision is a backwards compatibility alias for inexact. */
499 static const char * const exception[] = { "invalid", "denormal", "zero",
500 "overflow", "underflow",
501 "inexact", "precision", NULL };
502 static const int opt_exception[] = { GFC_FPE_INVALID, GFC_FPE_DENORMAL,
503 GFC_FPE_ZERO, GFC_FPE_OVERFLOW,
504 GFC_FPE_UNDERFLOW, GFC_FPE_INEXACT,
513 while (arg[pos] && arg[pos] != ',')
517 for (n = 0; exception[n] != NULL; n++)
519 if (exception[n] && strncmp (exception[n], arg, pos) == 0)
521 gfc_option.fpe |= opt_exception[n];
529 gfc_fatal_error ("Argument to -ffpe-trap is not valid: %s", arg);
535 gfc_handle_coarray_option (const char *arg)
537 if (strcmp (arg, "none") == 0)
538 gfc_option.coarray = GFC_FCOARRAY_NONE;
539 else if (strcmp (arg, "single") == 0)
540 gfc_option.coarray = GFC_FCOARRAY_SINGLE;
541 else if (strcmp (arg, "lib") == 0)
542 gfc_option.coarray = GFC_FCOARRAY_LIB;
544 gfc_fatal_error ("Argument to -fcoarray is not valid: %s", arg);
549 gfc_handle_runtime_check_option (const char *arg)
551 int result, pos = 0, n;
552 static const char * const optname[] = { "all", "bounds", "array-temps",
553 "recursion", "do", "pointer",
555 static const int optmask[] = { GFC_RTCHECK_ALL, GFC_RTCHECK_BOUNDS,
556 GFC_RTCHECK_ARRAY_TEMPS,
557 GFC_RTCHECK_RECURSION, GFC_RTCHECK_DO,
558 GFC_RTCHECK_POINTER, GFC_RTCHECK_MEM,
566 while (arg[pos] && arg[pos] != ',')
570 for (n = 0; optname[n] != NULL; n++)
572 if (optname[n] && strncmp (optname[n], arg, pos) == 0)
574 gfc_option.rtcheck |= optmask[n];
582 gfc_fatal_error ("Argument to -fcheck is not valid: %s", arg);
587 /* Handle command-line options. Returns 0 if unrecognized, 1 if
588 recognized and handled. */
591 gfc_handle_option (size_t scode, const char *arg, int value,
592 int kind ATTRIBUTE_UNUSED, location_t loc ATTRIBUTE_UNUSED,
593 const struct cl_option_handlers *handlers ATTRIBUTE_UNUSED)
596 enum opt_code code = (enum opt_code) scode;
598 if (gfc_cpp_handle_option (scode, arg, value) == 1)
612 gfc_option.warn_aliasing = value;
616 gfc_option.warn_ampersand = value;
619 case OPT_Warray_temporaries:
620 gfc_option.warn_array_temp = value;
623 case OPT_Wcharacter_truncation:
624 gfc_option.warn_character_truncation = value;
627 case OPT_Wconversion:
628 gfc_option.gfc_warn_conversion = value;
631 case OPT_Wconversion_extra:
632 gfc_option.warn_conversion_extra = value;
635 case OPT_Wfunction_elimination:
636 gfc_option.warn_function_elimination = value;
639 case OPT_Wimplicit_interface:
640 gfc_option.warn_implicit_interface = value;
643 case OPT_Wimplicit_procedure:
644 gfc_option.warn_implicit_procedure = value;
647 case OPT_Wline_truncation:
648 gfc_option.warn_line_truncation = value;
651 case OPT_Wreturn_type:
652 warn_return_type = value;
655 case OPT_Wsurprising:
656 gfc_option.warn_surprising = value;
660 gfc_option.warn_tabs = value;
664 gfc_option.warn_underflow = value;
667 case OPT_Wintrinsic_shadow:
668 gfc_option.warn_intrinsic_shadow = value;
671 case OPT_Walign_commons:
672 gfc_option.warn_align_commons = value;
675 case OPT_Wreal_q_constant:
676 gfc_option.warn_real_q_constant = value;
679 case OPT_Wunused_dummy_argument:
680 gfc_option.warn_unused_dummy_argument = value;
683 case OPT_fall_intrinsics:
684 gfc_option.flag_all_intrinsics = 1;
688 gfc_option.flag_automatic = value;
691 case OPT_fallow_leading_underscore:
692 gfc_option.flag_allow_leading_underscore = value;
696 gfc_option.flag_backslash = value;
700 gfc_option.flag_backtrace = value;
703 case OPT_fcheck_array_temporaries:
704 gfc_option.rtcheck |= GFC_RTCHECK_ARRAY_TEMPS;
707 case OPT_fcray_pointer:
708 gfc_option.flag_cray_pointer = value;
712 gfc_option.flag_f2c = value;
716 gfc_option.flag_dollar_ok = value;
719 case OPT_fexternal_blas:
720 gfc_option.flag_external_blas = value;
723 case OPT_fblas_matmul_limit_:
724 gfc_option.blas_matmul_limit = value;
727 case OPT_fd_lines_as_code:
728 gfc_option.flag_d_lines = 1;
731 case OPT_fd_lines_as_comments:
732 gfc_option.flag_d_lines = 0;
735 case OPT_fdump_fortran_original:
736 case OPT_fdump_parse_tree:
737 gfc_option.dump_fortran_original = value;
740 case OPT_fdump_fortran_optimized:
741 gfc_option.dump_fortran_optimized = value;
744 case OPT_ffixed_form:
745 gfc_option.source_form = FORM_FIXED;
748 case OPT_ffixed_line_length_none:
749 gfc_option.fixed_line_length = 0;
752 case OPT_ffixed_line_length_:
753 if (value != 0 && value < 7)
754 gfc_fatal_error ("Fixed line length must be at least seven.");
755 gfc_option.fixed_line_length = value;
759 gfc_option.source_form = FORM_FREE;
763 gfc_option.gfc_flag_openmp = value;
766 case OPT_ffree_line_length_none:
767 gfc_option.free_line_length = 0;
770 case OPT_ffree_line_length_:
771 if (value != 0 && value < 4)
772 gfc_fatal_error ("Free line length must be at least three.");
773 gfc_option.free_line_length = value;
776 case OPT_funderscoring:
777 gfc_option.flag_underscoring = value;
780 case OPT_fwhole_file:
781 gfc_option.flag_whole_file = value;
784 case OPT_fsecond_underscore:
785 gfc_option.flag_second_underscore = value;
788 case OPT_static_libgfortran:
789 #ifndef HAVE_LD_STATIC_DYNAMIC
790 gfc_fatal_error ("-static-libgfortran is not supported in this "
795 case OPT_fimplicit_none:
796 gfc_option.flag_implicit_none = value;
799 case OPT_fintrinsic_modules_path:
800 gfc_add_include_path (arg, false, false);
801 gfc_add_intrinsic_modules_path (arg);
804 case OPT_fmax_array_constructor_:
805 gfc_option.flag_max_array_constructor = value > 65535 ? value : 65535;
808 case OPT_fmax_stack_var_size_:
809 gfc_option.flag_max_stack_var_size = value;
812 case OPT_fstack_arrays:
813 gfc_option.flag_stack_arrays = value;
816 case OPT_fmodule_private:
817 gfc_option.flag_module_private = value;
820 case OPT_frange_check:
821 gfc_option.flag_range_check = value;
824 case OPT_fpack_derived:
825 gfc_option.flag_pack_derived = value;
828 case OPT_frepack_arrays:
829 gfc_option.flag_repack_arrays = value;
832 case OPT_fpreprocessed:
833 gfc_option.flag_preprocessed = value;
836 case OPT_fmax_identifier_length_:
837 if (value > GFC_MAX_SYMBOL_LEN)
838 gfc_fatal_error ("Maximum supported identifier length is %d",
840 gfc_option.max_identifier_length = value;
843 case OPT_fdefault_integer_8:
844 gfc_option.flag_default_integer = value;
847 case OPT_fdefault_real_8:
848 gfc_option.flag_default_real = value;
851 case OPT_fdefault_double_8:
852 gfc_option.flag_default_double = value;
855 case OPT_finteger_4_integer_8:
856 gfc_option.flag_integer4_kind = 8;
859 case OPT_freal_4_real_8:
860 gfc_option.flag_real4_kind = 8;
863 case OPT_freal_4_real_10:
864 gfc_option.flag_real4_kind = 10;
867 case OPT_freal_4_real_16:
868 gfc_option.flag_real4_kind = 16;
871 case OPT_freal_8_real_4:
872 gfc_option.flag_real8_kind = 4;
875 case OPT_freal_8_real_10:
876 gfc_option.flag_real8_kind = 10;
879 case OPT_freal_8_real_16:
880 gfc_option.flag_real8_kind = 16;
883 case OPT_finit_local_zero:
884 gfc_option.flag_init_integer = GFC_INIT_INTEGER_ON;
885 gfc_option.flag_init_integer_value = 0;
886 gfc_option.flag_init_real = GFC_INIT_REAL_ZERO;
887 gfc_option.flag_init_logical = GFC_INIT_LOGICAL_FALSE;
888 gfc_option.flag_init_character = GFC_INIT_CHARACTER_ON;
889 gfc_option.flag_init_character_value = (char)0;
892 case OPT_finit_logical_:
893 if (!strcasecmp (arg, "false"))
894 gfc_option.flag_init_logical = GFC_INIT_LOGICAL_FALSE;
895 else if (!strcasecmp (arg, "true"))
896 gfc_option.flag_init_logical = GFC_INIT_LOGICAL_TRUE;
898 gfc_fatal_error ("Unrecognized option to -finit-logical: %s",
902 case OPT_finit_real_:
903 if (!strcasecmp (arg, "zero"))
904 gfc_option.flag_init_real = GFC_INIT_REAL_ZERO;
905 else if (!strcasecmp (arg, "nan"))
906 gfc_option.flag_init_real = GFC_INIT_REAL_NAN;
907 else if (!strcasecmp (arg, "snan"))
908 gfc_option.flag_init_real = GFC_INIT_REAL_SNAN;
909 else if (!strcasecmp (arg, "inf"))
910 gfc_option.flag_init_real = GFC_INIT_REAL_INF;
911 else if (!strcasecmp (arg, "-inf"))
912 gfc_option.flag_init_real = GFC_INIT_REAL_NEG_INF;
914 gfc_fatal_error ("Unrecognized option to -finit-real: %s",
918 case OPT_finit_integer_:
919 gfc_option.flag_init_integer = GFC_INIT_INTEGER_ON;
920 gfc_option.flag_init_integer_value = atoi (arg);
923 case OPT_finit_character_:
924 if (value >= 0 && value <= 127)
926 gfc_option.flag_init_character = GFC_INIT_CHARACTER_ON;
927 gfc_option.flag_init_character_value = (char)value;
930 gfc_fatal_error ("The value of n in -finit-character=n must be "
931 "between 0 and 127");
935 gfc_add_include_path (arg, true, false);
939 gfc_handle_module_path_options (arg);
943 gfc_option.flag_sign_zero = value;
947 gfc_handle_fpe_trap_option (arg);
951 gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F95 | GFC_STD_F77
953 gfc_option.warn_std = GFC_STD_F95_OBS;
954 gfc_option.max_continue_fixed = 19;
955 gfc_option.max_continue_free = 39;
956 gfc_option.max_identifier_length = 31;
957 gfc_option.warn_ampersand = 1;
958 gfc_option.warn_tabs = 0;
962 gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F77
963 | GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F2008_OBS;
964 gfc_option.warn_std = GFC_STD_F95_OBS;
965 gfc_option.max_identifier_length = 63;
966 gfc_option.warn_ampersand = 1;
967 gfc_option.warn_tabs = 0;
971 gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F77
972 | GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F2008 | GFC_STD_F2008_OBS;
973 gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F2008_OBS;
974 gfc_option.max_identifier_length = 63;
975 gfc_option.warn_ampersand = 1;
976 gfc_option.warn_tabs = 0;
979 case OPT_std_f2008ts:
980 gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F77
981 | GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F2008 | GFC_STD_F2008_OBS
983 gfc_option.warn_std = GFC_STD_F95_OBS | GFC_STD_F2008_OBS;
984 gfc_option.max_identifier_length = 63;
985 gfc_option.warn_ampersand = 1;
986 gfc_option.warn_tabs = 0;
990 set_default_std_flags ();
994 set_default_std_flags ();
995 gfc_option.warn_std = 0;
998 case OPT_Wintrinsics_std:
999 gfc_option.warn_intrinsics_std = value;
1002 case OPT_fshort_enums:
1003 /* Handled in language-independent code. */
1006 case OPT_fconvert_little_endian:
1007 gfc_option.convert = GFC_CONVERT_LITTLE;
1010 case OPT_fconvert_big_endian:
1011 gfc_option.convert = GFC_CONVERT_BIG;
1014 case OPT_fconvert_native:
1015 gfc_option.convert = GFC_CONVERT_NATIVE;
1018 case OPT_fconvert_swap:
1019 gfc_option.convert = GFC_CONVERT_SWAP;
1022 case OPT_frecord_marker_4:
1023 gfc_option.record_marker = 4;
1026 case OPT_frecord_marker_8:
1027 gfc_option.record_marker = 8;
1030 case OPT_fmax_subrecord_length_:
1031 if (value > MAX_SUBRECORD_LENGTH)
1032 gfc_fatal_error ("Maximum subrecord length cannot exceed %d",
1033 MAX_SUBRECORD_LENGTH);
1035 gfc_option.max_subrecord_length = value;
1038 case OPT_frecursive:
1039 gfc_option.flag_recursive = value;
1042 case OPT_falign_commons:
1043 gfc_option.flag_align_commons = value;
1046 case OPT_faggressive_function_elimination:
1047 gfc_option.flag_aggressive_function_elimination = value;
1050 case OPT_ffrontend_optimize:
1051 gfc_option.flag_frontend_optimize = value;
1054 case OPT_fprotect_parens:
1055 gfc_option.flag_protect_parens = value;
1058 case OPT_frealloc_lhs:
1059 gfc_option.flag_realloc_lhs = value;
1063 gfc_handle_runtime_check_option (arg);
1067 gfc_handle_coarray_option (arg);
1075 /* Return a string with the options passed to the compiler; used for
1076 Fortran's compiler_options() intrinsic. */
1079 gfc_get_option_string (void)
1085 /* Determine required string length. */
1088 for (j = 1; j < save_decoded_options_count; j++)
1090 switch (save_decoded_options[j].opt_index)
1099 case OPT_fintrinsic_modules_path:
1103 /* Ignore file names. */
1104 if (save_decoded_options[j].orig_option_with_args_text[0] == '-')
1106 + strlen (save_decoded_options[j].orig_option_with_args_text);
1110 result = XCNEWVEC (char, len);
1113 for (j = 1; j < save_decoded_options_count; j++)
1115 switch (save_decoded_options[j].opt_index)
1124 case OPT_fintrinsic_modules_path:
1129 /* Use "-cpp" rather than "-cpp=<temporary file>". */
1134 /* Ignore file names. */
1135 if (save_decoded_options[j].orig_option_with_args_text[0] != '-')
1138 len = strlen (save_decoded_options[j].orig_option_with_args_text);
1141 memcpy (&result[pos], save_decoded_options[j].orig_option_with_args_text, len);
1143 result[pos++] = ' ';
1146 result[--pos] = '\0';