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_TR
| 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_dollar_ok
= 0;
120 gfc_option
.flag_underscoring
= 1;
121 gfc_option
.flag_whole_file
= 1;
122 gfc_option
.flag_f2c
= 0;
123 gfc_option
.flag_second_underscore
= -1;
124 gfc_option
.flag_implicit_none
= 0;
126 /* Default value of flag_max_stack_var_size is set in gfc_post_options. */
127 gfc_option
.flag_max_stack_var_size
= -2;
128 gfc_option
.flag_stack_arrays
= -1;
130 gfc_option
.flag_range_check
= 1;
131 gfc_option
.flag_pack_derived
= 0;
132 gfc_option
.flag_repack_arrays
= 0;
133 gfc_option
.flag_preprocessed
= 0;
134 gfc_option
.flag_automatic
= 1;
135 gfc_option
.flag_backslash
= 0;
136 gfc_option
.flag_module_private
= 0;
137 gfc_option
.flag_backtrace
= 1;
138 gfc_option
.flag_allow_leading_underscore
= 0;
139 gfc_option
.flag_external_blas
= 0;
140 gfc_option
.blas_matmul_limit
= 30;
141 gfc_option
.flag_cray_pointer
= 0;
142 gfc_option
.flag_d_lines
= -1;
143 gfc_option
.gfc_flag_openmp
= 0;
144 gfc_option
.flag_sign_zero
= 1;
145 gfc_option
.flag_recursive
= 0;
146 gfc_option
.flag_init_integer
= GFC_INIT_INTEGER_OFF
;
147 gfc_option
.flag_init_integer_value
= 0;
148 gfc_option
.flag_init_real
= GFC_INIT_REAL_OFF
;
149 gfc_option
.flag_init_logical
= GFC_INIT_LOGICAL_OFF
;
150 gfc_option
.flag_init_character
= GFC_INIT_CHARACTER_OFF
;
151 gfc_option
.flag_init_character_value
= (char)0;
152 gfc_option
.flag_align_commons
= 1;
153 gfc_option
.flag_protect_parens
= -1;
154 gfc_option
.flag_realloc_lhs
= -1;
155 gfc_option
.flag_aggressive_function_elimination
= 0;
156 gfc_option
.flag_frontend_optimize
= -1;
159 gfc_option
.rtcheck
= 0;
160 gfc_option
.coarray
= GFC_FCOARRAY_NONE
;
162 set_default_std_flags ();
164 /* Initialize cpp-related options. */
165 gfc_cpp_init_options (decoded_options_count
, decoded_options
);
169 /* Determine the source form from the filename extension. We assume
170 case insensitivity. */
172 static gfc_source_form
173 form_from_filename (const char *filename
)
177 const char *extension
;
178 gfc_source_form form
;
205 }; /* sentinel value */
207 gfc_source_form f_form
;
211 /* Find end of file name. Note, filename is either a NULL pointer or
212 a NUL terminated string. */
214 while (filename
[i
] != '\0')
217 /* Find last period. */
218 while (i
>= 0 && (filename
[i
] != '.'))
221 /* Did we see a file extension? */
223 return FORM_UNKNOWN
; /* Nope */
225 /* Get file extension and compare it to others. */
226 fileext
= &(filename
[i
]);
229 f_form
= FORM_UNKNOWN
;
233 if (strcasecmp (fileext
, exttype
[i
].extension
) == 0)
235 f_form
= exttype
[i
].form
;
239 while (exttype
[i
].form
!= FORM_UNKNOWN
);
245 /* Finalize commandline options. */
248 gfc_post_options (const char **pfilename
)
250 const char *filename
= *pfilename
, *canon_source_file
= NULL
;
254 /* Excess precision other than "fast" requires front-end
256 if (flag_excess_precision_cmdline
== EXCESS_PRECISION_STANDARD
257 && TARGET_FLT_EVAL_METHOD_NON_DEFAULT
)
258 sorry ("-fexcess-precision=standard for Fortran");
259 flag_excess_precision_cmdline
= EXCESS_PRECISION_FAST
;
261 /* Whole program needs whole file mode. */
262 if (flag_whole_program
)
263 gfc_option
.flag_whole_file
= 1;
265 /* Enable whole-file mode if LTO is in effect. */
267 gfc_option
.flag_whole_file
= 1;
269 /* Fortran allows associative math - but we cannot reassociate if
270 we want traps or signed zeros. Cf. also flag_protect_parens. */
271 if (flag_associative_math
== -1)
272 flag_associative_math
= (!flag_trapping_math
&& !flag_signed_zeros
);
274 if (gfc_option
.flag_protect_parens
== -1)
275 gfc_option
.flag_protect_parens
= !optimize_fast
;
277 if (gfc_option
.flag_stack_arrays
== -1)
278 gfc_option
.flag_stack_arrays
= optimize_fast
;
280 /* By default, disable (re)allocation during assignment for -std=f95,
281 and enable it for F2003/F2008/GNU/Legacy. */
282 if (gfc_option
.flag_realloc_lhs
== -1)
284 if (gfc_option
.allow_std
& GFC_STD_F2003
)
285 gfc_option
.flag_realloc_lhs
= 1;
287 gfc_option
.flag_realloc_lhs
= 0;
290 /* -fbounds-check is equivalent to -fcheck=bounds */
291 if (flag_bounds_check
)
292 gfc_option
.rtcheck
|= GFC_RTCHECK_BOUNDS
;
294 if (flag_compare_debug
)
295 gfc_option
.dump_fortran_original
= 0;
297 /* Make -fmax-errors visible to gfortran's diagnostic machinery. */
298 if (global_options_set
.x_flag_max_errors
)
299 gfc_option
.max_errors
= flag_max_errors
;
301 /* Verify the input file name. */
302 if (!filename
|| strcmp (filename
, "-") == 0)
307 if (gfc_option
.flag_preprocessed
)
309 /* For preprocessed files, if the first tokens are of the form # NUM.
310 handle the directives so we know the original file name. */
311 gfc_source_file
= gfc_read_orig_filename (filename
, &canon_source_file
);
312 if (gfc_source_file
== NULL
)
313 gfc_source_file
= filename
;
315 *pfilename
= gfc_source_file
;
318 gfc_source_file
= filename
;
320 if (canon_source_file
== NULL
)
321 canon_source_file
= gfc_source_file
;
323 /* Adds the path where the source file is to the list of include files. */
325 i
= strlen (canon_source_file
);
326 while (i
> 0 && !IS_DIR_SEPARATOR (canon_source_file
[i
]))
331 source_path
= (char *) alloca (i
+ 1);
332 memcpy (source_path
, canon_source_file
, i
);
334 gfc_add_include_path (source_path
, true, true);
337 gfc_add_include_path (".", true, true);
339 if (canon_source_file
!= gfc_source_file
)
340 free (CONST_CAST (char *, canon_source_file
));
342 /* Decide which form the file will be read in as. */
344 if (gfc_option
.source_form
!= FORM_UNKNOWN
)
345 gfc_current_form
= gfc_option
.source_form
;
348 gfc_current_form
= form_from_filename (filename
);
350 if (gfc_current_form
== FORM_UNKNOWN
)
352 gfc_current_form
= FORM_FREE
;
353 gfc_warning_now ("Reading file '%s' as free form",
354 (filename
[0] == '\0') ? "<stdin>" : filename
);
358 /* If the user specified -fd-lines-as-{code|comments} verify that we're
360 if (gfc_current_form
== FORM_FREE
)
362 if (gfc_option
.flag_d_lines
== 0)
363 gfc_warning_now ("'-fd-lines-as-comments' has no effect "
365 else if (gfc_option
.flag_d_lines
== 1)
366 gfc_warning_now ("'-fd-lines-as-code' has no effect in free form");
369 /* If -pedantic, warn about the use of GNU extensions. */
370 if (pedantic
&& (gfc_option
.allow_std
& GFC_STD_GNU
) != 0)
371 gfc_option
.warn_std
|= GFC_STD_GNU
;
372 /* -std=legacy -pedantic is effectively -std=gnu. */
373 if (pedantic
&& (gfc_option
.allow_std
& GFC_STD_LEGACY
) != 0)
374 gfc_option
.warn_std
|= GFC_STD_F95_OBS
| GFC_STD_F95_DEL
| GFC_STD_LEGACY
;
376 /* If the user didn't explicitly specify -f(no)-second-underscore we
377 use it if we're trying to be compatible with f2c, and not
379 if (gfc_option
.flag_second_underscore
== -1)
380 gfc_option
.flag_second_underscore
= gfc_option
.flag_f2c
;
382 if (!gfc_option
.flag_automatic
&& gfc_option
.flag_max_stack_var_size
!= -2
383 && gfc_option
.flag_max_stack_var_size
!= 0)
384 gfc_warning_now ("Flag -fno-automatic overwrites -fmax-stack-var-size=%d",
385 gfc_option
.flag_max_stack_var_size
);
386 else if (!gfc_option
.flag_automatic
&& gfc_option
.flag_recursive
)
387 gfc_warning_now ("Flag -fno-automatic overwrites -frecursive");
388 else if (!gfc_option
.flag_automatic
&& gfc_option
.gfc_flag_openmp
)
389 gfc_warning_now ("Flag -fno-automatic overwrites -frecursive implied by "
391 else if (gfc_option
.flag_max_stack_var_size
!= -2
392 && gfc_option
.flag_recursive
)
393 gfc_warning_now ("Flag -frecursive overwrites -fmax-stack-var-size=%d",
394 gfc_option
.flag_max_stack_var_size
);
395 else if (gfc_option
.flag_max_stack_var_size
!= -2
396 && gfc_option
.gfc_flag_openmp
)
397 gfc_warning_now ("Flag -fmax-stack-var-size=%d overwrites -frecursive "
398 "implied by -fopenmp",
399 gfc_option
.flag_max_stack_var_size
);
401 /* Implement -frecursive as -fmax-stack-var-size=-1. */
402 if (gfc_option
.flag_recursive
)
403 gfc_option
.flag_max_stack_var_size
= -1;
405 /* Implied -frecursive; implemented as -fmax-stack-var-size=-1. */
406 if (gfc_option
.flag_max_stack_var_size
== -2 && gfc_option
.gfc_flag_openmp
407 && gfc_option
.flag_automatic
)
409 gfc_option
.flag_recursive
= 1;
410 gfc_option
.flag_max_stack_var_size
= -1;
414 if (gfc_option
.flag_max_stack_var_size
== -2)
415 gfc_option
.flag_max_stack_var_size
= 32768;
417 /* Implement -fno-automatic as -fmax-stack-var-size=0. */
418 if (!gfc_option
.flag_automatic
)
419 gfc_option
.flag_max_stack_var_size
= 0;
423 gfc_option
.warn_ampersand
= 1;
424 gfc_option
.warn_tabs
= 0;
427 if (pedantic
&& gfc_option
.flag_whole_file
)
428 gfc_option
.flag_whole_file
= 2;
430 /* Optimization implies front end optimization, unless the user
431 specified it directly. */
433 if (gfc_option
.flag_frontend_optimize
== -1)
434 gfc_option
.flag_frontend_optimize
= optimize
;
436 gfc_cpp_post_options ();
438 /* FIXME: return gfc_cpp_preprocess_only ();
440 The return value of this function indicates whether the
441 backend needs to be initialized. On -E, we don't need
442 the backend. However, if we return 'true' here, an
443 ICE occurs. Initializing the backend doesn't hurt much,
444 hence, for now we can live with it as is. */
449 /* Set the options for -Wall. */
452 set_Wall (int setting
)
454 gfc_option
.warn_aliasing
= setting
;
455 gfc_option
.warn_ampersand
= setting
;
456 gfc_option
.gfc_warn_conversion
= setting
;
457 gfc_option
.warn_line_truncation
= setting
;
458 gfc_option
.warn_surprising
= setting
;
459 gfc_option
.warn_tabs
= !setting
;
460 gfc_option
.warn_underflow
= setting
;
461 gfc_option
.warn_intrinsic_shadow
= setting
;
462 gfc_option
.warn_intrinsics_std
= setting
;
463 gfc_option
.warn_character_truncation
= setting
;
464 gfc_option
.warn_real_q_constant
= setting
;
465 gfc_option
.warn_unused_dummy_argument
= setting
;
467 warn_unused
= setting
;
468 warn_return_type
= setting
;
469 warn_switch
= setting
;
470 warn_uninitialized
= setting
;
471 warn_maybe_uninitialized
= setting
;
476 gfc_handle_module_path_options (const char *arg
)
479 if (gfc_option
.module_dir
!= NULL
)
480 gfc_fatal_error ("gfortran: Only one -J option allowed");
482 gfc_option
.module_dir
= XCNEWVEC (char, strlen (arg
) + 2);
483 strcpy (gfc_option
.module_dir
, arg
);
485 gfc_add_include_path (gfc_option
.module_dir
, true, false);
487 strcat (gfc_option
.module_dir
, "/");
492 gfc_handle_fpe_trap_option (const char *arg
)
494 int result
, pos
= 0, n
;
495 static const char * const exception
[] = { "invalid", "denormal", "zero",
496 "overflow", "underflow",
498 static const int opt_exception
[] = { GFC_FPE_INVALID
, GFC_FPE_DENORMAL
,
499 GFC_FPE_ZERO
, GFC_FPE_OVERFLOW
,
500 GFC_FPE_UNDERFLOW
, GFC_FPE_PRECISION
,
508 while (arg
[pos
] && arg
[pos
] != ',')
512 for (n
= 0; exception
[n
] != NULL
; n
++)
514 if (exception
[n
] && strncmp (exception
[n
], arg
, pos
) == 0)
516 gfc_option
.fpe
|= opt_exception
[n
];
524 gfc_fatal_error ("Argument to -ffpe-trap is not valid: %s", arg
);
530 gfc_handle_coarray_option (const char *arg
)
532 if (strcmp (arg
, "none") == 0)
533 gfc_option
.coarray
= GFC_FCOARRAY_NONE
;
534 else if (strcmp (arg
, "single") == 0)
535 gfc_option
.coarray
= GFC_FCOARRAY_SINGLE
;
536 else if (strcmp (arg
, "lib") == 0)
537 gfc_option
.coarray
= GFC_FCOARRAY_LIB
;
539 gfc_fatal_error ("Argument to -fcoarray is not valid: %s", arg
);
544 gfc_handle_runtime_check_option (const char *arg
)
546 int result
, pos
= 0, n
;
547 static const char * const optname
[] = { "all", "bounds", "array-temps",
548 "recursion", "do", "pointer",
550 static const int optmask
[] = { GFC_RTCHECK_ALL
, GFC_RTCHECK_BOUNDS
,
551 GFC_RTCHECK_ARRAY_TEMPS
,
552 GFC_RTCHECK_RECURSION
, GFC_RTCHECK_DO
,
553 GFC_RTCHECK_POINTER
, GFC_RTCHECK_MEM
,
561 while (arg
[pos
] && arg
[pos
] != ',')
565 for (n
= 0; optname
[n
] != NULL
; n
++)
567 if (optname
[n
] && strncmp (optname
[n
], arg
, pos
) == 0)
569 gfc_option
.rtcheck
|= optmask
[n
];
577 gfc_fatal_error ("Argument to -fcheck is not valid: %s", arg
);
582 /* Handle command-line options. Returns 0 if unrecognized, 1 if
583 recognized and handled. */
586 gfc_handle_option (size_t scode
, const char *arg
, int value
,
587 int kind ATTRIBUTE_UNUSED
, location_t loc ATTRIBUTE_UNUSED
,
588 const struct cl_option_handlers
*handlers ATTRIBUTE_UNUSED
)
591 enum opt_code code
= (enum opt_code
) scode
;
593 if (gfc_cpp_handle_option (scode
, arg
, value
) == 1)
607 gfc_option
.warn_aliasing
= value
;
611 gfc_option
.warn_ampersand
= value
;
614 case OPT_Warray_temporaries
:
615 gfc_option
.warn_array_temp
= value
;
618 case OPT_Wcharacter_truncation
:
619 gfc_option
.warn_character_truncation
= value
;
622 case OPT_Wconversion
:
623 gfc_option
.gfc_warn_conversion
= value
;
626 case OPT_Wconversion_extra
:
627 gfc_option
.warn_conversion_extra
= value
;
630 case OPT_Wfunction_elimination
:
631 gfc_option
.warn_function_elimination
= value
;
634 case OPT_Wimplicit_interface
:
635 gfc_option
.warn_implicit_interface
= value
;
638 case OPT_Wimplicit_procedure
:
639 gfc_option
.warn_implicit_procedure
= value
;
642 case OPT_Wline_truncation
:
643 gfc_option
.warn_line_truncation
= value
;
646 case OPT_Wreturn_type
:
647 warn_return_type
= value
;
650 case OPT_Wsurprising
:
651 gfc_option
.warn_surprising
= value
;
655 gfc_option
.warn_tabs
= value
;
659 gfc_option
.warn_underflow
= value
;
662 case OPT_Wintrinsic_shadow
:
663 gfc_option
.warn_intrinsic_shadow
= value
;
666 case OPT_Walign_commons
:
667 gfc_option
.warn_align_commons
= value
;
670 case OPT_Wreal_q_constant
:
671 gfc_option
.warn_real_q_constant
= value
;
674 case OPT_Wunused_dummy_argument
:
675 gfc_option
.warn_unused_dummy_argument
= value
;
678 case OPT_fall_intrinsics
:
679 gfc_option
.flag_all_intrinsics
= 1;
683 gfc_option
.flag_automatic
= value
;
686 case OPT_fallow_leading_underscore
:
687 gfc_option
.flag_allow_leading_underscore
= value
;
691 gfc_option
.flag_backslash
= value
;
695 gfc_option
.flag_backtrace
= value
;
698 case OPT_fcheck_array_temporaries
:
699 gfc_option
.rtcheck
|= GFC_RTCHECK_ARRAY_TEMPS
;
702 case OPT_fcray_pointer
:
703 gfc_option
.flag_cray_pointer
= value
;
707 gfc_option
.flag_f2c
= value
;
711 gfc_option
.flag_dollar_ok
= value
;
714 case OPT_fexternal_blas
:
715 gfc_option
.flag_external_blas
= value
;
718 case OPT_fblas_matmul_limit_
:
719 gfc_option
.blas_matmul_limit
= value
;
722 case OPT_fd_lines_as_code
:
723 gfc_option
.flag_d_lines
= 1;
726 case OPT_fd_lines_as_comments
:
727 gfc_option
.flag_d_lines
= 0;
730 case OPT_fdump_fortran_original
:
731 case OPT_fdump_parse_tree
:
732 gfc_option
.dump_fortran_original
= value
;
735 case OPT_fdump_fortran_optimized
:
736 gfc_option
.dump_fortran_optimized
= value
;
739 case OPT_ffixed_form
:
740 gfc_option
.source_form
= FORM_FIXED
;
743 case OPT_ffixed_line_length_none
:
744 gfc_option
.fixed_line_length
= 0;
747 case OPT_ffixed_line_length_
:
748 if (value
!= 0 && value
< 7)
749 gfc_fatal_error ("Fixed line length must be at least seven.");
750 gfc_option
.fixed_line_length
= value
;
754 gfc_option
.source_form
= FORM_FREE
;
758 gfc_option
.gfc_flag_openmp
= value
;
761 case OPT_ffree_line_length_none
:
762 gfc_option
.free_line_length
= 0;
765 case OPT_ffree_line_length_
:
766 if (value
!= 0 && value
< 4)
767 gfc_fatal_error ("Free line length must be at least three.");
768 gfc_option
.free_line_length
= value
;
771 case OPT_funderscoring
:
772 gfc_option
.flag_underscoring
= value
;
775 case OPT_fwhole_file
:
776 gfc_option
.flag_whole_file
= value
;
779 case OPT_fsecond_underscore
:
780 gfc_option
.flag_second_underscore
= value
;
783 case OPT_static_libgfortran
:
784 #ifndef HAVE_LD_STATIC_DYNAMIC
785 gfc_fatal_error ("-static-libgfortran is not supported in this "
790 case OPT_fimplicit_none
:
791 gfc_option
.flag_implicit_none
= value
;
794 case OPT_fintrinsic_modules_path
:
795 gfc_add_include_path (arg
, false, false);
796 gfc_add_intrinsic_modules_path (arg
);
799 case OPT_fmax_array_constructor_
:
800 gfc_option
.flag_max_array_constructor
= value
> 65535 ? value
: 65535;
803 case OPT_fmax_stack_var_size_
:
804 gfc_option
.flag_max_stack_var_size
= value
;
807 case OPT_fstack_arrays
:
808 gfc_option
.flag_stack_arrays
= value
;
811 case OPT_fmodule_private
:
812 gfc_option
.flag_module_private
= value
;
815 case OPT_frange_check
:
816 gfc_option
.flag_range_check
= value
;
819 case OPT_fpack_derived
:
820 gfc_option
.flag_pack_derived
= value
;
823 case OPT_frepack_arrays
:
824 gfc_option
.flag_repack_arrays
= value
;
827 case OPT_fpreprocessed
:
828 gfc_option
.flag_preprocessed
= value
;
831 case OPT_fmax_identifier_length_
:
832 if (value
> GFC_MAX_SYMBOL_LEN
)
833 gfc_fatal_error ("Maximum supported identifier length is %d",
835 gfc_option
.max_identifier_length
= value
;
838 case OPT_fdefault_integer_8
:
839 gfc_option
.flag_default_integer
= value
;
842 case OPT_fdefault_real_8
:
843 gfc_option
.flag_default_real
= value
;
846 case OPT_fdefault_double_8
:
847 gfc_option
.flag_default_double
= value
;
850 case OPT_finit_local_zero
:
851 gfc_option
.flag_init_integer
= GFC_INIT_INTEGER_ON
;
852 gfc_option
.flag_init_integer_value
= 0;
853 gfc_option
.flag_init_real
= GFC_INIT_REAL_ZERO
;
854 gfc_option
.flag_init_logical
= GFC_INIT_LOGICAL_FALSE
;
855 gfc_option
.flag_init_character
= GFC_INIT_CHARACTER_ON
;
856 gfc_option
.flag_init_character_value
= (char)0;
859 case OPT_finit_logical_
:
860 if (!strcasecmp (arg
, "false"))
861 gfc_option
.flag_init_logical
= GFC_INIT_LOGICAL_FALSE
;
862 else if (!strcasecmp (arg
, "true"))
863 gfc_option
.flag_init_logical
= GFC_INIT_LOGICAL_TRUE
;
865 gfc_fatal_error ("Unrecognized option to -finit-logical: %s",
869 case OPT_finit_real_
:
870 if (!strcasecmp (arg
, "zero"))
871 gfc_option
.flag_init_real
= GFC_INIT_REAL_ZERO
;
872 else if (!strcasecmp (arg
, "nan"))
873 gfc_option
.flag_init_real
= GFC_INIT_REAL_NAN
;
874 else if (!strcasecmp (arg
, "snan"))
875 gfc_option
.flag_init_real
= GFC_INIT_REAL_SNAN
;
876 else if (!strcasecmp (arg
, "inf"))
877 gfc_option
.flag_init_real
= GFC_INIT_REAL_INF
;
878 else if (!strcasecmp (arg
, "-inf"))
879 gfc_option
.flag_init_real
= GFC_INIT_REAL_NEG_INF
;
881 gfc_fatal_error ("Unrecognized option to -finit-real: %s",
885 case OPT_finit_integer_
:
886 gfc_option
.flag_init_integer
= GFC_INIT_INTEGER_ON
;
887 gfc_option
.flag_init_integer_value
= atoi (arg
);
890 case OPT_finit_character_
:
891 if (value
>= 0 && value
<= 127)
893 gfc_option
.flag_init_character
= GFC_INIT_CHARACTER_ON
;
894 gfc_option
.flag_init_character_value
= (char)value
;
897 gfc_fatal_error ("The value of n in -finit-character=n must be "
898 "between 0 and 127");
902 gfc_add_include_path (arg
, true, false);
906 gfc_handle_module_path_options (arg
);
910 gfc_option
.flag_sign_zero
= value
;
914 gfc_handle_fpe_trap_option (arg
);
918 gfc_option
.allow_std
= GFC_STD_F95_OBS
| GFC_STD_F95
| GFC_STD_F77
920 gfc_option
.warn_std
= GFC_STD_F95_OBS
;
921 gfc_option
.max_continue_fixed
= 19;
922 gfc_option
.max_continue_free
= 39;
923 gfc_option
.max_identifier_length
= 31;
924 gfc_option
.warn_ampersand
= 1;
925 gfc_option
.warn_tabs
= 0;
929 gfc_option
.allow_std
= GFC_STD_F95_OBS
| GFC_STD_F77
930 | GFC_STD_F2003
| GFC_STD_F95
| GFC_STD_F2008_OBS
;
931 gfc_option
.warn_std
= GFC_STD_F95_OBS
;
932 gfc_option
.max_identifier_length
= 63;
933 gfc_option
.warn_ampersand
= 1;
934 gfc_option
.warn_tabs
= 0;
938 gfc_option
.allow_std
= GFC_STD_F95_OBS
| GFC_STD_F77
939 | GFC_STD_F2003
| GFC_STD_F95
| GFC_STD_F2008
| GFC_STD_F2008_OBS
;
940 gfc_option
.warn_std
= GFC_STD_F95_OBS
| GFC_STD_F2008_OBS
;
941 gfc_option
.max_identifier_length
= 63;
942 gfc_option
.warn_ampersand
= 1;
943 gfc_option
.warn_tabs
= 0;
946 case OPT_std_f2008tr
:
947 gfc_option
.allow_std
= GFC_STD_F95_OBS
| GFC_STD_F77
948 | GFC_STD_F2003
| GFC_STD_F95
| GFC_STD_F2008
| GFC_STD_F2008_OBS
950 gfc_option
.warn_std
= GFC_STD_F95_OBS
| GFC_STD_F2008_OBS
;
951 gfc_option
.max_identifier_length
= 63;
952 gfc_option
.warn_ampersand
= 1;
953 gfc_option
.warn_tabs
= 0;
957 set_default_std_flags ();
961 set_default_std_flags ();
962 gfc_option
.warn_std
= 0;
965 case OPT_Wintrinsics_std
:
966 gfc_option
.warn_intrinsics_std
= value
;
969 case OPT_fshort_enums
:
970 /* Handled in language-independent code. */
973 case OPT_fconvert_little_endian
:
974 gfc_option
.convert
= GFC_CONVERT_LITTLE
;
977 case OPT_fconvert_big_endian
:
978 gfc_option
.convert
= GFC_CONVERT_BIG
;
981 case OPT_fconvert_native
:
982 gfc_option
.convert
= GFC_CONVERT_NATIVE
;
985 case OPT_fconvert_swap
:
986 gfc_option
.convert
= GFC_CONVERT_SWAP
;
989 case OPT_frecord_marker_4
:
990 gfc_option
.record_marker
= 4;
993 case OPT_frecord_marker_8
:
994 gfc_option
.record_marker
= 8;
997 case OPT_fmax_subrecord_length_
:
998 if (value
> MAX_SUBRECORD_LENGTH
)
999 gfc_fatal_error ("Maximum subrecord length cannot exceed %d",
1000 MAX_SUBRECORD_LENGTH
);
1002 gfc_option
.max_subrecord_length
= value
;
1005 case OPT_frecursive
:
1006 gfc_option
.flag_recursive
= value
;
1009 case OPT_falign_commons
:
1010 gfc_option
.flag_align_commons
= value
;
1013 case OPT_faggressive_function_elimination
:
1014 gfc_option
.flag_aggressive_function_elimination
= value
;
1017 case OPT_ffrontend_optimize
:
1018 gfc_option
.flag_frontend_optimize
= value
;
1021 case OPT_fprotect_parens
:
1022 gfc_option
.flag_protect_parens
= value
;
1025 case OPT_frealloc_lhs
:
1026 gfc_option
.flag_realloc_lhs
= value
;
1030 gfc_handle_runtime_check_option (arg
);
1034 gfc_handle_coarray_option (arg
);
1042 /* Return a string with the options passed to the compiler; used for
1043 Fortran's compiler_options() intrinsic. */
1046 gfc_get_option_string (void)
1052 /* Determine required string length. */
1055 for (j
= 1; j
< save_decoded_options_count
; j
++)
1057 switch (save_decoded_options
[j
].opt_index
)
1066 case OPT_fintrinsic_modules_path
:
1070 /* Ignore file names. */
1071 if (save_decoded_options
[j
].orig_option_with_args_text
[0] == '-')
1073 + strlen (save_decoded_options
[j
].orig_option_with_args_text
);
1077 result
= XCNEWVEC (char, len
);
1080 for (j
= 1; j
< save_decoded_options_count
; j
++)
1082 switch (save_decoded_options
[j
].opt_index
)
1091 case OPT_fintrinsic_modules_path
:
1096 /* Use "-cpp" rather than "-cpp=<temporary file>". */
1101 /* Ignore file names. */
1102 if (save_decoded_options
[j
].orig_option_with_args_text
[0] != '-')
1105 len
= strlen (save_decoded_options
[j
].orig_option_with_args_text
);
1108 memcpy (&result
[pos
], save_decoded_options
[j
].orig_option_with_args_text
, len
);
1110 result
[pos
++] = ' ';
1113 result
[--pos
] = '\0';