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