1 /* C/ObjC/C++ command line option handling.
2    Copyright (C) 2002-2018 Free Software Foundation, Inc.
3    Contributed by Neil Booth.
4 
5 This file is part of GCC.
6 
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
10 version.
11 
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
15 for more details.
16 
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/>.  */
20 
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "c-target.h"
26 #include "c-common.h"
27 #include "memmodel.h"
28 #include "tm_p.h"		/* For C_COMMON_OVERRIDE_OPTIONS.  */
29 #include "diagnostic.h"
30 #include "c-pragma.h"
31 #include "flags.h"
32 #include "toplev.h"
33 #include "langhooks.h"
34 #include "tree-diagnostic.h" /* for virt_loc_aware_diagnostic_finalizer */
35 #include "intl.h"
36 #include "cppdefault.h"
37 #include "incpath.h"
38 #include "debug.h"		/* For debug_hooks.  */
39 #include "opts.h"
40 #include "plugin.h"		/* For PLUGIN_INCLUDE_FILE event.  */
41 #include "mkdeps.h"
42 #include "dumpfile.h"
43 #include "file-prefix-map.h"    /* add_*_prefix_map()  */
44 
45 #ifndef DOLLARS_IN_IDENTIFIERS
46 # define DOLLARS_IN_IDENTIFIERS true
47 #endif
48 
49 #ifndef TARGET_SYSTEM_ROOT
50 # define TARGET_SYSTEM_ROOT NULL
51 #endif
52 
53 #ifndef TARGET_OPTF
54 #define TARGET_OPTF(ARG)
55 #endif
56 
57 /* CPP's options.  */
58 cpp_options *cpp_opts;
59 
60 /* Input filename.  */
61 static const char *this_input_filename;
62 
63 /* Filename and stream for preprocessed output.  */
64 static const char *out_fname;
65 static FILE *out_stream;
66 
67 /* Append dependencies to deps_file.  */
68 static bool deps_append;
69 
70 /* If dependency switches (-MF etc.) have been given.  */
71 static bool deps_seen;
72 
73 /* If -v seen.  */
74 static bool verbose;
75 
76 /* Dependency output file.  */
77 static const char *deps_file;
78 
79 /* The prefix given by -iprefix, if any.  */
80 static const char *iprefix;
81 
82 /* The multilib directory given by -imultilib, if any.  */
83 static const char *imultilib;
84 
85 /* The system root, if any.  Overridden by -isysroot.  */
86 static const char *sysroot = TARGET_SYSTEM_ROOT;
87 
88 /* Zero disables all standard directories for headers.  */
89 static bool std_inc = true;
90 
91 /* Zero disables the C++-specific standard directories for headers.  */
92 static bool std_cxx_inc = true;
93 
94 /* If the quote chain has been split by -I-.  */
95 static bool quote_chain_split;
96 
97 /* Number of deferred options.  */
98 static size_t deferred_count;
99 
100 /* Number of deferred options scanned for -include.  */
101 static size_t include_cursor;
102 
103 /* Dump files/flags to use during parsing.  */
104 static FILE *original_dump_file = NULL;
105 static dump_flags_t original_dump_flags;
106 
107 /* Whether any standard preincluded header has been preincluded.  */
108 static bool done_preinclude;
109 
110 static void handle_OPT_d (const char *);
111 static void set_std_cxx98 (int);
112 static void set_std_cxx11 (int);
113 static void set_std_cxx14 (int);
114 static void set_std_cxx17 (int);
115 static void set_std_cxx2a (int);
116 static void set_std_c89 (int, int);
117 static void set_std_c99 (int);
118 static void set_std_c11 (int);
119 static void set_std_c17 (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 *, incpath_kind);
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);
128 
129 #ifndef STDC_0_IN_SYSTEM_HEADERS
130 #define STDC_0_IN_SYSTEM_HEADERS 0
131 #endif
132 
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
137 {
138   enum opt_code code;
139   const char *arg;
140 } *deferred_opts;
141 
142 
143 extern const unsigned int
144 c_family_lang_mask = (CL_C | CL_CXX | CL_ObjC | CL_ObjCXX);
145 
146 /* Defer option CODE with argument ARG.  */
147 static void
148 defer_opt (enum opt_code code, const char *arg)
149 {
150   deferred_opts[deferred_count].code = code;
151   deferred_opts[deferred_count].arg = arg;
152   deferred_count++;
153 }
154 
155 /* Return language mask for option parsing.  */
156 unsigned int
157 c_common_option_lang_mask (void)
158 {
159   static const unsigned int lang_flags[] = {CL_C, CL_ObjC, CL_CXX, CL_ObjCXX};
160 
161   return lang_flags[c_language];
162 }
163 
164 /* Diagnostic finalizer for C/C++/Objective-C/Objective-C++.  */
165 static void
166 c_diagnostic_finalizer (diagnostic_context *context,
167 			diagnostic_info *diagnostic)
168 {
169   diagnostic_show_locus (context, diagnostic->richloc, diagnostic->kind);
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_flush (context->printer);
175 }
176 
177 /* Common default settings for diagnostics.  */
178 void
179 c_common_diagnostics_set_defaults (diagnostic_context *context)
180 {
181   diagnostic_finalizer (context) = c_diagnostic_finalizer;
182   context->opt_permissive = OPT_fpermissive;
183 }
184 
185 /* Whether options from all C-family languages should be accepted
186    quietly.  */
187 static bool accept_all_c_family_options = false;
188 
189 /* Return whether to complain about a wrong-language option.  */
190 bool
191 c_common_complain_wrong_lang_p (const struct cl_option *option)
192 {
193   if (accept_all_c_family_options
194       && (option->flags & c_family_lang_mask))
195     return false;
196 
197   return true;
198 }
199 
200 /* Initialize options structure OPTS.  */
201 void
202 c_common_init_options_struct (struct gcc_options *opts)
203 {
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;
208 
209   /* By default, C99-like requirements for complex multiply and divide.  */
210   opts->x_flag_complex_method = 2;
211 }
212 
213 /* Common initialization before calling option handlers.  */
214 void
215 c_common_init_options (unsigned int decoded_options_count,
216 		       struct cl_decoded_option *decoded_options)
217 {
218   unsigned int i;
219   struct cpp_callbacks *cb;
220 
221   g_string_concat_db
222     = new (ggc_alloc <string_concat_db> ()) string_concat_db ();
223 
224   parse_in = cpp_create_reader (c_dialect_cxx () ? CLK_GNUCXX: CLK_GNUC89,
225 				ident_hash, line_table);
226   cb = cpp_get_callbacks (parse_in);
227   cb->error = c_cpp_error;
228 
229   cpp_opts = cpp_get_options (parse_in);
230   cpp_opts->dollars_in_ident = DOLLARS_IN_IDENTIFIERS;
231   cpp_opts->objc = c_dialect_objc ();
232 
233   /* Reset to avoid warnings on internal definitions.  We set it just
234      before passing on command-line options to cpplib.  */
235   cpp_opts->warn_dollars = 0;
236 
237   deferred_opts = XNEWVEC (struct deferred_opt, decoded_options_count);
238 
239   if (c_language == clk_c)
240     {
241       /* The default for C is gnu17.  */
242       set_std_c17 (false /* ISO */);
243 
244       /* If preprocessing assembly language, accept any of the C-family
245 	 front end options since the driver may pass them through.  */
246       for (i = 1; i < decoded_options_count; i++)
247 	if (decoded_options[i].opt_index == OPT_lang_asm)
248 	  {
249 	    accept_all_c_family_options = true;
250 	    break;
251 	  }
252     }
253 
254   /* Set C++ standard to C++14 if not specified on the command line.  */
255   if (c_dialect_cxx ())
256     set_std_cxx14 (/*ISO*/false);
257 
258   global_dc->colorize_source_p = true;
259 }
260 
261 /* Handle switch SCODE with argument ARG.  VALUE is true, unless no-
262    form of an -f or -W option was given.  Returns false if the switch was
263    invalid, true if valid.  Use HANDLERS in recursive handle_option calls.  */
264 bool
265 c_common_handle_option (size_t scode, const char *arg, int value,
266 			int kind, location_t loc,
267 			const struct cl_option_handlers *handlers)
268 {
269   const struct cl_option *option = &cl_options[scode];
270   enum opt_code code = (enum opt_code) scode;
271   bool result = true;
272 
273   /* Prevent resetting the language standard to a C dialect when the driver
274      has already determined that we're looking at assembler input.  */
275   bool preprocessing_asm_p = (cpp_get_options (parse_in)->lang == CLK_ASM);
276 
277   switch (code)
278     {
279     default:
280       if (cl_options[code].flags & c_family_lang_mask)
281 	{
282 	  if ((option->flags & CL_TARGET)
283 	      && ! targetcm.handle_c_option (scode, arg, value))
284 	    result = false;
285 	  break;
286 	}
287       result = false;
288       break;
289 
290     case OPT__output_pch_:
291       pch_file = arg;
292       break;
293 
294     case OPT_A:
295       defer_opt (code, arg);
296       break;
297 
298     case OPT_C:
299       cpp_opts->discard_comments = 0;
300       break;
301 
302     case OPT_CC:
303       cpp_opts->discard_comments = 0;
304       cpp_opts->discard_comments_in_macro_exp = 0;
305       break;
306 
307     case OPT_D:
308       defer_opt (code, arg);
309       break;
310 
311     case OPT_H:
312       cpp_opts->print_include_names = 1;
313       break;
314 
315     case OPT_F:
316       TARGET_OPTF (xstrdup (arg));
317       break;
318 
319     case OPT_I:
320       if (strcmp (arg, "-"))
321 	add_path (xstrdup (arg), INC_BRACKET, 0, true);
322       else
323 	{
324 	  if (quote_chain_split)
325 	    error ("-I- specified twice");
326 	  quote_chain_split = true;
327 	  split_quote_chain ();
328 	  inform (input_location, "obsolete option -I- used, please use -iquote instead");
329 	}
330       break;
331 
332     case OPT_M:
333     case OPT_MM:
334       /* When doing dependencies with -M or -MM, suppress normal
335 	 preprocessed output, but still do -dM etc. as software
336 	 depends on this.  Preprocessed output does occur if -MD, -MMD
337 	 or environment var dependency generation is used.  */
338       cpp_opts->deps.style = (code == OPT_M ? DEPS_SYSTEM: DEPS_USER);
339       flag_no_output = 1;
340       break;
341 
342     case OPT_MD:
343     case OPT_MMD:
344       cpp_opts->deps.style = (code == OPT_MD ? DEPS_SYSTEM: DEPS_USER);
345       cpp_opts->deps.need_preprocessor_output = true;
346       deps_file = arg;
347       break;
348 
349     case OPT_MF:
350       deps_seen = true;
351       deps_file = arg;
352       break;
353 
354     case OPT_MG:
355       deps_seen = true;
356       cpp_opts->deps.missing_files = true;
357       break;
358 
359     case OPT_MP:
360       deps_seen = true;
361       cpp_opts->deps.phony_targets = true;
362       break;
363 
364     case OPT_MQ:
365     case OPT_MT:
366       deps_seen = true;
367       defer_opt (code, arg);
368       break;
369 
370     case OPT_P:
371       flag_no_line_commands = 1;
372       break;
373 
374     case OPT_U:
375       defer_opt (code, arg);
376       break;
377 
378     case OPT_Wall:
379       /* ??? Don't add new options here. Use LangEnabledBy in c.opt.  */
380 
381       cpp_opts->warn_num_sign_change = value;
382       break;
383 
384     case OPT_Walloca_larger_than_:
385       if (!value)
386 	inform (loc, "-Walloca-larger-than=0 is meaningless");
387       break;
388 
389     case OPT_Wvla_larger_than_:
390       if (!value)
391 	inform (loc, "-Wvla-larger-than=0 is meaningless");
392       break;
393 
394     case OPT_Wunknown_pragmas:
395       /* Set to greater than 1, so that even unknown pragmas in
396 	 system headers will be warned about.  */
397       /* ??? There is no way to handle this automatically for now.  */
398       warn_unknown_pragmas = value * 2;
399       break;
400 
401     case OPT_ansi:
402       if (!c_dialect_cxx ())
403 	set_std_c89 (false, true);
404       else
405 	set_std_cxx98 (true);
406       break;
407 
408     case OPT_d:
409       handle_OPT_d (arg);
410       break;
411 
412     case OPT_Wabi_:
413       warn_abi = true;
414       if (value == 1)
415 	{
416 	  warning (0, "%<-Wabi=1%> is not supported, using =2");
417 	  value = 2;
418 	}
419       warn_abi_version = value;
420       break;
421 
422     case OPT_fcanonical_system_headers:
423       cpp_opts->canonical_system_headers = value;
424       break;
425 
426     case OPT_fcond_mismatch:
427       if (!c_dialect_cxx ())
428 	{
429 	  flag_cond_mismatch = value;
430 	  break;
431 	}
432       warning (0, "switch %qs is no longer supported", option->opt_text);
433       break;
434 
435     case OPT_fbuiltin_:
436       if (value)
437 	result = false;
438       else
439 	disable_builtin_function (arg);
440       break;
441 
442     case OPT_fdirectives_only:
443       cpp_opts->directives_only = value;
444       break;
445 
446     case OPT_fdollars_in_identifiers:
447       cpp_opts->dollars_in_ident = value;
448       break;
449 
450     case OPT_fmacro_prefix_map_:
451       add_macro_prefix_map (arg);
452       break;
453 
454     case OPT_ffreestanding:
455       value = !value;
456       /* Fall through.  */
457     case OPT_fhosted:
458       flag_hosted = value;
459       flag_no_builtin = !value;
460       break;
461 
462     case OPT_fconstant_string_class_:
463       constant_string_class_name = arg;
464       break;
465 
466     case OPT_fextended_identifiers:
467       cpp_opts->extended_identifiers = value;
468       break;
469 
470     case OPT_foperator_names:
471       cpp_opts->operator_names = value;
472       break;
473 
474     case OPT_fpch_deps:
475       cpp_opts->restore_pch_deps = value;
476       break;
477 
478     case OPT_fpch_preprocess:
479       flag_pch_preprocess = value;
480       break;
481 
482     case OPT_fpermissive:
483       flag_permissive = value;
484       global_dc->permissive = value;
485       break;
486 
487     case OPT_fpreprocessed:
488       cpp_opts->preprocessed = value;
489       break;
490 
491     case OPT_fdebug_cpp:
492       cpp_opts->debug = 1;
493       break;
494 
495     case OPT_ftrack_macro_expansion:
496       if (value)
497 	value = 2;
498       /* Fall Through.  */
499 
500     case OPT_ftrack_macro_expansion_:
501       if (arg && *arg != '\0')
502 	cpp_opts->track_macro_expansion = value;
503       else
504 	cpp_opts->track_macro_expansion = 2;
505       break;
506 
507     case OPT_frepo:
508       flag_use_repository = value;
509       if (value)
510 	flag_implicit_templates = 0;
511       break;
512 
513     case OPT_ftabstop_:
514       /* It is documented that we silently ignore silly values.  */
515       if (value >= 1 && value <= 100)
516 	cpp_opts->tabstop = value;
517       break;
518 
519     case OPT_fexec_charset_:
520       cpp_opts->narrow_charset = arg;
521       break;
522 
523     case OPT_fwide_exec_charset_:
524       cpp_opts->wide_charset = arg;
525       break;
526 
527     case OPT_finput_charset_:
528       cpp_opts->input_charset = arg;
529       break;
530 
531     case OPT_ftemplate_depth_:
532       max_tinst_depth = value;
533       break;
534 
535     case OPT_fvisibility_inlines_hidden:
536       visibility_options.inlines_hidden = value;
537       break;
538 
539     case OPT_femit_struct_debug_baseonly:
540       set_struct_debug_option (&global_options, loc, "base");
541       break;
542 
543     case OPT_femit_struct_debug_reduced:
544       set_struct_debug_option (&global_options, loc,
545 			       "dir:ord:sys,dir:gen:any,ind:base");
546       break;
547 
548     case OPT_femit_struct_debug_detailed_:
549       set_struct_debug_option (&global_options, loc, arg);
550       break;
551 
552     case OPT_fext_numeric_literals:
553       cpp_opts->ext_numeric_literals = value;
554       break;
555 
556     case OPT_idirafter:
557       add_path (xstrdup (arg), INC_AFTER, 0, true);
558       break;
559 
560     case OPT_imacros:
561     case OPT_include:
562       defer_opt (code, arg);
563       break;
564 
565     case OPT_imultilib:
566       imultilib = arg;
567       break;
568 
569     case OPT_iprefix:
570       iprefix = arg;
571       break;
572 
573     case OPT_iquote:
574       add_path (xstrdup (arg), INC_QUOTE, 0, true);
575       break;
576 
577     case OPT_isysroot:
578       sysroot = arg;
579       break;
580 
581     case OPT_isystem:
582       add_path (xstrdup (arg), INC_SYSTEM, 0, true);
583       break;
584 
585     case OPT_iwithprefix:
586       add_prefixed_path (arg, INC_SYSTEM);
587       break;
588 
589     case OPT_iwithprefixbefore:
590       add_prefixed_path (arg, INC_BRACKET);
591       break;
592 
593     case OPT_lang_asm:
594       cpp_set_lang (parse_in, CLK_ASM);
595       cpp_opts->dollars_in_ident = false;
596       break;
597 
598     case OPT_nostdinc:
599       std_inc = false;
600       break;
601 
602     case OPT_nostdinc__:
603       std_cxx_inc = false;
604       break;
605 
606     case OPT_o:
607       if (!out_fname)
608 	out_fname = arg;
609       else
610 	error ("output filename specified twice");
611       break;
612 
613     case OPT_print_objc_runtime_info:
614       print_struct_values = 1;
615       break;
616 
617     case OPT_remap:
618       cpp_opts->remap = 1;
619       break;
620 
621     case OPT_std_c__98:
622     case OPT_std_gnu__98:
623       if (!preprocessing_asm_p)
624 	set_std_cxx98 (code == OPT_std_c__98 /* ISO */);
625       break;
626 
627     case OPT_std_c__11:
628     case OPT_std_gnu__11:
629       if (!preprocessing_asm_p)
630 	set_std_cxx11 (code == OPT_std_c__11 /* ISO */);
631       break;
632 
633     case OPT_std_c__14:
634     case OPT_std_gnu__14:
635       if (!preprocessing_asm_p)
636 	set_std_cxx14 (code == OPT_std_c__14 /* ISO */);
637       break;
638 
639     case OPT_std_c__17:
640     case OPT_std_gnu__17:
641       if (!preprocessing_asm_p)
642 	set_std_cxx17 (code == OPT_std_c__17 /* ISO */);
643       break;
644 
645     case OPT_std_c__2a:
646     case OPT_std_gnu__2a:
647       if (!preprocessing_asm_p)
648 	set_std_cxx2a (code == OPT_std_c__2a /* ISO */);
649       break;
650 
651     case OPT_std_c90:
652     case OPT_std_iso9899_199409:
653       if (!preprocessing_asm_p)
654 	set_std_c89 (code == OPT_std_iso9899_199409 /* c94 */, true /* ISO */);
655       break;
656 
657     case OPT_std_gnu90:
658       if (!preprocessing_asm_p)
659 	set_std_c89 (false /* c94 */, false /* ISO */);
660       break;
661 
662     case OPT_std_c99:
663       if (!preprocessing_asm_p)
664 	set_std_c99 (true /* ISO */);
665       break;
666 
667     case OPT_std_gnu99:
668       if (!preprocessing_asm_p)
669 	set_std_c99 (false /* ISO */);
670       break;
671 
672     case OPT_std_c11:
673       if (!preprocessing_asm_p)
674 	set_std_c11 (true /* ISO */);
675       break;
676 
677     case OPT_std_gnu11:
678       if (!preprocessing_asm_p)
679 	set_std_c11 (false /* ISO */);
680       break;
681 
682     case OPT_std_c17:
683       if (!preprocessing_asm_p)
684 	set_std_c17 (true /* ISO */);
685       break;
686 
687     case OPT_std_gnu17:
688       if (!preprocessing_asm_p)
689 	set_std_c17 (false /* ISO */);
690       break;
691 
692     case OPT_trigraphs:
693       cpp_opts->trigraphs = 1;
694       break;
695 
696     case OPT_traditional_cpp:
697       cpp_opts->traditional = 1;
698       break;
699 
700     case OPT_v:
701       verbose = true;
702       break;
703     }
704 
705   switch (c_language)
706     {
707     case clk_c:
708       C_handle_option_auto (&global_options, &global_options_set,
709                             scode, arg, value,
710                             c_family_lang_mask, kind,
711                             loc, handlers, global_dc);
712       break;
713 
714     case clk_objc:
715       ObjC_handle_option_auto (&global_options, &global_options_set,
716                                scode, arg, value,
717                                c_family_lang_mask, kind,
718                                loc, handlers, global_dc);
719       break;
720 
721     case clk_cxx:
722       CXX_handle_option_auto (&global_options, &global_options_set,
723                               scode, arg, value,
724                               c_family_lang_mask, kind,
725                               loc, handlers, global_dc);
726       break;
727 
728     case clk_objcxx:
729       ObjCXX_handle_option_auto (&global_options, &global_options_set,
730                                  scode, arg, value,
731                                  c_family_lang_mask, kind,
732                                  loc, handlers, global_dc);
733       break;
734 
735     default:
736       gcc_unreachable ();
737     }
738 
739   cpp_handle_option_auto (&global_options, scode, cpp_opts);
740   return result;
741 }
742 
743 /* Default implementation of TARGET_HANDLE_C_OPTION.  */
744 
745 bool
746 default_handle_c_option (size_t code ATTRIBUTE_UNUSED,
747 			 const char *arg ATTRIBUTE_UNUSED,
748 			 int value ATTRIBUTE_UNUSED)
749 {
750   return false;
751 }
752 
753 /* Post-switch processing.  */
754 bool
755 c_common_post_options (const char **pfilename)
756 {
757   struct cpp_callbacks *cb;
758 
759   /* Canonicalize the input and output filenames.  */
760   if (in_fnames == NULL)
761     {
762       in_fnames = XNEWVEC (const char *, 1);
763       in_fnames[0] = "";
764     }
765   else if (strcmp (in_fnames[0], "-") == 0)
766     {
767       if (pch_file)
768 	error ("cannot use %<-%> as input filename for a precompiled header");
769 
770       in_fnames[0] = "";
771     }
772 
773   if (out_fname == NULL || !strcmp (out_fname, "-"))
774     out_fname = "";
775 
776   if (cpp_opts->deps.style == DEPS_NONE)
777     check_deps_environment_vars ();
778 
779   handle_deferred_opts ();
780 
781   sanitize_cpp_opts ();
782 
783   register_include_chains (parse_in, sysroot, iprefix, imultilib,
784 			   std_inc, std_cxx_inc && c_dialect_cxx (), verbose);
785 
786 #ifdef C_COMMON_OVERRIDE_OPTIONS
787   /* Some machines may reject certain combinations of C
788      language-specific options.  */
789   C_COMMON_OVERRIDE_OPTIONS;
790 #endif
791 
792   /* Excess precision other than "fast" requires front-end
793      support.  */
794   if (c_dialect_cxx ())
795     {
796       if (flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD)
797 	sorry ("-fexcess-precision=standard for C++");
798       flag_excess_precision_cmdline = EXCESS_PRECISION_FAST;
799     }
800   else if (flag_excess_precision_cmdline == EXCESS_PRECISION_DEFAULT)
801     flag_excess_precision_cmdline = (flag_iso
802 				     ? EXCESS_PRECISION_STANDARD
803 				     : EXCESS_PRECISION_FAST);
804 
805   /* ISO C restricts floating-point expression contraction to within
806      source-language expressions (-ffp-contract=on, currently an alias
807      for -ffp-contract=off).  */
808   if (flag_iso
809       && !c_dialect_cxx ()
810       && (global_options_set.x_flag_fp_contract_mode
811 	  == (enum fp_contract_mode) 0)
812       && flag_unsafe_math_optimizations == 0)
813     flag_fp_contract_mode = FP_CONTRACT_OFF;
814 
815   /* If we are compiling C, and we are outside of a standards mode,
816      we can permit the new values from ISO/IEC TS 18661-3 for
817      FLT_EVAL_METHOD.  Otherwise, we must restrict the possible values to
818      the set specified in ISO C99/C11.  */
819   if (!flag_iso
820       && !c_dialect_cxx ()
821       && (global_options_set.x_flag_permitted_flt_eval_methods
822 	  == PERMITTED_FLT_EVAL_METHODS_DEFAULT))
823     flag_permitted_flt_eval_methods = PERMITTED_FLT_EVAL_METHODS_TS_18661;
824   else
825     flag_permitted_flt_eval_methods = PERMITTED_FLT_EVAL_METHODS_C11;
826 
827   /* By default we use C99 inline semantics in GNU99 or C99 mode.  C99
828      inline semantics are not supported in GNU89 or C89 mode.  */
829   if (flag_gnu89_inline == -1)
830     flag_gnu89_inline = !flag_isoc99;
831   else if (!flag_gnu89_inline && !flag_isoc99)
832     error ("-fno-gnu89-inline is only supported in GNU99 or C99 mode");
833 
834   /* Default to ObjC sjlj exception handling if NeXT runtime.  */
835   if (flag_objc_sjlj_exceptions < 0)
836     flag_objc_sjlj_exceptions = flag_next_runtime;
837   if (flag_objc_exceptions && !flag_objc_sjlj_exceptions)
838     flag_exceptions = 1;
839 
840   /* If -ffreestanding, -fno-hosted or -fno-builtin then disable
841      pattern recognition.  */
842   if (!global_options_set.x_flag_tree_loop_distribute_patterns
843       && flag_no_builtin)
844     flag_tree_loop_distribute_patterns = 0;
845 
846   /* -Woverlength-strings is off by default, but is enabled by -Wpedantic.
847      It is never enabled in C++, as the minimum limit is not normative
848      in that standard.  */
849   if (c_dialect_cxx ())
850     warn_overlength_strings = 0;
851 
852   /* Wmain is enabled by default in C++ but not in C.  */
853   /* Wmain is disabled by default for -ffreestanding (!flag_hosted),
854      even if -Wall or -Wpedantic was given (warn_main will be 2 if set
855      by -Wall, 1 if set by -Wmain).  */
856   if (warn_main == -1)
857     warn_main = (c_dialect_cxx () && flag_hosted) ? 1 : 0;
858   else if (warn_main == 2)
859     warn_main = flag_hosted ? 1 : 0;
860 
861   /* In C, -Wall and -Wc++-compat enable -Wenum-compare; if it has not
862      yet been set, it is disabled by default.  In C++, it is enabled
863      by default.  */
864   if (warn_enum_compare == -1)
865     warn_enum_compare = c_dialect_cxx () ? 1 : 0;
866 
867   /* -Wpacked-bitfield-compat is on by default for the C languages.  The
868      warning is issued in stor-layout.c which is not part of the front-end so
869      we need to selectively turn it on here.  */
870   if (warn_packed_bitfield_compat == -1)
871     warn_packed_bitfield_compat = 1;
872 
873   /* Special format checking options don't work without -Wformat; warn if
874      they are used.  */
875   if (!warn_format)
876     {
877       warning (OPT_Wformat_y2k,
878 	       "-Wformat-y2k ignored without -Wformat");
879       warning (OPT_Wformat_extra_args,
880 	       "-Wformat-extra-args ignored without -Wformat");
881       warning (OPT_Wformat_zero_length,
882 	       "-Wformat-zero-length ignored without -Wformat");
883       warning (OPT_Wformat_nonliteral,
884 	       "-Wformat-nonliteral ignored without -Wformat");
885       warning (OPT_Wformat_contains_nul,
886 	       "-Wformat-contains-nul ignored without -Wformat");
887       warning (OPT_Wformat_security,
888 	       "-Wformat-security ignored without -Wformat");
889     }
890 
891   /* -Wimplicit-function-declaration is enabled by default for C99.  */
892   if (warn_implicit_function_declaration == -1)
893     warn_implicit_function_declaration = flag_isoc99;
894 
895   /* -Wimplicit-int is enabled by default for C99.  */
896   if (warn_implicit_int == -1)
897     warn_implicit_int = flag_isoc99;
898 
899   /* -Wshift-overflow is enabled by default in C99 and C++11 modes.  */
900   if (warn_shift_overflow == -1)
901     warn_shift_overflow = cxx_dialect >= cxx11 || flag_isoc99;
902 
903   /* -Wshift-negative-value is enabled by -Wextra in C99 and C++11 modes.  */
904   if (warn_shift_negative_value == -1)
905     warn_shift_negative_value = (extra_warnings
906 				 && (cxx_dialect >= cxx11 || flag_isoc99));
907 
908   /* -Wregister is enabled by default in C++17.  */
909   if (!global_options_set.x_warn_register)
910     warn_register = cxx_dialect >= cxx17;
911 
912   /* Declone C++ 'structors if -Os.  */
913   if (flag_declone_ctor_dtor == -1)
914     flag_declone_ctor_dtor = optimize_size;
915 
916   if (flag_abi_compat_version == 1)
917     {
918       warning (0, "%<-fabi-compat-version=1%> is not supported, using =2");
919       flag_abi_compat_version = 2;
920     }
921 
922   /* Change flag_abi_version to be the actual current ABI level, for the
923      benefit of c_cpp_builtins, and to make comparison simpler.  */
924   const int latest_abi_version = 13;
925   /* Generate compatibility aliases for ABI v11 (7.1) by default.  */
926   const int abi_compat_default = 11;
927 
928 #define clamp(X) if (X == 0 || X > latest_abi_version) X = latest_abi_version
929   clamp (flag_abi_version);
930   clamp (warn_abi_version);
931   clamp (flag_abi_compat_version);
932 #undef clamp
933 
934   /* Default -Wabi= or -fabi-compat-version= from each other.  */
935   if (warn_abi_version == -1 && flag_abi_compat_version != -1)
936     warn_abi_version = flag_abi_compat_version;
937   else if (flag_abi_compat_version == -1 && warn_abi_version != -1)
938     flag_abi_compat_version = warn_abi_version;
939   else if (warn_abi_version == -1 && flag_abi_compat_version == -1)
940     {
941       warn_abi_version = latest_abi_version;
942       if (flag_abi_version == latest_abi_version)
943 	{
944 	  if (warning (OPT_Wabi, "-Wabi won't warn about anything"))
945 	    {
946 	      inform (input_location, "-Wabi warns about differences "
947 		      "from the most up-to-date ABI, which is also used "
948 		      "by default");
949 	      inform (input_location, "use e.g. -Wabi=11 to warn about "
950 		      "changes from GCC 7");
951 	    }
952 	  flag_abi_compat_version = abi_compat_default;
953 	}
954       else
955 	flag_abi_compat_version = latest_abi_version;
956     }
957 
958   /* By default, enable the new inheriting constructor semantics along with ABI
959      11.  New and old should coexist fine, but it is a change in what
960      artificial symbols are generated.  */
961   if (!global_options_set.x_flag_new_inheriting_ctors)
962     flag_new_inheriting_ctors = abi_version_at_least (11);
963 
964   /* For GCC 7, only enable DR150 resolution by default if -std=c++17.  */
965   if (!global_options_set.x_flag_new_ttp)
966     flag_new_ttp = (cxx_dialect >= cxx17);
967 
968   if (cxx_dialect >= cxx11)
969     {
970       /* If we're allowing C++0x constructs, don't warn about C++98
971 	 identifiers which are keywords in C++0x.  */
972       warn_cxx11_compat = 0;
973       cpp_opts->cpp_warn_cxx11_compat = 0;
974 
975       if (warn_narrowing == -1)
976 	warn_narrowing = 1;
977 
978       /* Unless -f{,no-}ext-numeric-literals has been used explicitly,
979 	 for -std=c++{11,14,17,2a} default to -fno-ext-numeric-literals.  */
980       if (flag_iso && !global_options_set.x_flag_ext_numeric_literals)
981 	cpp_opts->ext_numeric_literals = 0;
982     }
983   else if (warn_narrowing == -1)
984     warn_narrowing = 0;
985 
986   /* C++17 has stricter evaluation order requirements; let's use some of them
987      for earlier C++ as well, so chaining works as expected.  */
988   if (c_dialect_cxx ()
989       && flag_strong_eval_order == -1)
990     flag_strong_eval_order = (cxx_dialect >= cxx17 ? 2 : 1);
991 
992   /* Global sized deallocation is new in C++14.  */
993   if (flag_sized_deallocation == -1)
994     flag_sized_deallocation = (cxx_dialect >= cxx14);
995 
996   if (flag_extern_tls_init)
997     {
998       if (!TARGET_SUPPORTS_ALIASES || !SUPPORTS_WEAK)
999 	{
1000 	  /* Lazy TLS initialization for a variable in another TU requires
1001 	     alias and weak reference support.  */
1002 	  if (flag_extern_tls_init > 0)
1003 	    sorry ("external TLS initialization functions not supported "
1004 		   "on this target");
1005 
1006 	  flag_extern_tls_init = 0;
1007 	}
1008       else
1009 	flag_extern_tls_init = 1;
1010     }
1011 
1012   if (warn_return_type == -1)
1013     warn_return_type = c_dialect_cxx ();
1014 
1015   if (num_in_fnames > 1)
1016     error ("too many filenames given.  Type %s --help for usage",
1017 	   progname);
1018 
1019   if (flag_preprocess_only)
1020     {
1021       /* Open the output now.  We must do so even if flag_no_output is
1022 	 on, because there may be other output than from the actual
1023 	 preprocessing (e.g. from -dM).  */
1024       if (out_fname[0] == '\0')
1025 	out_stream = stdout;
1026       else
1027 	out_stream = fopen (out_fname, "w");
1028 
1029       if (out_stream == NULL)
1030 	{
1031 	  fatal_error (input_location, "opening output file %s: %m", out_fname);
1032 	  return false;
1033 	}
1034 
1035       init_pp_output (out_stream);
1036     }
1037   else
1038     {
1039       init_c_lex ();
1040 
1041       /* When writing a PCH file, avoid reading some other PCH file,
1042 	 because the default address space slot then can't be used
1043 	 for the output PCH file.  */
1044       if (pch_file)
1045 	{
1046 	  c_common_no_more_pch ();
1047 	  /* Only -g0 and -gdwarf* are supported with PCH, for other
1048 	     debug formats we warn here and refuse to load any PCH files.  */
1049 	  if (write_symbols != NO_DEBUG && write_symbols != DWARF2_DEBUG)
1050 	    warning (OPT_Wdeprecated,
1051 		     "the \"%s\" debug format cannot be used with "
1052 		     "pre-compiled headers", debug_type_names[write_symbols]);
1053 	}
1054       else if (write_symbols != NO_DEBUG && write_symbols != DWARF2_DEBUG)
1055 	c_common_no_more_pch ();
1056 
1057       /* Yuk.  WTF is this?  I do know ObjC relies on it somewhere.  */
1058       input_location = UNKNOWN_LOCATION;
1059     }
1060 
1061   cb = cpp_get_callbacks (parse_in);
1062   cb->file_change = cb_file_change;
1063   cb->dir_change = cb_dir_change;
1064   cpp_post_options (parse_in);
1065   init_global_opts_from_cpp (&global_options, cpp_get_options (parse_in));
1066 
1067   input_location = UNKNOWN_LOCATION;
1068 
1069   *pfilename = this_input_filename
1070     = cpp_read_main_file (parse_in, in_fnames[0]);
1071   /* Don't do any compilation or preprocessing if there is no input file.  */
1072   if (this_input_filename == NULL)
1073     {
1074       errorcount++;
1075       return false;
1076     }
1077 
1078   if (flag_working_directory
1079       && flag_preprocess_only && !flag_no_line_commands)
1080     pp_dir_change (parse_in, get_src_pwd ());
1081 
1082   /* Disable LTO output when outputting a precompiled header.  */
1083   if (pch_file && flag_lto)
1084     {
1085       flag_lto = 0;
1086       flag_generate_lto = 0;
1087     }
1088 
1089   return flag_preprocess_only;
1090 }
1091 
1092 /* Front end initialization common to C, ObjC and C++.  */
1093 bool
1094 c_common_init (void)
1095 {
1096   /* Set up preprocessor arithmetic.  Must be done after call to
1097      c_common_nodes_and_builtins for type nodes to be good.  */
1098   cpp_opts->precision = TYPE_PRECISION (intmax_type_node);
1099   cpp_opts->char_precision = TYPE_PRECISION (char_type_node);
1100   cpp_opts->int_precision = TYPE_PRECISION (integer_type_node);
1101   cpp_opts->wchar_precision = TYPE_PRECISION (wchar_type_node);
1102   cpp_opts->unsigned_wchar = TYPE_UNSIGNED (wchar_type_node);
1103   cpp_opts->bytes_big_endian = BYTES_BIG_ENDIAN;
1104 
1105   /* This can't happen until after wchar_precision and bytes_big_endian
1106      are known.  */
1107   cpp_init_iconv (parse_in);
1108 
1109   if (version_flag)
1110     {
1111       int i;
1112       fputs ("Compiler executable checksum: ", stderr);
1113       for (i = 0; i < 16; i++)
1114 	fprintf (stderr, "%02x", executable_checksum[i]);
1115       putc ('\n', stderr);
1116     }
1117 
1118   /* Has to wait until now so that cpplib has its hash table.  */
1119   init_pragma ();
1120 
1121   if (flag_preprocess_only)
1122     {
1123       c_finish_options ();
1124       preprocess_file (parse_in);
1125       return false;
1126     }
1127 
1128   return true;
1129 }
1130 
1131 /* Initialize the integrated preprocessor after debug output has been
1132    initialized; loop over each input file.  */
1133 void
1134 c_common_parse_file (void)
1135 {
1136   unsigned int i;
1137 
1138   i = 0;
1139   for (;;)
1140     {
1141       c_finish_options ();
1142       /* Open the dump file to use for the original dump output
1143          here, to be used during parsing for the current file.  */
1144       original_dump_file = dump_begin (TDI_original, &original_dump_flags);
1145       pch_init ();
1146       push_file_scope ();
1147       c_parse_file ();
1148       pop_file_scope ();
1149       /* And end the main input file, if the debug writer wants it  */
1150       if (debug_hooks->start_end_main_source_file)
1151 	(*debug_hooks->end_source_file) (0);
1152       if (++i >= num_in_fnames)
1153 	break;
1154       cpp_undef_all (parse_in);
1155       cpp_clear_file_cache (parse_in);
1156       this_input_filename
1157 	= cpp_read_main_file (parse_in, in_fnames[i]);
1158       if (original_dump_file)
1159         {
1160           dump_end (TDI_original, original_dump_file);
1161           original_dump_file = NULL;
1162         }
1163       /* If an input file is missing, abandon further compilation.
1164 	 cpplib has issued a diagnostic.  */
1165       if (!this_input_filename)
1166 	break;
1167     }
1168 
1169   c_parse_final_cleanups ();
1170 }
1171 
1172 /* Returns the appropriate dump file for PHASE to dump with FLAGS.  */
1173 
1174 FILE *
1175 get_dump_info (int phase, dump_flags_t *flags)
1176 {
1177   gcc_assert (phase == TDI_original);
1178 
1179   *flags = original_dump_flags;
1180   return original_dump_file;
1181 }
1182 
1183 /* Common finish hook for the C, ObjC and C++ front ends.  */
1184 void
1185 c_common_finish (void)
1186 {
1187   FILE *deps_stream = NULL;
1188 
1189   /* Note that we write the dependencies even if there are errors. This is
1190      useful for handling outdated generated headers that now trigger errors
1191      (for example, with #error) which would be resolved by re-generating
1192      them. In a sense, this complements -MG.  */
1193   if (cpp_opts->deps.style != DEPS_NONE)
1194     {
1195       /* If -M or -MM was seen without -MF, default output to the
1196 	 output stream.  */
1197       if (!deps_file)
1198 	deps_stream = out_stream;
1199       else if (deps_file[0] == '-' && deps_file[1] == '\0')
1200 	deps_stream = stdout;
1201       else
1202 	{
1203 	  deps_stream = fopen (deps_file, deps_append ? "a": "w");
1204 	  if (!deps_stream)
1205 	    fatal_error (input_location, "opening dependency file %s: %m",
1206 			 deps_file);
1207 	}
1208     }
1209 
1210   /* For performance, avoid tearing down cpplib's internal structures
1211      with cpp_destroy ().  */
1212   cpp_finish (parse_in, deps_stream);
1213 
1214   if (deps_stream && deps_stream != out_stream && deps_stream != stdout
1215       && (ferror (deps_stream) || fclose (deps_stream)))
1216     fatal_error (input_location, "closing dependency file %s: %m", deps_file);
1217 
1218   if (out_stream && (ferror (out_stream) || fclose (out_stream)))
1219     fatal_error (input_location, "when writing output to %s: %m", out_fname);
1220 }
1221 
1222 /* Either of two environment variables can specify output of
1223    dependencies.  Their value is either "OUTPUT_FILE" or "OUTPUT_FILE
1224    DEPS_TARGET", where OUTPUT_FILE is the file to write deps info to
1225    and DEPS_TARGET is the target to mention in the deps.  They also
1226    result in dependency information being appended to the output file
1227    rather than overwriting it, and like Sun's compiler
1228    SUNPRO_DEPENDENCIES suppresses the dependency on the main file.  */
1229 static void
1230 check_deps_environment_vars (void)
1231 {
1232   char *spec;
1233 
1234   spec = getenv ("DEPENDENCIES_OUTPUT");
1235   if (spec)
1236     cpp_opts->deps.style = DEPS_USER;
1237   else
1238     {
1239       spec = getenv ("SUNPRO_DEPENDENCIES");
1240       if (spec)
1241 	{
1242 	  cpp_opts->deps.style = DEPS_SYSTEM;
1243 	  cpp_opts->deps.ignore_main_file = true;
1244 	}
1245     }
1246 
1247   if (spec)
1248     {
1249       /* Find the space before the DEPS_TARGET, if there is one.  */
1250       char *s = strchr (spec, ' ');
1251       if (s)
1252 	{
1253 	  /* Let the caller perform MAKE quoting.  */
1254 	  defer_opt (OPT_MT, s + 1);
1255 	  *s = '\0';
1256 	}
1257 
1258       /* Command line -MF overrides environment variables and default.  */
1259       if (!deps_file)
1260 	deps_file = spec;
1261 
1262       deps_append = 1;
1263       deps_seen = true;
1264     }
1265 }
1266 
1267 /* Handle deferred command line switches.  */
1268 static void
1269 handle_deferred_opts (void)
1270 {
1271   size_t i;
1272   struct deps *deps;
1273 
1274   /* Avoid allocating the deps buffer if we don't need it.
1275      (This flag may be true without there having been -MT or -MQ
1276      options, but we'll still need the deps buffer.)  */
1277   if (!deps_seen)
1278     return;
1279 
1280   deps = cpp_get_deps (parse_in);
1281 
1282   for (i = 0; i < deferred_count; i++)
1283     {
1284       struct deferred_opt *opt = &deferred_opts[i];
1285 
1286       if (opt->code == OPT_MT || opt->code == OPT_MQ)
1287 	deps_add_target (deps, opt->arg, opt->code == OPT_MQ);
1288     }
1289 }
1290 
1291 /* These settings are appropriate for GCC, but not necessarily so for
1292    cpplib as a library.  */
1293 static void
1294 sanitize_cpp_opts (void)
1295 {
1296   /* If we don't know what style of dependencies to output, complain
1297      if any other dependency switches have been given.  */
1298   if (deps_seen && cpp_opts->deps.style == DEPS_NONE)
1299     error ("to generate dependencies you must specify either -M or -MM");
1300 
1301   /* -dM and dependencies suppress normal output; do it here so that
1302      the last -d[MDN] switch overrides earlier ones.  */
1303   if (flag_dump_macros == 'M')
1304     flag_no_output = 1;
1305 
1306   /* By default, -fdirectives-only implies -dD.  This allows subsequent phases
1307      to perform proper macro expansion.  */
1308   if (cpp_opts->directives_only && !cpp_opts->preprocessed && !flag_dump_macros)
1309     flag_dump_macros = 'D';
1310 
1311   /* Disable -dD, -dN and -dI if normal output is suppressed.  Allow
1312      -dM since at least glibc relies on -M -dM to work.  */
1313   /* Also, flag_no_output implies flag_no_line_commands, always.  */
1314   if (flag_no_output)
1315     {
1316       if (flag_dump_macros != 'M')
1317 	flag_dump_macros = 0;
1318       flag_dump_includes = 0;
1319       flag_no_line_commands = 1;
1320     }
1321   else if (cpp_opts->deps.missing_files)
1322     error ("-MG may only be used with -M or -MM");
1323 
1324   cpp_opts->unsigned_char = !flag_signed_char;
1325   cpp_opts->stdc_0_in_system_headers = STDC_0_IN_SYSTEM_HEADERS;
1326 
1327   /* Wlong-long is disabled by default. It is enabled by:
1328       [-Wpedantic | -Wtraditional] -std=[gnu|c]++98 ; or
1329       [-Wpedantic | -Wtraditional] -std=non-c99
1330 
1331       Either -Wlong-long or -Wno-long-long override any other settings.
1332       ??? These conditions should be handled in c.opt.  */
1333   if (warn_long_long == -1)
1334     {
1335       warn_long_long = ((pedantic || warn_traditional)
1336 			&& (c_dialect_cxx () ? cxx_dialect == cxx98 : !flag_isoc99));
1337       cpp_opts->cpp_warn_long_long = warn_long_long;
1338     }
1339 
1340   /* If we're generating preprocessor output, emit current directory
1341      if explicitly requested or if debugging information is enabled.
1342      ??? Maybe we should only do it for debugging formats that
1343      actually output the current directory?  */
1344   if (flag_working_directory == -1)
1345     flag_working_directory = (debug_info_level != DINFO_LEVEL_NONE);
1346 
1347   if (warn_implicit_fallthrough < 5)
1348     cpp_opts->cpp_warn_implicit_fallthrough = warn_implicit_fallthrough;
1349   else
1350     cpp_opts->cpp_warn_implicit_fallthrough = 0;
1351 
1352   if (cpp_opts->directives_only)
1353     {
1354       if (cpp_warn_unused_macros)
1355 	error ("-fdirectives-only is incompatible with -Wunused_macros");
1356       if (cpp_opts->traditional)
1357 	error ("-fdirectives-only is incompatible with -traditional");
1358     }
1359 }
1360 
1361 /* Add include path with a prefix at the front of its name.  */
1362 static void
1363 add_prefixed_path (const char *suffix, incpath_kind chain)
1364 {
1365   char *path;
1366   const char *prefix;
1367   size_t prefix_len, suffix_len;
1368 
1369   suffix_len = strlen (suffix);
1370   prefix     = iprefix ? iprefix : cpp_GCC_INCLUDE_DIR;
1371   prefix_len = iprefix ? strlen (iprefix) : cpp_GCC_INCLUDE_DIR_len;
1372 
1373   path = (char *) xmalloc (prefix_len + suffix_len + 1);
1374   memcpy (path, prefix, prefix_len);
1375   memcpy (path + prefix_len, suffix, suffix_len);
1376   path[prefix_len + suffix_len] = '\0';
1377 
1378   add_path (path, chain, 0, false);
1379 }
1380 
1381 /* Handle -D, -U, -A, -imacros, and the first -include.  */
1382 static void
1383 c_finish_options (void)
1384 {
1385   if (!cpp_opts->preprocessed)
1386     {
1387       size_t i;
1388 
1389       cb_file_change (parse_in,
1390 		      linemap_check_ordinary (linemap_add (line_table,
1391 							   LC_RENAME, 0,
1392 							   _("<built-in>"),
1393 							   0)));
1394       /* Make sure all of the builtins about to be declared have
1395 	 BUILTINS_LOCATION has their source_location.  */
1396       source_location builtins_loc = BUILTINS_LOCATION;
1397       cpp_force_token_locations (parse_in, &builtins_loc);
1398 
1399       cpp_init_builtins (parse_in, flag_hosted);
1400       c_cpp_builtins (parse_in);
1401 
1402       cpp_stop_forcing_token_locations (parse_in);
1403 
1404       /* We're about to send user input to cpplib, so make it warn for
1405 	 things that we previously (when we sent it internal definitions)
1406 	 told it to not warn.
1407 
1408 	 C99 permits implementation-defined characters in identifiers.
1409 	 The documented meaning of -std= is to turn off extensions that
1410 	 conflict with the specified standard, and since a strictly
1411 	 conforming program cannot contain a '$', we do not condition
1412 	 their acceptance on the -std= setting.  */
1413       cpp_opts->warn_dollars = (cpp_opts->cpp_pedantic && !cpp_opts->c99);
1414 
1415       cb_file_change (parse_in,
1416 		      linemap_check_ordinary (linemap_add (line_table, LC_RENAME, 0,
1417 							   _("<command-line>"), 0)));
1418 
1419       for (i = 0; i < deferred_count; i++)
1420 	{
1421 	  struct deferred_opt *opt = &deferred_opts[i];
1422 
1423 	  if (opt->code == OPT_D)
1424 	    cpp_define (parse_in, opt->arg);
1425 	  else if (opt->code == OPT_U)
1426 	    cpp_undef (parse_in, opt->arg);
1427 	  else if (opt->code == OPT_A)
1428 	    {
1429 	      if (opt->arg[0] == '-')
1430 		cpp_unassert (parse_in, opt->arg + 1);
1431 	      else
1432 		cpp_assert (parse_in, opt->arg);
1433 	    }
1434 	}
1435 
1436       /* Start the main input file, if the debug writer wants it. */
1437       if (debug_hooks->start_end_main_source_file
1438 	  && !flag_preprocess_only)
1439 	(*debug_hooks->start_source_file) (0, this_input_filename);
1440 
1441       /* Handle -imacros after -D and -U.  */
1442       for (i = 0; i < deferred_count; i++)
1443 	{
1444 	  struct deferred_opt *opt = &deferred_opts[i];
1445 
1446 	  if (opt->code == OPT_imacros
1447 	      && cpp_push_include (parse_in, opt->arg))
1448 	    {
1449 	      /* Disable push_command_line_include callback for now.  */
1450 	      include_cursor = deferred_count + 1;
1451 	      cpp_scan_nooutput (parse_in);
1452 	    }
1453 	}
1454     }
1455   else
1456     {
1457       if (cpp_opts->directives_only)
1458 	cpp_init_special_builtins (parse_in);
1459 
1460       /* Start the main input file, if the debug writer wants it. */
1461       if (debug_hooks->start_end_main_source_file
1462 	  && !flag_preprocess_only)
1463 	(*debug_hooks->start_source_file) (0, this_input_filename);
1464     }
1465 
1466   include_cursor = 0;
1467   push_command_line_include ();
1468 }
1469 
1470 /* Give CPP the next file given by -include, if any.  */
1471 static void
1472 push_command_line_include (void)
1473 {
1474   /* This can happen if disabled by -imacros for example.
1475      Punt so that we don't set "<command-line>" as the filename for
1476      the header.  */
1477   if (include_cursor > deferred_count)
1478     return;
1479 
1480   if (!done_preinclude)
1481     {
1482       done_preinclude = true;
1483       if (flag_hosted && std_inc && !cpp_opts->preprocessed)
1484 	{
1485 	  const char *preinc = targetcm.c_preinclude ();
1486 	  if (preinc && cpp_push_default_include (parse_in, preinc))
1487 	    return;
1488 	}
1489     }
1490 
1491   pch_cpp_save_state ();
1492 
1493   while (include_cursor < deferred_count)
1494     {
1495       struct deferred_opt *opt = &deferred_opts[include_cursor++];
1496 
1497       if (!cpp_opts->preprocessed && opt->code == OPT_include
1498 	  && cpp_push_include (parse_in, opt->arg))
1499 	return;
1500     }
1501 
1502   if (include_cursor == deferred_count)
1503     {
1504       include_cursor++;
1505       /* -Wunused-macros should only warn about macros defined hereafter.  */
1506       cpp_opts->warn_unused_macros = cpp_warn_unused_macros;
1507       /* Restore the line map from <command line>.  */
1508       if (!cpp_opts->preprocessed)
1509 	cpp_change_file (parse_in, LC_RENAME, this_input_filename);
1510 
1511       /* Set this here so the client can change the option if it wishes,
1512 	 and after stacking the main file so we don't trace the main file.  */
1513       line_table->trace_includes = cpp_opts->print_include_names;
1514     }
1515 }
1516 
1517 /* File change callback.  Has to handle -include files.  */
1518 static void
1519 cb_file_change (cpp_reader * ARG_UNUSED (pfile),
1520 		const line_map_ordinary *new_map)
1521 {
1522   if (flag_preprocess_only)
1523     pp_file_change (new_map);
1524   else
1525     fe_file_change (new_map);
1526 
1527   if (new_map
1528       && (new_map->reason == LC_ENTER || new_map->reason == LC_RENAME))
1529     {
1530       /* Signal to plugins that a file is included.  This could happen
1531 	 several times with the same file path, e.g. because of
1532 	 several '#include' or '#line' directives...  */
1533       invoke_plugin_callbacks
1534 	(PLUGIN_INCLUDE_FILE,
1535 	 const_cast<char*> (ORDINARY_MAP_FILE_NAME (new_map)));
1536     }
1537 
1538   if (new_map == 0 || (new_map->reason == LC_LEAVE && MAIN_FILE_P (new_map)))
1539     {
1540       pch_cpp_save_state ();
1541       push_command_line_include ();
1542     }
1543 }
1544 
1545 void
1546 cb_dir_change (cpp_reader * ARG_UNUSED (pfile), const char *dir)
1547 {
1548   if (!set_src_pwd (dir))
1549     warning (0, "too late for # directive to set debug directory");
1550 }
1551 
1552 /* Set the C 89 standard (with 1994 amendments if C94, without GNU
1553    extensions if ISO).  There is no concept of gnu94.  */
1554 static void
1555 set_std_c89 (int c94, int iso)
1556 {
1557   cpp_set_lang (parse_in, c94 ? CLK_STDC94: iso ? CLK_STDC89: CLK_GNUC89);
1558   flag_iso = iso;
1559   flag_no_asm = iso;
1560   flag_no_gnu_keywords = iso;
1561   flag_no_nonansi_builtin = iso;
1562   flag_isoc94 = c94;
1563   flag_isoc99 = 0;
1564   flag_isoc11 = 0;
1565   lang_hooks.name = "GNU C89";
1566 }
1567 
1568 /* Set the C 99 standard (without GNU extensions if ISO).  */
1569 static void
1570 set_std_c99 (int iso)
1571 {
1572   cpp_set_lang (parse_in, iso ? CLK_STDC99: CLK_GNUC99);
1573   flag_no_asm = iso;
1574   flag_no_nonansi_builtin = iso;
1575   flag_iso = iso;
1576   flag_isoc11 = 0;
1577   flag_isoc99 = 1;
1578   flag_isoc94 = 1;
1579   lang_hooks.name = "GNU C99";
1580 }
1581 
1582 /* Set the C 11 standard (without GNU extensions if ISO).  */
1583 static void
1584 set_std_c11 (int iso)
1585 {
1586   cpp_set_lang (parse_in, iso ? CLK_STDC11: CLK_GNUC11);
1587   flag_no_asm = iso;
1588   flag_no_nonansi_builtin = iso;
1589   flag_iso = iso;
1590   flag_isoc11 = 1;
1591   flag_isoc99 = 1;
1592   flag_isoc94 = 1;
1593   lang_hooks.name = "GNU C11";
1594 }
1595 
1596 /* Set the C 17 standard (without GNU extensions if ISO).  */
1597 static void
1598 set_std_c17 (int iso)
1599 {
1600   cpp_set_lang (parse_in, iso ? CLK_STDC17: CLK_GNUC17);
1601   flag_no_asm = iso;
1602   flag_no_nonansi_builtin = iso;
1603   flag_iso = iso;
1604   flag_isoc11 = 1;
1605   flag_isoc99 = 1;
1606   flag_isoc94 = 1;
1607   lang_hooks.name = "GNU C17";
1608 }
1609 
1610 
1611 /* Set the C++ 98 standard (without GNU extensions if ISO).  */
1612 static void
1613 set_std_cxx98 (int iso)
1614 {
1615   cpp_set_lang (parse_in, iso ? CLK_CXX98: CLK_GNUCXX);
1616   flag_no_gnu_keywords = iso;
1617   flag_no_nonansi_builtin = iso;
1618   flag_iso = iso;
1619   flag_isoc94 = 0;
1620   flag_isoc99 = 0;
1621   cxx_dialect = cxx98;
1622   lang_hooks.name = "GNU C++98";
1623 }
1624 
1625 /* Set the C++ 2011 standard (without GNU extensions if ISO).  */
1626 static void
1627 set_std_cxx11 (int iso)
1628 {
1629   cpp_set_lang (parse_in, iso ? CLK_CXX11: CLK_GNUCXX11);
1630   flag_no_gnu_keywords = iso;
1631   flag_no_nonansi_builtin = iso;
1632   flag_iso = iso;
1633   /* C++11 includes the C99 standard library.  */
1634   flag_isoc94 = 1;
1635   flag_isoc99 = 1;
1636   cxx_dialect = cxx11;
1637   lang_hooks.name = "GNU C++11";
1638 }
1639 
1640 /* Set the C++ 2014 standard (without GNU extensions if ISO).  */
1641 static void
1642 set_std_cxx14 (int iso)
1643 {
1644   cpp_set_lang (parse_in, iso ? CLK_CXX14: CLK_GNUCXX14);
1645   flag_no_gnu_keywords = iso;
1646   flag_no_nonansi_builtin = iso;
1647   flag_iso = iso;
1648   /* C++14 includes the C99 standard library.  */
1649   flag_isoc94 = 1;
1650   flag_isoc99 = 1;
1651   cxx_dialect = cxx14;
1652   lang_hooks.name = "GNU C++14";
1653 }
1654 
1655 /* Set the C++ 2017 standard (without GNU extensions if ISO).  */
1656 static void
1657 set_std_cxx17 (int iso)
1658 {
1659   cpp_set_lang (parse_in, iso ? CLK_CXX17: CLK_GNUCXX17);
1660   flag_no_gnu_keywords = iso;
1661   flag_no_nonansi_builtin = iso;
1662   flag_iso = iso;
1663   /* C++17 includes the C11 standard library.  */
1664   flag_isoc94 = 1;
1665   flag_isoc99 = 1;
1666   flag_isoc11 = 1;
1667   cxx_dialect = cxx17;
1668   lang_hooks.name = "GNU C++17";
1669 }
1670 
1671 /* Set the C++ 202a draft standard (without GNU extensions if ISO).  */
1672 static void
1673 set_std_cxx2a (int iso)
1674 {
1675   cpp_set_lang (parse_in, iso ? CLK_CXX2A: CLK_GNUCXX2A);
1676   flag_no_gnu_keywords = iso;
1677   flag_no_nonansi_builtin = iso;
1678   flag_iso = iso;
1679   /* C++17 includes the C11 standard library.  */
1680   flag_isoc94 = 1;
1681   flag_isoc99 = 1;
1682   flag_isoc11 = 1;
1683   cxx_dialect = cxx2a;
1684   lang_hooks.name = "GNU C++17"; /* Pretend C++17 until standardization.  */
1685 }
1686 
1687 /* Args to -d specify what to dump.  Silently ignore
1688    unrecognized options; they may be aimed at toplev.c.  */
1689 static void
1690 handle_OPT_d (const char *arg)
1691 {
1692   char c;
1693 
1694   while ((c = *arg++) != '\0')
1695     switch (c)
1696       {
1697       case 'M':			/* Dump macros only.  */
1698       case 'N':			/* Dump names.  */
1699       case 'D':			/* Dump definitions.  */
1700       case 'U':			/* Dump used macros.  */
1701 	flag_dump_macros = c;
1702 	break;
1703 
1704       case 'I':
1705 	flag_dump_includes = 1;
1706 	break;
1707       }
1708 }
1709