1 /* C/ObjC/C++ command line option handling.
2 Copyright (C) 2002-2015 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 3, 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 COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
23 #include "coretypes.h"
31 #include "langhooks.h"
32 #include "diagnostic.h"
33 #include "tree-diagnostic.h" /* for virt_loc_aware_diagnostic_finalizer */
35 #include "cppdefault.h"
37 #include "debug.h" /* For debug_hooks. */
39 #include "plugin.h" /* For PLUGIN_INCLUDE_FILE event. */
42 #include "tm_p.h" /* For C_COMMON_OVERRIDE_OPTIONS. */
45 #ifndef DOLLARS_IN_IDENTIFIERS
46 # define DOLLARS_IN_IDENTIFIERS true
49 #ifndef TARGET_SYSTEM_ROOT
50 # define TARGET_SYSTEM_ROOT NULL
54 #define TARGET_OPTF(ARG)
58 cpp_options
*cpp_opts
;
61 static const char *this_input_filename
;
63 /* Filename and stream for preprocessed output. */
64 static const char *out_fname
;
65 static FILE *out_stream
;
67 /* Append dependencies to deps_file. */
68 static bool deps_append
;
70 /* If dependency switches (-MF etc.) have been given. */
71 static bool deps_seen
;
76 /* Dependency output file. */
77 static const char *deps_file
;
79 /* The prefix given by -iprefix, if any. */
80 static const char *iprefix
;
82 /* The multilib directory given by -imultilib, if any. */
83 static const char *imultilib
;
85 /* The system root, if any. Overridden by -isysroot. */
86 static const char *sysroot
= TARGET_SYSTEM_ROOT
;
88 /* Zero disables all standard directories for headers. */
89 static bool std_inc
= true;
91 /* Zero disables the C++-specific standard directories for headers. */
92 static bool std_cxx_inc
= true;
94 /* If the quote chain has been split by -I-. */
95 static bool quote_chain_split
;
97 /* Number of deferred options. */
98 static size_t deferred_count
;
100 /* Number of deferred options scanned for -include. */
101 static size_t include_cursor
;
103 /* Dump files/flags to use during parsing. */
104 static FILE *original_dump_file
= NULL
;
105 static int original_dump_flags
;
106 static FILE *class_dump_file
= NULL
;
107 static int class_dump_flags
;
109 /* Whether any standard preincluded header has been preincluded. */
110 static bool done_preinclude
;
112 static void handle_OPT_d (const char *);
113 static void set_std_cxx98 (int);
114 static void set_std_cxx11 (int);
115 static void set_std_cxx14 (int);
116 static void set_std_cxx1z (int);
117 static void set_std_c89 (int, int);
118 static void set_std_c99 (int);
119 static void set_std_c11 (int);
120 static void check_deps_environment_vars (void);
121 static void handle_deferred_opts (void);
122 static void sanitize_cpp_opts (void);
123 static void add_prefixed_path (const char *, size_t);
124 static void push_command_line_include (void);
125 static void cb_file_change (cpp_reader
*, const line_map_ordinary
*);
126 static void cb_dir_change (cpp_reader
*, const char *);
127 static void c_finish_options (void);
129 #ifndef STDC_0_IN_SYSTEM_HEADERS
130 #define STDC_0_IN_SYSTEM_HEADERS 0
133 /* Holds switches parsed by c_common_handle_option (), but whose
134 handling is deferred to c_common_post_options (). */
135 static void defer_opt (enum opt_code
, const char *);
136 static struct deferred_opt
143 extern const unsigned int
144 c_family_lang_mask
= (CL_C
| CL_CXX
| CL_ObjC
| CL_ObjCXX
);
146 /* Defer option CODE with argument ARG. */
148 defer_opt (enum opt_code code
, const char *arg
)
150 deferred_opts
[deferred_count
].code
= code
;
151 deferred_opts
[deferred_count
].arg
= arg
;
155 /* Return language mask for option parsing. */
157 c_common_option_lang_mask (void)
159 static const unsigned int lang_flags
[] = {CL_C
, CL_ObjC
, CL_CXX
, CL_ObjCXX
};
161 return lang_flags
[c_language
];
164 /* Diagnostic finalizer for C/C++/Objective-C/Objective-C++. */
166 c_diagnostic_finalizer (diagnostic_context
*context
,
167 diagnostic_info
*diagnostic
)
169 diagnostic_show_locus (context
, diagnostic
);
170 /* By default print macro expansion contexts in the diagnostic
171 finalizer -- for tokens resulting from macro expansion. */
172 virt_loc_aware_diagnostic_finalizer (context
, diagnostic
);
173 pp_destroy_prefix (context
->printer
);
174 pp_newline_and_flush (context
->printer
);
177 /* Common default settings for diagnostics. */
179 c_common_diagnostics_set_defaults (diagnostic_context
*context
)
181 diagnostic_finalizer (context
) = c_diagnostic_finalizer
;
182 context
->opt_permissive
= OPT_fpermissive
;
185 /* Whether options from all C-family languages should be accepted
187 static bool accept_all_c_family_options
= false;
189 /* Return whether to complain about a wrong-language option. */
191 c_common_complain_wrong_lang_p (const struct cl_option
*option
)
193 if (accept_all_c_family_options
194 && (option
->flags
& c_family_lang_mask
))
200 /* Initialize options structure OPTS. */
202 c_common_init_options_struct (struct gcc_options
*opts
)
204 opts
->x_flag_exceptions
= c_dialect_cxx ();
205 opts
->x_warn_pointer_arith
= c_dialect_cxx ();
206 opts
->x_warn_write_strings
= c_dialect_cxx ();
207 opts
->x_flag_warn_unused_result
= true;
209 /* By default, C99-like requirements for complex multiply and divide. */
210 opts
->x_flag_complex_method
= 2;
213 /* Common initialization before calling option handlers. */
215 c_common_init_options (unsigned int decoded_options_count
,
216 struct cl_decoded_option
*decoded_options
)
219 struct cpp_callbacks
*cb
;
221 parse_in
= cpp_create_reader (c_dialect_cxx () ? CLK_GNUCXX
: CLK_GNUC89
,
222 ident_hash
, line_table
);
223 cb
= cpp_get_callbacks (parse_in
);
224 cb
->error
= c_cpp_error
;
226 cpp_opts
= cpp_get_options (parse_in
);
227 cpp_opts
->dollars_in_ident
= DOLLARS_IN_IDENTIFIERS
;
228 cpp_opts
->objc
= c_dialect_objc ();
230 /* Reset to avoid warnings on internal definitions. We set it just
231 before passing on command-line options to cpplib. */
232 cpp_opts
->warn_dollars
= 0;
234 deferred_opts
= XNEWVEC (struct deferred_opt
, decoded_options_count
);
236 if (c_language
== clk_c
)
238 /* The default for C is gnu11. */
239 set_std_c11 (false /* ISO */);
241 /* If preprocessing assembly language, accept any of the C-family
242 front end options since the driver may pass them through. */
243 for (i
= 1; i
< decoded_options_count
; i
++)
244 if (decoded_options
[i
].opt_index
== OPT_lang_asm
)
246 accept_all_c_family_options
= true;
252 /* Handle switch SCODE with argument ARG. VALUE is true, unless no-
253 form of an -f or -W option was given. Returns false if the switch was
254 invalid, true if valid. Use HANDLERS in recursive handle_option calls. */
256 c_common_handle_option (size_t scode
, const char *arg
, int value
,
257 int kind
, location_t loc
,
258 const struct cl_option_handlers
*handlers
)
260 const struct cl_option
*option
= &cl_options
[scode
];
261 enum opt_code code
= (enum opt_code
) scode
;
264 /* Prevent resetting the language standard to a C dialect when the driver
265 has already determined that we're looking at assembler input. */
266 bool preprocessing_asm_p
= (cpp_get_options (parse_in
)->lang
== CLK_ASM
);
271 if (cl_options
[code
].flags
& c_family_lang_mask
)
273 if ((option
->flags
& CL_TARGET
)
274 && ! targetcm
.handle_c_option (scode
, arg
, value
))
281 case OPT__output_pch_
:
286 defer_opt (code
, arg
);
290 cpp_opts
->discard_comments
= 0;
294 cpp_opts
->discard_comments
= 0;
295 cpp_opts
->discard_comments_in_macro_exp
= 0;
299 defer_opt (code
, arg
);
303 cpp_opts
->print_include_names
= 1;
307 TARGET_OPTF (xstrdup (arg
));
311 if (strcmp (arg
, "-"))
312 add_path (xstrdup (arg
), BRACKET
, 0, true);
315 if (quote_chain_split
)
316 error ("-I- specified twice");
317 quote_chain_split
= true;
318 split_quote_chain ();
319 inform (input_location
, "obsolete option -I- used, please use -iquote instead");
325 /* When doing dependencies with -M or -MM, suppress normal
326 preprocessed output, but still do -dM etc. as software
327 depends on this. Preprocessed output does occur if -MD, -MMD
328 or environment var dependency generation is used. */
329 cpp_opts
->deps
.style
= (code
== OPT_M
? DEPS_SYSTEM
: DEPS_USER
);
335 cpp_opts
->deps
.style
= (code
== OPT_MD
? DEPS_SYSTEM
: DEPS_USER
);
336 cpp_opts
->deps
.need_preprocessor_output
= true;
347 cpp_opts
->deps
.missing_files
= true;
352 cpp_opts
->deps
.phony_targets
= true;
358 defer_opt (code
, arg
);
362 flag_no_line_commands
= 1;
366 defer_opt (code
, arg
);
370 /* ??? Don't add new options here. Use LangEnabledBy in c.opt. */
372 cpp_opts
->warn_num_sign_change
= value
;
375 case OPT_Wunknown_pragmas
:
376 /* Set to greater than 1, so that even unknown pragmas in
377 system headers will be warned about. */
378 /* ??? There is no way to handle this automatically for now. */
379 warn_unknown_pragmas
= value
* 2;
383 if (!c_dialect_cxx ())
384 set_std_c89 (false, true);
386 set_std_cxx98 (true);
397 warning (0, "%<-Wabi=1%> is not supported, using =2");
400 flag_abi_compat_version
= value
;
403 case OPT_fcanonical_system_headers
:
404 cpp_opts
->canonical_system_headers
= value
;
407 case OPT_fcond_mismatch
:
408 if (!c_dialect_cxx ())
410 flag_cond_mismatch
= value
;
413 warning (0, "switch %qs is no longer supported", option
->opt_text
);
420 disable_builtin_function (arg
);
423 case OPT_fdirectives_only
:
424 cpp_opts
->directives_only
= value
;
427 case OPT_fdollars_in_identifiers
:
428 cpp_opts
->dollars_in_ident
= value
;
431 case OPT_ffreestanding
:
433 /* Fall through.... */
436 flag_no_builtin
= !value
;
439 case OPT_fconstant_string_class_
:
440 constant_string_class_name
= arg
;
443 case OPT_fextended_identifiers
:
444 cpp_opts
->extended_identifiers
= value
;
447 case OPT_foperator_names
:
448 cpp_opts
->operator_names
= value
;
452 cpp_opts
->restore_pch_deps
= value
;
455 case OPT_fpch_preprocess
:
456 flag_pch_preprocess
= value
;
459 case OPT_fpermissive
:
460 flag_permissive
= value
;
461 global_dc
->permissive
= value
;
464 case OPT_fpreprocessed
:
465 cpp_opts
->preprocessed
= value
;
472 case OPT_ftrack_macro_expansion
:
477 case OPT_ftrack_macro_expansion_
:
478 if (arg
&& *arg
!= '\0')
479 cpp_opts
->track_macro_expansion
= value
;
481 cpp_opts
->track_macro_expansion
= 2;
485 flag_use_repository
= value
;
487 flag_implicit_templates
= 0;
491 /* It is documented that we silently ignore silly values. */
492 if (value
>= 1 && value
<= 100)
493 cpp_opts
->tabstop
= value
;
496 case OPT_fexec_charset_
:
497 cpp_opts
->narrow_charset
= arg
;
500 case OPT_fwide_exec_charset_
:
501 cpp_opts
->wide_charset
= arg
;
504 case OPT_finput_charset_
:
505 cpp_opts
->input_charset
= arg
;
508 case OPT_ftemplate_depth_
:
509 max_tinst_depth
= value
;
512 case OPT_fvisibility_inlines_hidden
:
513 visibility_options
.inlines_hidden
= value
;
516 case OPT_femit_struct_debug_baseonly
:
517 set_struct_debug_option (&global_options
, loc
, "base");
520 case OPT_femit_struct_debug_reduced
:
521 set_struct_debug_option (&global_options
, loc
,
522 "dir:ord:sys,dir:gen:any,ind:base");
525 case OPT_femit_struct_debug_detailed_
:
526 set_struct_debug_option (&global_options
, loc
, arg
);
529 case OPT_fext_numeric_literals
:
530 cpp_opts
->ext_numeric_literals
= value
;
534 add_path (xstrdup (arg
), AFTER
, 0, true);
539 defer_opt (code
, arg
);
551 add_path (xstrdup (arg
), QUOTE
, 0, true);
559 add_path (xstrdup (arg
), SYSTEM
, 0, true);
562 case OPT_iwithprefix
:
563 add_prefixed_path (arg
, SYSTEM
);
566 case OPT_iwithprefixbefore
:
567 add_prefixed_path (arg
, BRACKET
);
571 cpp_set_lang (parse_in
, CLK_ASM
);
572 cpp_opts
->dollars_in_ident
= false;
587 error ("output filename specified twice");
590 case OPT_print_objc_runtime_info
:
591 print_struct_values
= 1;
599 case OPT_std_gnu__98
:
600 if (!preprocessing_asm_p
)
601 set_std_cxx98 (code
== OPT_std_c__98
/* ISO */);
605 case OPT_std_gnu__11
:
606 if (!preprocessing_asm_p
)
608 set_std_cxx11 (code
== OPT_std_c__11
/* ISO */);
609 if (code
== OPT_std_c__11
)
610 cpp_opts
->ext_numeric_literals
= 0;
615 case OPT_std_gnu__14
:
616 if (!preprocessing_asm_p
)
618 set_std_cxx14 (code
== OPT_std_c__14
/* ISO */);
619 if (code
== OPT_std_c__14
)
620 cpp_opts
->ext_numeric_literals
= 0;
625 case OPT_std_gnu__1z
:
626 if (!preprocessing_asm_p
)
628 set_std_cxx1z (code
== OPT_std_c__1z
/* ISO */);
629 if (code
== OPT_std_c__1z
)
630 cpp_opts
->ext_numeric_literals
= 0;
635 case OPT_std_iso9899_199409
:
636 if (!preprocessing_asm_p
)
637 set_std_c89 (code
== OPT_std_iso9899_199409
/* c94 */, true /* ISO */);
641 if (!preprocessing_asm_p
)
642 set_std_c89 (false /* c94 */, false /* ISO */);
646 if (!preprocessing_asm_p
)
647 set_std_c99 (true /* ISO */);
651 if (!preprocessing_asm_p
)
652 set_std_c99 (false /* ISO */);
656 if (!preprocessing_asm_p
)
657 set_std_c11 (true /* ISO */);
661 if (!preprocessing_asm_p
)
662 set_std_c11 (false /* ISO */);
666 cpp_opts
->trigraphs
= 1;
669 case OPT_traditional_cpp
:
670 cpp_opts
->traditional
= 1;
681 C_handle_option_auto (&global_options
, &global_options_set
,
683 c_family_lang_mask
, kind
,
684 loc
, handlers
, global_dc
);
688 ObjC_handle_option_auto (&global_options
, &global_options_set
,
690 c_family_lang_mask
, kind
,
691 loc
, handlers
, global_dc
);
695 CXX_handle_option_auto (&global_options
, &global_options_set
,
697 c_family_lang_mask
, kind
,
698 loc
, handlers
, global_dc
);
702 ObjCXX_handle_option_auto (&global_options
, &global_options_set
,
704 c_family_lang_mask
, kind
,
705 loc
, handlers
, global_dc
);
712 cpp_handle_option_auto (&global_options
, scode
, cpp_opts
);
716 /* Default implementation of TARGET_HANDLE_C_OPTION. */
719 default_handle_c_option (size_t code ATTRIBUTE_UNUSED
,
720 const char *arg ATTRIBUTE_UNUSED
,
721 int value ATTRIBUTE_UNUSED
)
726 /* Post-switch processing. */
728 c_common_post_options (const char **pfilename
)
730 struct cpp_callbacks
*cb
;
732 /* Canonicalize the input and output filenames. */
733 if (in_fnames
== NULL
)
735 in_fnames
= XNEWVEC (const char *, 1);
738 else if (strcmp (in_fnames
[0], "-") == 0)
741 if (out_fname
== NULL
|| !strcmp (out_fname
, "-"))
744 if (cpp_opts
->deps
.style
== DEPS_NONE
)
745 check_deps_environment_vars ();
747 handle_deferred_opts ();
749 sanitize_cpp_opts ();
751 register_include_chains (parse_in
, sysroot
, iprefix
, imultilib
,
752 std_inc
, std_cxx_inc
&& c_dialect_cxx (), verbose
);
754 #ifdef C_COMMON_OVERRIDE_OPTIONS
755 /* Some machines may reject certain combinations of C
756 language-specific options. */
757 C_COMMON_OVERRIDE_OPTIONS
;
760 /* Excess precision other than "fast" requires front-end
762 if (c_dialect_cxx ())
764 if (flag_excess_precision_cmdline
== EXCESS_PRECISION_STANDARD
765 && TARGET_FLT_EVAL_METHOD_NON_DEFAULT
)
766 sorry ("-fexcess-precision=standard for C++");
767 flag_excess_precision_cmdline
= EXCESS_PRECISION_FAST
;
769 else if (flag_excess_precision_cmdline
== EXCESS_PRECISION_DEFAULT
)
770 flag_excess_precision_cmdline
= (flag_iso
771 ? EXCESS_PRECISION_STANDARD
772 : EXCESS_PRECISION_FAST
);
774 /* ISO C restricts floating-point expression contraction to within
775 source-language expressions (-ffp-contract=on, currently an alias
776 for -ffp-contract=off). */
779 && (global_options_set
.x_flag_fp_contract_mode
780 == (enum fp_contract_mode
) 0)
781 && flag_unsafe_math_optimizations
== 0)
782 flag_fp_contract_mode
= FP_CONTRACT_OFF
;
784 /* By default we use C99 inline semantics in GNU99 or C99 mode. C99
785 inline semantics are not supported in GNU89 or C89 mode. */
786 if (flag_gnu89_inline
== -1)
787 flag_gnu89_inline
= !flag_isoc99
;
788 else if (!flag_gnu89_inline
&& !flag_isoc99
)
789 error ("-fno-gnu89-inline is only supported in GNU99 or C99 mode");
791 /* Default to ObjC sjlj exception handling if NeXT runtime. */
792 if (flag_objc_sjlj_exceptions
< 0)
793 flag_objc_sjlj_exceptions
= flag_next_runtime
;
794 if (flag_objc_exceptions
&& !flag_objc_sjlj_exceptions
)
797 /* If -ffreestanding, -fno-hosted or -fno-builtin then disable
798 pattern recognition. */
799 if (!global_options_set
.x_flag_tree_loop_distribute_patterns
801 flag_tree_loop_distribute_patterns
= 0;
803 /* Set C++ standard to C++14 if not specified on the command line. */
804 if (c_dialect_cxx () && cxx_dialect
== cxx_unset
)
805 set_std_cxx14 (/*ISO*/false);
807 /* -Woverlength-strings is off by default, but is enabled by -Wpedantic.
808 It is never enabled in C++, as the minimum limit is not normative
810 if (c_dialect_cxx ())
811 warn_overlength_strings
= 0;
813 /* Wmain is enabled by default in C++ but not in C. */
814 /* Wmain is disabled by default for -ffreestanding (!flag_hosted),
815 even if -Wall or -Wpedantic was given (warn_main will be 2 if set
816 by -Wall, 1 if set by -Wmain). */
818 warn_main
= (c_dialect_cxx () && flag_hosted
) ? 1 : 0;
819 else if (warn_main
== 2)
820 warn_main
= flag_hosted
? 1 : 0;
822 /* In C, -Wall and -Wc++-compat enable -Wenum-compare; if it has not
823 yet been set, it is disabled by default. In C++, it is enabled
825 if (warn_enum_compare
== -1)
826 warn_enum_compare
= c_dialect_cxx () ? 1 : 0;
828 /* -Wpacked-bitfield-compat is on by default for the C languages. The
829 warning is issued in stor-layout.c which is not part of the front-end so
830 we need to selectively turn it on here. */
831 if (warn_packed_bitfield_compat
== -1)
832 warn_packed_bitfield_compat
= 1;
834 /* Special format checking options don't work without -Wformat; warn if
838 warning (OPT_Wformat_y2k
,
839 "-Wformat-y2k ignored without -Wformat");
840 warning (OPT_Wformat_extra_args
,
841 "-Wformat-extra-args ignored without -Wformat");
842 warning (OPT_Wformat_zero_length
,
843 "-Wformat-zero-length ignored without -Wformat");
844 warning (OPT_Wformat_nonliteral
,
845 "-Wformat-nonliteral ignored without -Wformat");
846 warning (OPT_Wformat_contains_nul
,
847 "-Wformat-contains-nul ignored without -Wformat");
848 warning (OPT_Wformat_security
,
849 "-Wformat-security ignored without -Wformat");
852 /* -Wimplicit-function-declaration is enabled by default for C99. */
853 if (warn_implicit_function_declaration
== -1)
854 warn_implicit_function_declaration
= flag_isoc99
;
856 /* -Wimplicit-int is enabled by default for C99. */
857 if (warn_implicit_int
== -1)
858 warn_implicit_int
= flag_isoc99
;
860 /* -Wshift-overflow is enabled by default in C99 and C++11 modes. */
861 if (warn_shift_overflow
== -1)
862 warn_shift_overflow
= cxx_dialect
>= cxx11
|| flag_isoc99
;
864 /* -Wshift-negative-value is enabled by -Wextra in C99 and C++11 modes. */
865 if (warn_shift_negative_value
== -1)
866 warn_shift_negative_value
= (extra_warnings
867 && (cxx_dialect
>= cxx11
|| flag_isoc99
));
869 /* Declone C++ 'structors if -Os. */
870 if (flag_declone_ctor_dtor
== -1)
871 flag_declone_ctor_dtor
= optimize_size
;
873 if (flag_abi_compat_version
== 1)
875 warning (0, "%<-fabi-compat-version=1%> is not supported, using =2");
876 flag_abi_compat_version
= 2;
878 else if (flag_abi_compat_version
== -1)
880 /* Generate compatibility aliases for ABI v2 (3.4-4.9) by default. */
881 flag_abi_compat_version
= (flag_abi_version
== 0 ? 2 : 0);
883 /* But don't warn about backward compatibility unless explicitly
884 requested with -Wabi=n. */
885 if (flag_abi_version
== 0)
889 /* Change flag_abi_version to be the actual current ABI level for the
890 benefit of c_cpp_builtins. */
891 if (flag_abi_version
== 0)
892 flag_abi_version
= 10;
894 if (cxx_dialect
>= cxx11
)
896 /* If we're allowing C++0x constructs, don't warn about C++98
897 identifiers which are keywords in C++0x. */
898 warn_cxx11_compat
= 0;
899 cpp_opts
->cpp_warn_cxx11_compat
= 0;
901 if (warn_narrowing
== -1)
904 else if (warn_narrowing
== -1)
907 /* Global sized deallocation is new in C++14. */
908 if (flag_sized_deallocation
== -1)
909 flag_sized_deallocation
= (cxx_dialect
>= cxx14
);
911 if (flag_extern_tls_init
)
913 #if !defined (ASM_OUTPUT_DEF) || !SUPPORTS_WEAK
914 /* Lazy TLS initialization for a variable in another TU requires
915 alias and weak reference support. */
916 if (flag_extern_tls_init
> 0)
917 sorry ("external TLS initialization functions not supported "
919 flag_extern_tls_init
= 0;
921 flag_extern_tls_init
= 1;
925 if (flag_preprocess_only
)
927 /* Open the output now. We must do so even if flag_no_output is
928 on, because there may be other output than from the actual
929 preprocessing (e.g. from -dM). */
930 if (out_fname
[0] == '\0')
933 out_stream
= fopen (out_fname
, "w");
935 if (out_stream
== NULL
)
937 fatal_error (input_location
, "opening output file %s: %m", out_fname
);
941 if (num_in_fnames
> 1)
942 error ("too many filenames given. Type %s --help for usage",
945 init_pp_output (out_stream
);
951 /* When writing a PCH file, avoid reading some other PCH file,
952 because the default address space slot then can't be used
953 for the output PCH file. */
956 c_common_no_more_pch ();
957 /* Only -g0 and -gdwarf* are supported with PCH, for other
958 debug formats we warn here and refuse to load any PCH files. */
959 if (write_symbols
!= NO_DEBUG
&& write_symbols
!= DWARF2_DEBUG
)
960 warning (OPT_Wdeprecated
,
961 "the \"%s\" debug format cannot be used with "
962 "pre-compiled headers", debug_type_names
[write_symbols
]);
964 else if (write_symbols
!= NO_DEBUG
&& write_symbols
!= DWARF2_DEBUG
)
965 c_common_no_more_pch ();
967 /* Yuk. WTF is this? I do know ObjC relies on it somewhere. */
968 input_location
= UNKNOWN_LOCATION
;
971 cb
= cpp_get_callbacks (parse_in
);
972 cb
->file_change
= cb_file_change
;
973 cb
->dir_change
= cb_dir_change
;
974 cpp_post_options (parse_in
);
975 init_global_opts_from_cpp (&global_options
, cpp_get_options (parse_in
));
977 input_location
= UNKNOWN_LOCATION
;
979 *pfilename
= this_input_filename
980 = cpp_read_main_file (parse_in
, in_fnames
[0]);
981 /* Don't do any compilation or preprocessing if there is no input file. */
982 if (this_input_filename
== NULL
)
988 if (flag_working_directory
989 && flag_preprocess_only
&& !flag_no_line_commands
)
990 pp_dir_change (parse_in
, get_src_pwd ());
992 /* Disable LTO output when outputting a precompiled header. */
993 if (pch_file
&& flag_lto
)
996 flag_generate_lto
= 0;
999 return flag_preprocess_only
;
1002 /* Front end initialization common to C, ObjC and C++. */
1004 c_common_init (void)
1006 /* Set up preprocessor arithmetic. Must be done after call to
1007 c_common_nodes_and_builtins for type nodes to be good. */
1008 cpp_opts
->precision
= TYPE_PRECISION (intmax_type_node
);
1009 cpp_opts
->char_precision
= TYPE_PRECISION (char_type_node
);
1010 cpp_opts
->int_precision
= TYPE_PRECISION (integer_type_node
);
1011 cpp_opts
->wchar_precision
= TYPE_PRECISION (wchar_type_node
);
1012 cpp_opts
->unsigned_wchar
= TYPE_UNSIGNED (wchar_type_node
);
1013 cpp_opts
->bytes_big_endian
= BYTES_BIG_ENDIAN
;
1015 /* This can't happen until after wchar_precision and bytes_big_endian
1017 cpp_init_iconv (parse_in
);
1022 fputs ("Compiler executable checksum: ", stderr
);
1023 for (i
= 0; i
< 16; i
++)
1024 fprintf (stderr
, "%02x", executable_checksum
[i
]);
1025 putc ('\n', stderr
);
1028 /* Has to wait until now so that cpplib has its hash table. */
1031 if (flag_preprocess_only
)
1033 c_finish_options ();
1034 preprocess_file (parse_in
);
1041 /* Initialize the integrated preprocessor after debug output has been
1042 initialized; loop over each input file. */
1044 c_common_parse_file (void)
1051 c_finish_options ();
1052 /* Open the dump files to use for the original and class dump output
1053 here, to be used during parsing for the current file. */
1054 original_dump_file
= dump_begin (TDI_original
, &original_dump_flags
);
1055 class_dump_file
= dump_begin (TDI_class
, &class_dump_flags
);
1060 /* And end the main input file, if the debug writer wants it */
1061 if (debug_hooks
->start_end_main_source_file
)
1062 (*debug_hooks
->end_source_file
) (0);
1063 if (++i
>= num_in_fnames
)
1065 cpp_undef_all (parse_in
);
1066 cpp_clear_file_cache (parse_in
);
1068 = cpp_read_main_file (parse_in
, in_fnames
[i
]);
1069 if (original_dump_file
)
1071 dump_end (TDI_original
, original_dump_file
);
1072 original_dump_file
= NULL
;
1074 if (class_dump_file
)
1076 dump_end (TDI_class
, class_dump_file
);
1077 class_dump_file
= NULL
;
1079 /* If an input file is missing, abandon further compilation.
1080 cpplib has issued a diagnostic. */
1081 if (!this_input_filename
)
1085 c_parse_final_cleanups ();
1088 /* Returns the appropriate dump file for PHASE to dump with FLAGS. */
1090 get_dump_info (int phase
, int *flags
)
1092 gcc_assert (phase
== TDI_original
|| phase
== TDI_class
);
1093 if (phase
== TDI_original
)
1095 *flags
= original_dump_flags
;
1096 return original_dump_file
;
1100 *flags
= class_dump_flags
;
1101 return class_dump_file
;
1105 /* Common finish hook for the C, ObjC and C++ front ends. */
1107 c_common_finish (void)
1109 FILE *deps_stream
= NULL
;
1111 /* Don't write the deps file if there are errors. */
1112 if (cpp_opts
->deps
.style
!= DEPS_NONE
&& !seen_error ())
1114 /* If -M or -MM was seen without -MF, default output to the
1117 deps_stream
= out_stream
;
1120 deps_stream
= fopen (deps_file
, deps_append
? "a": "w");
1122 fatal_error (input_location
, "opening dependency file %s: %m",
1127 /* For performance, avoid tearing down cpplib's internal structures
1128 with cpp_destroy (). */
1129 cpp_finish (parse_in
, deps_stream
);
1131 if (deps_stream
&& deps_stream
!= out_stream
1132 && (ferror (deps_stream
) || fclose (deps_stream
)))
1133 fatal_error (input_location
, "closing dependency file %s: %m", deps_file
);
1135 if (out_stream
&& (ferror (out_stream
) || fclose (out_stream
)))
1136 fatal_error (input_location
, "when writing output to %s: %m", out_fname
);
1139 /* Either of two environment variables can specify output of
1140 dependencies. Their value is either "OUTPUT_FILE" or "OUTPUT_FILE
1141 DEPS_TARGET", where OUTPUT_FILE is the file to write deps info to
1142 and DEPS_TARGET is the target to mention in the deps. They also
1143 result in dependency information being appended to the output file
1144 rather than overwriting it, and like Sun's compiler
1145 SUNPRO_DEPENDENCIES suppresses the dependency on the main file. */
1147 check_deps_environment_vars (void)
1151 spec
= getenv ("DEPENDENCIES_OUTPUT");
1153 cpp_opts
->deps
.style
= DEPS_USER
;
1156 spec
= getenv ("SUNPRO_DEPENDENCIES");
1159 cpp_opts
->deps
.style
= DEPS_SYSTEM
;
1160 cpp_opts
->deps
.ignore_main_file
= true;
1166 /* Find the space before the DEPS_TARGET, if there is one. */
1167 char *s
= strchr (spec
, ' ');
1170 /* Let the caller perform MAKE quoting. */
1171 defer_opt (OPT_MT
, s
+ 1);
1175 /* Command line -MF overrides environment variables and default. */
1184 /* Handle deferred command line switches. */
1186 handle_deferred_opts (void)
1191 /* Avoid allocating the deps buffer if we don't need it.
1192 (This flag may be true without there having been -MT or -MQ
1193 options, but we'll still need the deps buffer.) */
1197 deps
= cpp_get_deps (parse_in
);
1199 for (i
= 0; i
< deferred_count
; i
++)
1201 struct deferred_opt
*opt
= &deferred_opts
[i
];
1203 if (opt
->code
== OPT_MT
|| opt
->code
== OPT_MQ
)
1204 deps_add_target (deps
, opt
->arg
, opt
->code
== OPT_MQ
);
1208 /* These settings are appropriate for GCC, but not necessarily so for
1209 cpplib as a library. */
1211 sanitize_cpp_opts (void)
1213 /* If we don't know what style of dependencies to output, complain
1214 if any other dependency switches have been given. */
1215 if (deps_seen
&& cpp_opts
->deps
.style
== DEPS_NONE
)
1216 error ("to generate dependencies you must specify either -M or -MM");
1218 /* -dM and dependencies suppress normal output; do it here so that
1219 the last -d[MDN] switch overrides earlier ones. */
1220 if (flag_dump_macros
== 'M')
1223 /* By default, -fdirectives-only implies -dD. This allows subsequent phases
1224 to perform proper macro expansion. */
1225 if (cpp_opts
->directives_only
&& !cpp_opts
->preprocessed
&& !flag_dump_macros
)
1226 flag_dump_macros
= 'D';
1228 /* Disable -dD, -dN and -dI if normal output is suppressed. Allow
1229 -dM since at least glibc relies on -M -dM to work. */
1230 /* Also, flag_no_output implies flag_no_line_commands, always. */
1233 if (flag_dump_macros
!= 'M')
1234 flag_dump_macros
= 0;
1235 flag_dump_includes
= 0;
1236 flag_no_line_commands
= 1;
1238 else if (cpp_opts
->deps
.missing_files
)
1239 error ("-MG may only be used with -M or -MM");
1241 cpp_opts
->unsigned_char
= !flag_signed_char
;
1242 cpp_opts
->stdc_0_in_system_headers
= STDC_0_IN_SYSTEM_HEADERS
;
1244 /* Wlong-long is disabled by default. It is enabled by:
1245 [-Wpedantic | -Wtraditional] -std=[gnu|c]++98 ; or
1246 [-Wpedantic | -Wtraditional] -std=non-c99
1248 Either -Wlong-long or -Wno-long-long override any other settings.
1249 ??? These conditions should be handled in c.opt. */
1250 if (warn_long_long
== -1)
1252 warn_long_long
= ((pedantic
|| warn_traditional
)
1253 && (c_dialect_cxx () ? cxx_dialect
== cxx98
: !flag_isoc99
));
1254 cpp_opts
->cpp_warn_long_long
= warn_long_long
;
1257 /* If we're generating preprocessor output, emit current directory
1258 if explicitly requested or if debugging information is enabled.
1259 ??? Maybe we should only do it for debugging formats that
1260 actually output the current directory? */
1261 if (flag_working_directory
== -1)
1262 flag_working_directory
= (debug_info_level
!= DINFO_LEVEL_NONE
);
1264 if (cpp_opts
->directives_only
)
1266 if (cpp_warn_unused_macros
)
1267 error ("-fdirectives-only is incompatible with -Wunused_macros");
1268 if (cpp_opts
->traditional
)
1269 error ("-fdirectives-only is incompatible with -traditional");
1273 /* Add include path with a prefix at the front of its name. */
1275 add_prefixed_path (const char *suffix
, size_t chain
)
1279 size_t prefix_len
, suffix_len
;
1281 suffix_len
= strlen (suffix
);
1282 prefix
= iprefix
? iprefix
: cpp_GCC_INCLUDE_DIR
;
1283 prefix_len
= iprefix
? strlen (iprefix
) : cpp_GCC_INCLUDE_DIR_len
;
1285 path
= (char *) xmalloc (prefix_len
+ suffix_len
+ 1);
1286 memcpy (path
, prefix
, prefix_len
);
1287 memcpy (path
+ prefix_len
, suffix
, suffix_len
);
1288 path
[prefix_len
+ suffix_len
] = '\0';
1290 add_path (path
, chain
, 0, false);
1293 /* Handle -D, -U, -A, -imacros, and the first -include. */
1295 c_finish_options (void)
1297 if (!cpp_opts
->preprocessed
)
1301 cb_file_change (parse_in
,
1302 linemap_check_ordinary (linemap_add (line_table
,
1306 /* Make sure all of the builtins about to be declared have
1307 BUILTINS_LOCATION has their source_location. */
1308 source_location builtins_loc
= BUILTINS_LOCATION
;
1309 cpp_force_token_locations (parse_in
, &builtins_loc
);
1311 cpp_init_builtins (parse_in
, flag_hosted
);
1312 c_cpp_builtins (parse_in
);
1314 cpp_stop_forcing_token_locations (parse_in
);
1316 /* We're about to send user input to cpplib, so make it warn for
1317 things that we previously (when we sent it internal definitions)
1318 told it to not warn.
1320 C99 permits implementation-defined characters in identifiers.
1321 The documented meaning of -std= is to turn off extensions that
1322 conflict with the specified standard, and since a strictly
1323 conforming program cannot contain a '$', we do not condition
1324 their acceptance on the -std= setting. */
1325 cpp_opts
->warn_dollars
= (cpp_opts
->cpp_pedantic
&& !cpp_opts
->c99
);
1327 cb_file_change (parse_in
,
1328 linemap_check_ordinary (linemap_add (line_table
, LC_RENAME
, 0,
1329 _("<command-line>"), 0)));
1331 for (i
= 0; i
< deferred_count
; i
++)
1333 struct deferred_opt
*opt
= &deferred_opts
[i
];
1335 if (opt
->code
== OPT_D
)
1336 cpp_define (parse_in
, opt
->arg
);
1337 else if (opt
->code
== OPT_U
)
1338 cpp_undef (parse_in
, opt
->arg
);
1339 else if (opt
->code
== OPT_A
)
1341 if (opt
->arg
[0] == '-')
1342 cpp_unassert (parse_in
, opt
->arg
+ 1);
1344 cpp_assert (parse_in
, opt
->arg
);
1348 /* Start the main input file, if the debug writer wants it. */
1349 if (debug_hooks
->start_end_main_source_file
1350 && !flag_preprocess_only
)
1351 (*debug_hooks
->start_source_file
) (0, this_input_filename
);
1353 /* Handle -imacros after -D and -U. */
1354 for (i
= 0; i
< deferred_count
; i
++)
1356 struct deferred_opt
*opt
= &deferred_opts
[i
];
1358 if (opt
->code
== OPT_imacros
1359 && cpp_push_include (parse_in
, opt
->arg
))
1361 /* Disable push_command_line_include callback for now. */
1362 include_cursor
= deferred_count
+ 1;
1363 cpp_scan_nooutput (parse_in
);
1369 if (cpp_opts
->directives_only
)
1370 cpp_init_special_builtins (parse_in
);
1372 /* Start the main input file, if the debug writer wants it. */
1373 if (debug_hooks
->start_end_main_source_file
1374 && !flag_preprocess_only
)
1375 (*debug_hooks
->start_source_file
) (0, this_input_filename
);
1379 push_command_line_include ();
1382 /* Give CPP the next file given by -include, if any. */
1384 push_command_line_include (void)
1386 /* This can happen if disabled by -imacros for example.
1387 Punt so that we don't set "<command-line>" as the filename for
1389 if (include_cursor
> deferred_count
)
1392 if (!done_preinclude
)
1394 done_preinclude
= true;
1395 if (flag_hosted
&& std_inc
&& !cpp_opts
->preprocessed
)
1397 const char *preinc
= targetcm
.c_preinclude ();
1398 if (preinc
&& cpp_push_default_include (parse_in
, preinc
))
1403 pch_cpp_save_state ();
1405 while (include_cursor
< deferred_count
)
1407 struct deferred_opt
*opt
= &deferred_opts
[include_cursor
++];
1409 if (!cpp_opts
->preprocessed
&& opt
->code
== OPT_include
1410 && cpp_push_include (parse_in
, opt
->arg
))
1414 if (include_cursor
== deferred_count
)
1417 /* -Wunused-macros should only warn about macros defined hereafter. */
1418 cpp_opts
->warn_unused_macros
= cpp_warn_unused_macros
;
1419 /* Restore the line map from <command line>. */
1420 if (!cpp_opts
->preprocessed
)
1421 cpp_change_file (parse_in
, LC_RENAME
, this_input_filename
);
1423 /* Set this here so the client can change the option if it wishes,
1424 and after stacking the main file so we don't trace the main file. */
1425 line_table
->trace_includes
= cpp_opts
->print_include_names
;
1429 /* File change callback. Has to handle -include files. */
1431 cb_file_change (cpp_reader
* ARG_UNUSED (pfile
),
1432 const line_map_ordinary
*new_map
)
1434 if (flag_preprocess_only
)
1435 pp_file_change (new_map
);
1437 fe_file_change (new_map
);
1440 && (new_map
->reason
== LC_ENTER
|| new_map
->reason
== LC_RENAME
))
1442 /* Signal to plugins that a file is included. This could happen
1443 several times with the same file path, e.g. because of
1444 several '#include' or '#line' directives... */
1445 invoke_plugin_callbacks
1446 (PLUGIN_INCLUDE_FILE
,
1447 const_cast<char*> (ORDINARY_MAP_FILE_NAME (new_map
)));
1450 if (new_map
== 0 || (new_map
->reason
== LC_LEAVE
&& MAIN_FILE_P (new_map
)))
1452 pch_cpp_save_state ();
1453 push_command_line_include ();
1458 cb_dir_change (cpp_reader
* ARG_UNUSED (pfile
), const char *dir
)
1460 if (!set_src_pwd (dir
))
1461 warning (0, "too late for # directive to set debug directory");
1464 /* Set the C 89 standard (with 1994 amendments if C94, without GNU
1465 extensions if ISO). There is no concept of gnu94. */
1467 set_std_c89 (int c94
, int iso
)
1469 cpp_set_lang (parse_in
, c94
? CLK_STDC94
: iso
? CLK_STDC89
: CLK_GNUC89
);
1472 flag_no_gnu_keywords
= iso
;
1473 flag_no_nonansi_builtin
= iso
;
1477 lang_hooks
.name
= "GNU C89";
1480 /* Set the C 99 standard (without GNU extensions if ISO). */
1482 set_std_c99 (int iso
)
1484 cpp_set_lang (parse_in
, iso
? CLK_STDC99
: CLK_GNUC99
);
1486 flag_no_nonansi_builtin
= iso
;
1491 lang_hooks
.name
= "GNU C99";
1494 /* Set the C 11 standard (without GNU extensions if ISO). */
1496 set_std_c11 (int iso
)
1498 cpp_set_lang (parse_in
, iso
? CLK_STDC11
: CLK_GNUC11
);
1500 flag_no_nonansi_builtin
= iso
;
1505 lang_hooks
.name
= "GNU C11";
1508 /* Set the C++ 98 standard (without GNU extensions if ISO). */
1510 set_std_cxx98 (int iso
)
1512 cpp_set_lang (parse_in
, iso
? CLK_CXX98
: CLK_GNUCXX
);
1513 flag_no_gnu_keywords
= iso
;
1514 flag_no_nonansi_builtin
= iso
;
1516 cxx_dialect
= cxx98
;
1517 lang_hooks
.name
= "GNU C++98";
1520 /* Set the C++ 2011 standard (without GNU extensions if ISO). */
1522 set_std_cxx11 (int iso
)
1524 cpp_set_lang (parse_in
, iso
? CLK_CXX11
: CLK_GNUCXX11
);
1525 flag_no_gnu_keywords
= iso
;
1526 flag_no_nonansi_builtin
= iso
;
1528 /* C++11 includes the C99 standard library. */
1531 cxx_dialect
= cxx11
;
1532 lang_hooks
.name
= "GNU C++11";
1535 /* Set the C++ 2014 draft standard (without GNU extensions if ISO). */
1537 set_std_cxx14 (int iso
)
1539 cpp_set_lang (parse_in
, iso
? CLK_CXX14
: CLK_GNUCXX14
);
1540 flag_no_gnu_keywords
= iso
;
1541 flag_no_nonansi_builtin
= iso
;
1543 /* C++11 includes the C99 standard library. */
1546 cxx_dialect
= cxx14
;
1547 lang_hooks
.name
= "GNU C++14";
1550 /* Set the C++ 201z draft standard (without GNU extensions if ISO). */
1552 set_std_cxx1z (int iso
)
1554 cpp_set_lang (parse_in
, iso
? CLK_CXX1Z
: CLK_GNUCXX1Z
);
1555 flag_no_gnu_keywords
= iso
;
1556 flag_no_nonansi_builtin
= iso
;
1558 /* C++11 includes the C99 standard library. */
1561 /* Enable concepts by default. */
1564 cxx_dialect
= cxx1z
;
1565 lang_hooks
.name
= "GNU C++14"; /* Pretend C++14 till standarization. */
1568 /* Args to -d specify what to dump. Silently ignore
1569 unrecognized options; they may be aimed at toplev.c. */
1571 handle_OPT_d (const char *arg
)
1575 while ((c
= *arg
++) != '\0')
1578 case 'M': /* Dump macros only. */
1579 case 'N': /* Dump names. */
1580 case 'D': /* Dump definitions. */
1581 case 'U': /* Dump used macros. */
1582 flag_dump_macros
= c
;
1586 flag_dump_includes
= 1;