OSDN Git Service

2010-07-26 Tobias Burnus <burnus@net-b.de>
[pf3gnuchains/gcc-fork.git] / gcc / toplev.c
1 /* Top level of GCC compilers (cc1, cc1plus, etc.)
2    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4    Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 /* This is the top level of cc1/c++.
23    It parses command args, opens files, invokes the various passes
24    in the proper order, and counts the time used by each.
25    Error messages and low-level interface to malloc also handled here.  */
26
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include <signal.h>
32
33 #ifdef HAVE_SYS_RESOURCE_H
34 # include <sys/resource.h>
35 #endif
36
37 #ifdef HAVE_SYS_TIMES_H
38 # include <sys/times.h>
39 #endif
40
41 #include "line-map.h"
42 #include "input.h"
43 #include "tree.h"
44 #include "realmpfr.h"   /* For GMP/MPFR/MPC versions, in print_version.  */
45 #include "version.h"
46 #include "rtl.h"
47 #include "tm_p.h"
48 #include "flags.h"
49 #include "insn-attr.h"
50 #include "insn-config.h"
51 #include "insn-flags.h"
52 #include "hard-reg-set.h"
53 #include "recog.h"
54 #include "output.h"
55 #include "except.h"
56 #include "function.h"
57 #include "toplev.h"
58 #include "expr.h"
59 #include "basic-block.h"
60 #include "intl.h"
61 #include "ggc.h"
62 #include "graph.h"
63 #include "regs.h"
64 #include "timevar.h"
65 #include "diagnostic.h"
66 #include "tree-diagnostic.h"
67 #include "tree-pretty-print.h"
68 #include "params.h"
69 #include "reload.h"
70 #include "ira.h"
71 #include "dwarf2asm.h"
72 #include "integrate.h"
73 #include "debug.h"
74 #include "target.h"
75 #include "langhooks.h"
76 #include "cfglayout.h"
77 #include "cfgloop.h"
78 #include "hosthooks.h"
79 #include "cgraph.h"
80 #include "opts.h"
81 #include "opts-diagnostic.h"
82 #include "coverage.h"
83 #include "value-prof.h"
84 #include "alloc-pool.h"
85 #include "tree-mudflap.h"
86 #include "tree-pass.h"
87 #include "gimple.h"
88 #include "tree-ssa-alias.h"
89 #include "plugin.h"
90
91 #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
92 #include "dwarf2out.h"
93 #endif
94
95 #if defined(DBX_DEBUGGING_INFO) || defined(XCOFF_DEBUGGING_INFO)
96 #include "dbxout.h"
97 #endif
98
99 #ifdef SDB_DEBUGGING_INFO
100 #include "sdbout.h"
101 #endif
102
103 #ifdef XCOFF_DEBUGGING_INFO
104 #include "xcoffout.h"           /* Needed for external data
105                                    declarations for e.g. AIX 4.x.  */
106 #endif
107
108 static void general_init (const char *);
109 static void do_compile (void);
110 static void process_options (void);
111 static void backend_init (void);
112 static int lang_dependent_init (const char *);
113 static void init_asm_output (const char *);
114 static void finalize (void);
115
116 static void crash_signal (int) ATTRIBUTE_NORETURN;
117 static void setup_core_dumping (void);
118 static void compile_file (void);
119
120 /* Nonzero to dump debug info whilst parsing (-dy option).  */
121 static int set_yydebug;
122
123 /* True if we don't need a backend (e.g. preprocessing only).  */
124 static bool no_backend;
125
126 /* Length of line when printing switch values.  */
127 #define MAX_LINE 75
128
129 /* Decoded options, and number of such options.  */
130 static struct cl_decoded_option *save_decoded_options;
131 static unsigned int save_decoded_options_count;
132
133 /* Name of top-level original source file (what was input to cpp).
134    This comes from the #-command at the beginning of the actual input.
135    If there isn't any there, then this is the cc1 input file name.  */
136
137 const char *main_input_filename;
138
139 /* Used to enable -fvar-tracking, -fweb and -frename-registers according
140    to optimize in process_options ().  */
141 #define AUTODETECT_VALUE 2
142
143 /* Name to use as base of names for dump output files.  */
144
145 const char *dump_base_name;
146
147 /* Directory used for dump output files.  */
148
149 const char *dump_dir_name;
150
151 /* Name to use as a base for auxiliary output files.  */
152
153 const char *aux_base_name;
154
155 /* Prefix for profile data files */
156 const char *profile_data_prefix;
157
158 /* A mask of target_flags that includes bit X if X was set or cleared
159    on the command line.  */
160
161 int target_flags_explicit;
162
163 /* Debug hooks - dependent upon command line options.  */
164
165 const struct gcc_debug_hooks *debug_hooks;
166
167 /* Other flags saying which kinds of debugging dump have been requested.  */
168
169 int rtl_dump_and_exit;
170 int flag_print_asm_name;
171 enum graph_dump_types graph_dump_format;
172
173 /* Name for output file of assembly code, specified with -o.  */
174
175 const char *asm_file_name;
176
177 /* Nonzero means do optimizations.  -O.
178    Particular numeric values stand for particular amounts of optimization;
179    thus, -O2 stores 2 here.  However, the optimizations beyond the basic
180    ones are not controlled directly by this variable.  Instead, they are
181    controlled by individual `flag_...' variables that are defaulted
182    based on this variable.  */
183
184 int optimize = 0;
185
186 /* Nonzero means optimize for size.  -Os.
187    The only valid values are zero and nonzero. When optimize_size is
188    nonzero, optimize defaults to 2, but certain individual code
189    bloating optimizations are disabled.  */
190
191 int optimize_size = 0;
192
193 /* True if this is the lto front end.  This is used to disable
194    gimple generation and lowering passes that are normally run on the
195    output of a front end.  These passes must be bypassed for lto since
196    they have already been done before the gimple was written.  */
197
198 bool in_lto_p = false;
199
200 /* Nonzero if we should write GIMPLE bytecode for link-time optimization.  */
201
202 int flag_generate_lto;
203
204 /* The FUNCTION_DECL for the function currently being compiled,
205    or 0 if between functions.  */
206 tree current_function_decl;
207
208 /* Set to the FUNC_BEGIN label of the current function, or NULL
209    if none.  */
210 const char * current_function_func_begin_label;
211
212 /* A random sequence of characters, unless overridden by user.  */
213 static const char *flag_random_seed;
214
215 /* A local time stamp derived from the time of compilation. It will be
216    zero if the system cannot provide a time.  It will be -1u, if the
217    user has specified a particular random seed.  */
218 unsigned local_tick;
219
220 /* -f flags.  */
221
222 /* 0 means straightforward implementation of complex divide acceptable.
223    1 means wide ranges of inputs must work for complex divide.
224    2 means C99-like requirements for complex multiply and divide.  */
225
226 int flag_complex_method = 1;
227
228 /* Nonzero means we should be saving declaration info into a .X file.  */
229
230 int flag_gen_aux_info = 0;
231
232 /* Specified name of aux-info file.  */
233
234 const char *aux_info_file_name;
235
236 /* Nonzero if we are compiling code for a shared library, zero for
237    executable.  */
238
239 int flag_shlib;
240
241 /* Generate code for GNU or NeXT Objective-C runtime environment.  */
242
243 #ifdef NEXT_OBJC_RUNTIME
244 int flag_next_runtime = 1;
245 #else
246 int flag_next_runtime = 0;
247 #endif
248
249 /* Set to the default thread-local storage (tls) model to use.  */
250
251 enum tls_model flag_tls_default = TLS_MODEL_GLOBAL_DYNAMIC;
252
253 /* Set the default region and algorithm for the integrated register
254    allocator.  */
255
256 enum ira_algorithm flag_ira_algorithm = IRA_ALGORITHM_CB;
257 enum ira_region flag_ira_region = IRA_REGION_MIXED;
258
259 /* Set the default for excess precision.  */
260
261 enum excess_precision flag_excess_precision_cmdline = EXCESS_PRECISION_DEFAULT;
262
263 /* Nonzero means change certain warnings into errors.
264    Usually these are warnings about failure to conform to some standard.  */
265
266 int flag_pedantic_errors = 0;
267
268 /* Nonzero means make permerror produce warnings instead of errors.  */
269
270 int flag_permissive = 0;
271
272 /* -dA causes debug commentary information to be produced in
273    the generated assembly code (to make it more readable).  This option
274    is generally only of use to those who actually need to read the
275    generated assembly code (perhaps while debugging the compiler itself).
276    Currently, this switch is only used by dwarfout.c; however, it is intended
277    to be a catchall for printing debug information in the assembler file.  */
278
279 int flag_debug_asm = 0;
280
281 /* -dP causes the rtl to be emitted as a comment in assembly.  */
282
283 int flag_dump_rtl_in_asm = 0;
284
285 /* When non-NULL, indicates that whenever space is allocated on the
286    stack, the resulting stack pointer must not pass this
287    address---that is, for stacks that grow downward, the stack pointer
288    must always be greater than or equal to this address; for stacks
289    that grow upward, the stack pointer must be less than this address.
290    At present, the rtx may be either a REG or a SYMBOL_REF, although
291    the support provided depends on the backend.  */
292 rtx stack_limit_rtx;
293
294 /* Positive if we should track variables, negative if we should run
295    the var-tracking pass only to discard debug annotations, zero if
296    we're not to run it.  When flag_var_tracking == AUTODETECT_VALUE it
297    will be set according to optimize, debug_info_level and debug_hooks
298    in process_options ().  */
299 int flag_var_tracking = AUTODETECT_VALUE;
300
301 /* Positive if we should track variables at assignments, negative if
302    we should run the var-tracking pass only to discard debug
303    annotations.  When flag_var_tracking_assignments ==
304    AUTODETECT_VALUE it will be set according to flag_var_tracking.  */
305 int flag_var_tracking_assignments = AUTODETECT_VALUE;
306
307 /* Nonzero if we should toggle flag_var_tracking_assignments after
308    processing options and computing its default.  */
309 int flag_var_tracking_assignments_toggle = 0;
310
311 /* Type of stack check.  */
312 enum stack_check_type flag_stack_check = NO_STACK_CHECK;
313
314 /* True if the user has tagged the function with the 'section'
315    attribute.  */
316
317 bool user_defined_section_attribute = false;
318
319 struct target_flag_state default_target_flag_state;
320 #if SWITCHABLE_TARGET
321 struct target_flag_state *this_target_flag_state = &default_target_flag_state;
322 #else
323 #define this_target_flag_state (&default_target_flag_state)
324 #endif
325
326 typedef struct
327 {
328   const char *const string;
329   int *const variable;
330   const int on_value;
331 }
332 lang_independent_options;
333
334 /* Nonzero if subexpressions must be evaluated from left-to-right.  */
335 int flag_evaluation_order = 0;
336
337 /* The user symbol prefix after having resolved same.  */
338 const char *user_label_prefix;
339
340 static const param_info lang_independent_params[] = {
341 #define DEFPARAM(ENUM, OPTION, HELP, DEFAULT, MIN, MAX) \
342   { OPTION, DEFAULT, false, MIN, MAX, HELP },
343 #include "params.def"
344 #undef DEFPARAM
345   { NULL, 0, false, 0, 0, NULL }
346 };
347
348 /* Output files for assembler code (real compiler output)
349    and debugging dumps.  */
350
351 FILE *asm_out_file;
352 FILE *aux_info_file;
353 FILE *dump_file = NULL;
354 const char *dump_file_name;
355
356 /* The current working directory of a translation.  It's generally the
357    directory from which compilation was initiated, but a preprocessed
358    file may specify the original directory in which it was
359    created.  */
360
361 static const char *src_pwd;
362
363 /* Initialize src_pwd with the given string, and return true.  If it
364    was already initialized, return false.  As a special case, it may
365    be called with a NULL argument to test whether src_pwd has NOT been
366    initialized yet.  */
367
368 bool
369 set_src_pwd (const char *pwd)
370 {
371   if (src_pwd)
372     {
373       if (strcmp (src_pwd, pwd) == 0)
374         return true;
375       else
376         return false;
377     }
378
379   src_pwd = xstrdup (pwd);
380   return true;
381 }
382
383 /* Return the directory from which the translation unit was initiated,
384    in case set_src_pwd() was not called before to assign it a
385    different value.  */
386
387 const char *
388 get_src_pwd (void)
389 {
390   if (! src_pwd)
391     {
392       src_pwd = getpwd ();
393       if (!src_pwd)
394         src_pwd = ".";
395     }
396
397    return src_pwd;
398 }
399
400 /* Called when the start of a function definition is parsed,
401    this function prints on stderr the name of the function.  */
402 void
403 announce_function (tree decl)
404 {
405   if (!quiet_flag)
406     {
407       if (rtl_dump_and_exit)
408         fprintf (stderr, "%s ",
409                  identifier_to_locale (IDENTIFIER_POINTER (DECL_NAME (decl))));
410       else
411         fprintf (stderr, " %s",
412                  identifier_to_locale (lang_hooks.decl_printable_name (decl, 2)));
413       fflush (stderr);
414       pp_needs_newline (global_dc->printer) = true;
415       diagnostic_set_last_function (global_dc, (diagnostic_info *) NULL);
416     }
417 }
418
419 /* Initialize local_tick with the time of day, or -1 if
420    flag_random_seed is set.  */
421
422 static void
423 init_local_tick (void)
424 {
425   if (!flag_random_seed)
426     {
427       /* Get some more or less random data.  */
428 #ifdef HAVE_GETTIMEOFDAY
429       {
430         struct timeval tv;
431
432         gettimeofday (&tv, NULL);
433         local_tick = tv.tv_sec * 1000 + tv.tv_usec / 1000;
434       }
435 #else
436       {
437         time_t now = time (NULL);
438
439         if (now != (time_t)-1)
440           local_tick = (unsigned) now;
441       }
442 #endif
443     }
444   else
445     local_tick = -1;
446 }
447
448 /* Set up a default flag_random_seed and local_tick, unless the user
449    already specified one.  Must be called after init_local_tick.  */
450
451 static void
452 init_random_seed (void)
453 {
454   unsigned HOST_WIDE_INT value;
455   static char random_seed[HOST_BITS_PER_WIDE_INT / 4 + 3];
456
457   value = local_tick ^ getpid ();
458
459   sprintf (random_seed, HOST_WIDE_INT_PRINT_HEX, value);
460   flag_random_seed = random_seed;
461 }
462
463 /* Obtain the random_seed string.  Unless NOINIT, initialize it if
464    it's not provided in the command line.  */
465
466 const char *
467 get_random_seed (bool noinit)
468 {
469   if (!flag_random_seed && !noinit)
470     init_random_seed ();
471   return flag_random_seed;
472 }
473
474 /* Modify the random_seed string to VAL.  Return its previous
475    value.  */
476
477 const char *
478 set_random_seed (const char *val)
479 {
480   const char *old = flag_random_seed;
481   flag_random_seed = val;
482   return old;
483 }
484
485 #if GCC_VERSION < 3004
486
487 /* The functions floor_log2 and exact_log2 are defined as inline
488    functions in toplev.h if GCC_VERSION >= 3004.  The definitions here
489    are used for older versions of gcc.  */
490
491 /* Given X, an unsigned number, return the largest int Y such that 2**Y <= X.
492    If X is 0, return -1.  */
493
494 int
495 floor_log2 (unsigned HOST_WIDE_INT x)
496 {
497   int t = 0;
498
499   if (x == 0)
500     return -1;
501
502   if (HOST_BITS_PER_WIDE_INT > 64)
503     if (x >= (unsigned HOST_WIDE_INT) 1 << (t + 64))
504       t += 64;
505   if (HOST_BITS_PER_WIDE_INT > 32)
506     if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 32))
507       t += 32;
508   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 16))
509     t += 16;
510   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 8))
511     t += 8;
512   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 4))
513     t += 4;
514   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 2))
515     t += 2;
516   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 1))
517     t += 1;
518
519   return t;
520 }
521
522 /* Return the logarithm of X, base 2, considering X unsigned,
523    if X is a power of 2.  Otherwise, returns -1.  */
524
525 int
526 exact_log2 (unsigned HOST_WIDE_INT x)
527 {
528   if (x != (x & -x))
529     return -1;
530   return floor_log2 (x);
531 }
532
533 #endif /* GCC_VERSION < 3004 */
534
535 /* Handler for fatal signals, such as SIGSEGV.  These are transformed
536    into ICE messages, which is much more user friendly.  In case the
537    error printer crashes, reset the signal to prevent infinite recursion.  */
538
539 static void
540 crash_signal (int signo)
541 {
542   signal (signo, SIG_DFL);
543
544   /* If we crashed while processing an ASM statement, then be a little more
545      graceful.  It's most likely the user's fault.  */
546   if (this_is_asm_operands)
547     {
548       output_operand_lossage ("unrecoverable error");
549       exit (FATAL_EXIT_CODE);
550     }
551
552   internal_error ("%s", strsignal (signo));
553 }
554
555 /* Arrange to dump core on error.  (The regular error message is still
556    printed first, except in the case of abort().)  */
557
558 static void
559 setup_core_dumping (void)
560 {
561 #ifdef SIGABRT
562   signal (SIGABRT, SIG_DFL);
563 #endif
564 #if defined(HAVE_SETRLIMIT)
565   {
566     struct rlimit rlim;
567     if (getrlimit (RLIMIT_CORE, &rlim) != 0)
568       fatal_error ("getting core file size maximum limit: %m");
569     rlim.rlim_cur = rlim.rlim_max;
570     if (setrlimit (RLIMIT_CORE, &rlim) != 0)
571       fatal_error ("setting core file size limit to maximum: %m");
572   }
573 #endif
574   diagnostic_abort_on_error (global_dc);
575 }
576
577
578 /* Strip off a legitimate source ending from the input string NAME of
579    length LEN.  Rather than having to know the names used by all of
580    our front ends, we strip off an ending of a period followed by
581    up to five characters.  (Java uses ".class".)  */
582
583 void
584 strip_off_ending (char *name, int len)
585 {
586   int i;
587   for (i = 2; i < 6 && len > i; i++)
588     {
589       if (name[len - i] == '.')
590         {
591           name[len - i] = '\0';
592           break;
593         }
594     }
595 }
596
597 /* Output a quoted string.  */
598
599 void
600 output_quoted_string (FILE *asm_file, const char *string)
601 {
602 #ifdef OUTPUT_QUOTED_STRING
603   OUTPUT_QUOTED_STRING (asm_file, string);
604 #else
605   char c;
606
607   putc ('\"', asm_file);
608   while ((c = *string++) != 0)
609     {
610       if (ISPRINT (c))
611         {
612           if (c == '\"' || c == '\\')
613             putc ('\\', asm_file);
614           putc (c, asm_file);
615         }
616       else
617         fprintf (asm_file, "\\%03o", (unsigned char) c);
618     }
619   putc ('\"', asm_file);
620 #endif
621 }
622
623 /* Output a file name in the form wanted by System V.  */
624
625 void
626 output_file_directive (FILE *asm_file, const char *input_name)
627 {
628   int len;
629   const char *na;
630
631   if (input_name == NULL)
632     input_name = "<stdin>";
633   else
634     input_name = remap_debug_filename (input_name);
635
636   len = strlen (input_name);
637   na = input_name + len;
638
639   /* NA gets INPUT_NAME sans directory names.  */
640   while (na > input_name)
641     {
642       if (IS_DIR_SEPARATOR (na[-1]))
643         break;
644       na--;
645     }
646
647 #ifdef ASM_OUTPUT_SOURCE_FILENAME
648   ASM_OUTPUT_SOURCE_FILENAME (asm_file, na);
649 #else
650   fprintf (asm_file, "\t.file\t");
651   output_quoted_string (asm_file, na);
652   putc ('\n', asm_file);
653 #endif
654 }
655
656 /* A subroutine of wrapup_global_declarations.  We've come to the end of
657    the compilation unit.  All deferred variables should be undeferred,
658    and all incomplete decls should be finalized.  */
659
660 void
661 wrapup_global_declaration_1 (tree decl)
662 {
663   /* We're not deferring this any longer.  Assignment is conditional to
664      avoid needlessly dirtying PCH pages.  */
665   if (CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_WITH_VIS)
666       && DECL_DEFER_OUTPUT (decl) != 0)
667     DECL_DEFER_OUTPUT (decl) = 0;
668
669   if (TREE_CODE (decl) == VAR_DECL && DECL_SIZE (decl) == 0)
670     lang_hooks.finish_incomplete_decl (decl);
671 }
672
673 /* A subroutine of wrapup_global_declarations.  Decide whether or not DECL
674    needs to be output.  Return true if it is output.  */
675
676 bool
677 wrapup_global_declaration_2 (tree decl)
678 {
679   if (TREE_ASM_WRITTEN (decl) || DECL_EXTERNAL (decl))
680     return false;
681
682   /* Don't write out static consts, unless we still need them.
683
684      We also keep static consts if not optimizing (for debugging),
685      unless the user specified -fno-keep-static-consts.
686      ??? They might be better written into the debug information.
687      This is possible when using DWARF.
688
689      A language processor that wants static constants to be always
690      written out (even if it is not used) is responsible for
691      calling rest_of_decl_compilation itself.  E.g. the C front-end
692      calls rest_of_decl_compilation from finish_decl.
693      One motivation for this is that is conventional in some
694      environments to write things like:
695      static const char rcsid[] = "... version string ...";
696      intending to force the string to be in the executable.
697
698      A language processor that would prefer to have unneeded
699      static constants "optimized away" would just defer writing
700      them out until here.  E.g. C++ does this, because static
701      constants are often defined in header files.
702
703      ??? A tempting alternative (for both C and C++) would be
704      to force a constant to be written if and only if it is
705      defined in a main file, as opposed to an include file.  */
706
707   if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
708     {
709       struct varpool_node *node;
710       bool needed = true;
711       node = varpool_get_node (decl);
712
713       if (!node && flag_ltrans)
714         needed = false;
715       else if (node && node->finalized)
716         needed = false;
717       else if (node && node->alias)
718         needed = false;
719       else if (!cgraph_global_info_ready
720                && (TREE_USED (decl)
721                    || TREE_USED (DECL_ASSEMBLER_NAME (decl))))
722         /* needed */;
723       else if (node && node->needed)
724         /* needed */;
725       else if (DECL_COMDAT (decl))
726         needed = false;
727       else if (TREE_READONLY (decl) && !TREE_PUBLIC (decl)
728                && (optimize || !flag_keep_static_consts
729                    || DECL_ARTIFICIAL (decl)))
730         needed = false;
731
732       if (needed)
733         {
734           rest_of_decl_compilation (decl, 1, 1);
735           return true;
736         }
737     }
738
739   return false;
740 }
741
742 /* Do any final processing required for the declarations in VEC, of
743    which there are LEN.  We write out inline functions and variables
744    that have been deferred until this point, but which are required.
745    Returns nonzero if anything was put out.  */
746
747 bool
748 wrapup_global_declarations (tree *vec, int len)
749 {
750   bool reconsider, output_something = false;
751   int i;
752
753   for (i = 0; i < len; i++)
754     wrapup_global_declaration_1 (vec[i]);
755
756   /* Now emit any global variables or functions that we have been
757      putting off.  We need to loop in case one of the things emitted
758      here references another one which comes earlier in the list.  */
759   do
760     {
761       reconsider = false;
762       for (i = 0; i < len; i++)
763         reconsider |= wrapup_global_declaration_2 (vec[i]);
764       if (reconsider)
765         output_something = true;
766     }
767   while (reconsider);
768
769   return output_something;
770 }
771
772 /* A subroutine of check_global_declarations.  Issue appropriate warnings
773    for the global declaration DECL.  */
774
775 void
776 check_global_declaration_1 (tree decl)
777 {
778   /* Warn about any function declared static but not defined.  We don't
779      warn about variables, because many programs have static variables
780      that exist only to get some text into the object file.  */
781   if (TREE_CODE (decl) == FUNCTION_DECL
782       && DECL_INITIAL (decl) == 0
783       && DECL_EXTERNAL (decl)
784       && ! DECL_ARTIFICIAL (decl)
785       && ! TREE_NO_WARNING (decl)
786       && ! TREE_PUBLIC (decl)
787       && (warn_unused_function
788           || TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
789     {
790       if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
791         pedwarn (input_location, 0, "%q+F used but never defined", decl);
792       else
793         warning (OPT_Wunused_function, "%q+F declared %<static%> but never defined", decl);
794       /* This symbol is effectively an "extern" declaration now.  */
795       TREE_PUBLIC (decl) = 1;
796       assemble_external (decl);
797     }
798
799   /* Warn about static fns or vars defined but not used.  */
800   if (((warn_unused_function && TREE_CODE (decl) == FUNCTION_DECL)
801        /* We don't warn about "static const" variables because the
802           "rcs_id" idiom uses that construction.  */
803        || (warn_unused_variable
804            && TREE_CODE (decl) == VAR_DECL && ! TREE_READONLY (decl)))
805       && ! DECL_IN_SYSTEM_HEADER (decl)
806       && ! TREE_USED (decl)
807       /* The TREE_USED bit for file-scope decls is kept in the identifier,
808          to handle multiple external decls in different scopes.  */
809       && ! (DECL_NAME (decl) && TREE_USED (DECL_NAME (decl)))
810       && ! DECL_EXTERNAL (decl)
811       && ! TREE_PUBLIC (decl)
812       /* A volatile variable might be used in some non-obvious way.  */
813       && ! TREE_THIS_VOLATILE (decl)
814       /* Global register variables must be declared to reserve them.  */
815       && ! (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
816       /* Otherwise, ask the language.  */
817       && lang_hooks.decls.warn_unused_global (decl))
818     warning ((TREE_CODE (decl) == FUNCTION_DECL)
819              ? OPT_Wunused_function
820              : OPT_Wunused_variable,
821              "%q+D defined but not used", decl);
822 }
823
824 /* Issue appropriate warnings for the global declarations in VEC (of
825    which there are LEN).  */
826
827 void
828 check_global_declarations (tree *vec, int len)
829 {
830   int i;
831
832   for (i = 0; i < len; i++)
833     check_global_declaration_1 (vec[i]);
834 }
835
836 /* Emit debugging information for all global declarations in VEC.  */
837
838 void
839 emit_debug_global_declarations (tree *vec, int len)
840 {
841   int i;
842
843   /* Avoid confusing the debug information machinery when there are errors.  */
844   if (seen_error ())
845     return;
846
847   timevar_push (TV_SYMOUT);
848   for (i = 0; i < len; i++)
849     debug_hooks->global_decl (vec[i]);
850   timevar_pop (TV_SYMOUT);
851 }
852
853 /* Warn about a use of an identifier which was marked deprecated.  */
854 void
855 warn_deprecated_use (tree node, tree attr)
856 {
857   const char *msg;
858
859   if (node == 0 || !warn_deprecated_decl)
860     return;
861
862   if (!attr)
863     {
864       if (DECL_P (node))
865         attr = DECL_ATTRIBUTES (node);
866       else if (TYPE_P (node))
867         {
868           tree decl = TYPE_STUB_DECL (node);
869           if (decl)
870             attr = lookup_attribute ("deprecated",
871                                      TYPE_ATTRIBUTES (TREE_TYPE (decl)));
872         }
873     }
874
875   if (attr)
876     attr = lookup_attribute ("deprecated", attr);
877
878   if (attr)
879     msg = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)));
880   else
881     msg = NULL;
882
883   if (DECL_P (node))
884     {
885       expanded_location xloc = expand_location (DECL_SOURCE_LOCATION (node));
886       if (msg)
887         warning (OPT_Wdeprecated_declarations,
888                  "%qD is deprecated (declared at %s:%d): %s",
889                  node, xloc.file, xloc.line, msg);
890       else
891         warning (OPT_Wdeprecated_declarations,
892                  "%qD is deprecated (declared at %s:%d)",
893                  node, xloc.file, xloc.line);
894     }
895   else if (TYPE_P (node))
896     {
897       tree what = NULL_TREE;
898       tree decl = TYPE_STUB_DECL (node);
899
900       if (TYPE_NAME (node))
901         {
902           if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
903             what = TYPE_NAME (node);
904           else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
905                    && DECL_NAME (TYPE_NAME (node)))
906             what = DECL_NAME (TYPE_NAME (node));
907         }
908
909       if (decl)
910         {
911           expanded_location xloc
912             = expand_location (DECL_SOURCE_LOCATION (decl));
913           if (what)
914             {
915               if (msg)
916                 warning (OPT_Wdeprecated_declarations,
917                          "%qE is deprecated (declared at %s:%d): %s",
918                          what, xloc.file, xloc.line, msg);
919               else
920                 warning (OPT_Wdeprecated_declarations,
921                          "%qE is deprecated (declared at %s:%d)", what,
922                          xloc.file, xloc.line);
923             }
924           else
925             {
926               if (msg)
927                 warning (OPT_Wdeprecated_declarations,
928                          "type is deprecated (declared at %s:%d): %s",
929                          xloc.file, xloc.line, msg);
930               else
931                 warning (OPT_Wdeprecated_declarations,
932                          "type is deprecated (declared at %s:%d)",
933                          xloc.file, xloc.line);
934             }
935         }
936       else
937         {
938           if (what)
939             {
940               if (msg)
941                 warning (OPT_Wdeprecated_declarations, "%qE is deprecated: %s",
942                          what, msg);
943               else
944                 warning (OPT_Wdeprecated_declarations, "%qE is deprecated", what);
945             }
946           else
947             {
948               if (msg)
949                 warning (OPT_Wdeprecated_declarations, "type is deprecated: %s",
950                          msg);
951               else
952                 warning (OPT_Wdeprecated_declarations, "type is deprecated");
953             }
954         }
955     }
956 }
957
958 /* Compile an entire translation unit.  Write a file of assembly
959    output and various debugging dumps.  */
960
961 static void
962 compile_file (void)
963 {
964   /* Initialize yet another pass.  */
965
966   ggc_protect_identifiers = true;
967
968   init_cgraph ();
969   init_final (main_input_filename);
970   coverage_init (aux_base_name);
971   statistics_init ();
972   invoke_plugin_callbacks (PLUGIN_START_UNIT, NULL);
973
974   timevar_push (TV_PARSE);
975
976   /* Call the parser, which parses the entire file (calling
977      rest_of_compilation for each function).  */
978   lang_hooks.parse_file (set_yydebug);
979
980   /* Compilation is now finished except for writing
981      what's left of the symbol table output.  */
982   timevar_pop (TV_PARSE);
983
984   if (flag_syntax_only || flag_wpa)
985     return;
986
987   ggc_protect_identifiers = false;
988
989   /* This must also call cgraph_finalize_compilation_unit.  */
990   lang_hooks.decls.final_write_globals ();
991
992   if (seen_error ())
993     return;
994
995   /* Ensure that emulated TLS control vars are finalized and build 
996      a static constructor for them, when it is required.  */
997   if (!targetm.have_tls)
998     emutls_finish ();
999
1000   varpool_assemble_pending_decls ();
1001   finish_aliases_2 ();
1002
1003   /* Likewise for mudflap static object registrations.  */
1004   if (flag_mudflap)
1005     mudflap_finish_file ();
1006
1007   output_shared_constant_pool ();
1008   output_object_blocks ();
1009
1010   /* Write out any pending weak symbol declarations.  */
1011   weak_finish ();
1012
1013   /* This must be at the end before unwind and debug info.
1014      Some target ports emit PIC setup thunks here.  */
1015   targetm.asm_out.code_end ();
1016
1017   /* Do dbx symbols.  */
1018   timevar_push (TV_SYMOUT);
1019
1020 #if defined DWARF2_DEBUGGING_INFO || defined DWARF2_UNWIND_INFO
1021   if (dwarf2out_do_frame ())
1022     dwarf2out_frame_finish ();
1023 #endif
1024
1025   (*debug_hooks->finish) (main_input_filename);
1026   timevar_pop (TV_SYMOUT);
1027
1028   /* Output some stuff at end of file if nec.  */
1029
1030   dw2_output_indirect_constants ();
1031
1032   /* Flush any pending external directives.  */
1033   process_pending_assemble_externals ();
1034
1035   /* Emit LTO marker if LTO info has been previously emitted.  This is
1036      used by collect2 to determine whether an object file contains IL.
1037      We used to emit an undefined reference here, but this produces
1038      link errors if an object file with IL is stored into a shared
1039      library without invoking lto1.  */
1040   if (flag_generate_lto)
1041     {
1042 #if defined ASM_OUTPUT_ALIGNED_DECL_COMMON
1043       ASM_OUTPUT_ALIGNED_DECL_COMMON (asm_out_file, NULL_TREE,
1044                                       "__gnu_lto_v1",
1045                                       (unsigned HOST_WIDE_INT) 1, 8);
1046 #elif defined ASM_OUTPUT_ALIGNED_COMMON
1047       ASM_OUTPUT_ALIGNED_COMMON (asm_out_file, "__gnu_lto_v1",
1048                                  (unsigned HOST_WIDE_INT) 1, 8);
1049 #else
1050       ASM_OUTPUT_COMMON (asm_out_file, "__gnu_lto_v1",
1051                          (unsigned HOST_WIDE_INT) 1,
1052                          (unsigned HOST_WIDE_INT) 1);
1053 #endif
1054     }
1055
1056   /* Attach a special .ident directive to the end of the file to identify
1057      the version of GCC which compiled this code.  The format of the .ident
1058      string is patterned after the ones produced by native SVR4 compilers.  */
1059 #ifdef IDENT_ASM_OP
1060   if (!flag_no_ident)
1061     {
1062       const char *pkg_version = "(GNU) ";
1063
1064       if (strcmp ("(GCC) ", pkgversion_string))
1065         pkg_version = pkgversion_string;
1066       fprintf (asm_out_file, "%s\"GCC: %s%s\"\n",
1067                IDENT_ASM_OP, pkg_version, version_string);
1068     }
1069 #endif
1070
1071   /* Invoke registered plugin callbacks.  */
1072   invoke_plugin_callbacks (PLUGIN_FINISH_UNIT, NULL);
1073
1074   /* This must be at the end.  Some target ports emit end of file directives
1075      into the assembly file here, and hence we can not output anything to the
1076      assembly file after this point.  */
1077   targetm.asm_out.file_end ();
1078 }
1079
1080 /* Parse a -d... command line switch.  */
1081
1082 void
1083 decode_d_option (const char *arg)
1084 {
1085   int c;
1086
1087   while (*arg)
1088     switch (c = *arg++)
1089       {
1090       case 'A':
1091         flag_debug_asm = 1;
1092         break;
1093       case 'p':
1094         flag_print_asm_name = 1;
1095         break;
1096       case 'P':
1097         flag_dump_rtl_in_asm = 1;
1098         flag_print_asm_name = 1;
1099         break;
1100       case 'v':
1101         graph_dump_format = vcg;
1102         break;
1103       case 'x':
1104         rtl_dump_and_exit = 1;
1105         break;
1106       case 'y':
1107         set_yydebug = 1;
1108         break;
1109       case 'D': /* These are handled by the preprocessor.  */
1110       case 'I':
1111       case 'M':
1112       case 'N':
1113       case 'U':
1114         break;
1115       case 'H':
1116         setup_core_dumping();
1117         break;
1118       case 'a':
1119         enable_rtl_dump_file ();
1120         break;
1121
1122       default:
1123           warning (0, "unrecognized gcc debugging option: %c", c);
1124         break;
1125       }
1126 }
1127
1128 /* Indexed by enum debug_info_type.  */
1129 const char *const debug_type_names[] =
1130 {
1131   "none", "stabs", "coff", "dwarf-2", "xcoff", "vms"
1132 };
1133
1134 /* Print version information to FILE.
1135    Each line begins with INDENT (for the case where FILE is the
1136    assembler output file).  */
1137
1138 void
1139 print_version (FILE *file, const char *indent)
1140 {
1141   static const char fmt1[] =
1142 #ifdef __GNUC__
1143     N_("%s%s%s %sversion %s (%s)\n%s\tcompiled by GNU C version %s, ")
1144 #else
1145     N_("%s%s%s %sversion %s (%s) compiled by CC, ")
1146 #endif
1147     ;
1148   static const char fmt2[] =
1149     N_("GMP version %s, MPFR version %s, MPC version %s\n");
1150   static const char fmt3[] =
1151     N_("%s%swarning: %s header version %s differs from library version %s.\n");
1152   static const char fmt4[] =
1153     N_("%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n");
1154 #ifndef __VERSION__
1155 #define __VERSION__ "[?]"
1156 #endif
1157   fprintf (file,
1158            file == stderr ? _(fmt1) : fmt1,
1159            indent, *indent != 0 ? " " : "",
1160            lang_hooks.name, pkgversion_string, version_string, TARGET_NAME,
1161            indent, __VERSION__);
1162
1163   /* We need to stringify the GMP macro values.  Ugh, gmp_version has
1164      two string formats, "i.j.k" and "i.j" when k is zero.  As of
1165      gmp-4.3.0, GMP always uses the 3 number format.  */
1166 #define GCC_GMP_STRINGIFY_VERSION3(X) #X
1167 #define GCC_GMP_STRINGIFY_VERSION2(X) GCC_GMP_STRINGIFY_VERSION3(X)
1168 #define GCC_GMP_VERSION_NUM(X,Y,Z) (((X) << 16L) | ((Y) << 8) | (Z))
1169 #define GCC_GMP_VERSION \
1170   GCC_GMP_VERSION_NUM(__GNU_MP_VERSION, __GNU_MP_VERSION_MINOR, __GNU_MP_VERSION_PATCHLEVEL)
1171 #if GCC_GMP_VERSION < GCC_GMP_VERSION_NUM(4,3,0) && __GNU_MP_VERSION_PATCHLEVEL == 0
1172 #define GCC_GMP_STRINGIFY_VERSION GCC_GMP_STRINGIFY_VERSION2(__GNU_MP_VERSION) "." \
1173   GCC_GMP_STRINGIFY_VERSION2(__GNU_MP_VERSION_MINOR)
1174 #else
1175 #define GCC_GMP_STRINGIFY_VERSION GCC_GMP_STRINGIFY_VERSION2(__GNU_MP_VERSION) "." \
1176   GCC_GMP_STRINGIFY_VERSION2(__GNU_MP_VERSION_MINOR) "." \
1177   GCC_GMP_STRINGIFY_VERSION2(__GNU_MP_VERSION_PATCHLEVEL)
1178 #endif
1179   fprintf (file,
1180            file == stderr ? _(fmt2) : fmt2,
1181            GCC_GMP_STRINGIFY_VERSION, MPFR_VERSION_STRING, MPC_VERSION_STRING);
1182   if (strcmp (GCC_GMP_STRINGIFY_VERSION, gmp_version))
1183     fprintf (file,
1184              file == stderr ? _(fmt3) : fmt3,
1185              indent, *indent != 0 ? " " : "",
1186              "GMP", GCC_GMP_STRINGIFY_VERSION, gmp_version);
1187   if (strcmp (MPFR_VERSION_STRING, mpfr_get_version ()))
1188     fprintf (file,
1189              file == stderr ? _(fmt3) : fmt3,
1190              indent, *indent != 0 ? " " : "",
1191              "MPFR", MPFR_VERSION_STRING, mpfr_get_version ());
1192   if (strcmp (MPC_VERSION_STRING, mpc_get_version ()))
1193     fprintf (file,
1194              file == stderr ? _(fmt3) : fmt3,
1195              indent, *indent != 0 ? " " : "",
1196              "MPC", MPC_VERSION_STRING, mpc_get_version ());
1197   fprintf (file,
1198            file == stderr ? _(fmt4) : fmt4,
1199            indent, *indent != 0 ? " " : "",
1200            PARAM_VALUE (GGC_MIN_EXPAND), PARAM_VALUE (GGC_MIN_HEAPSIZE));
1201
1202   print_plugins_versions (file, indent);
1203 }
1204
1205 #ifdef ASM_COMMENT_START
1206 static int
1207 print_to_asm_out_file (print_switch_type type, const char * text)
1208 {
1209   bool prepend_sep = true;
1210
1211   switch (type)
1212     {
1213     case SWITCH_TYPE_LINE_END:
1214       putc ('\n', asm_out_file);
1215       return 1;
1216
1217     case SWITCH_TYPE_LINE_START:
1218       fputs (ASM_COMMENT_START, asm_out_file);
1219       return strlen (ASM_COMMENT_START);
1220
1221     case SWITCH_TYPE_DESCRIPTIVE:
1222       if (ASM_COMMENT_START[0] == 0)
1223         prepend_sep = false;
1224       /* Drop through.  */
1225     case SWITCH_TYPE_PASSED:
1226     case SWITCH_TYPE_ENABLED:
1227       if (prepend_sep)
1228         fputc (' ', asm_out_file);
1229       fputs (text, asm_out_file);
1230       /* No need to return the length here as
1231          print_single_switch has already done it.  */
1232       return 0;
1233
1234     default:
1235       return -1;
1236     }
1237 }
1238 #endif
1239
1240 static int
1241 print_to_stderr (print_switch_type type, const char * text)
1242 {
1243   switch (type)
1244     {
1245     case SWITCH_TYPE_LINE_END:
1246       putc ('\n', stderr);
1247       return 1;
1248
1249     case SWITCH_TYPE_LINE_START:
1250       return 0;
1251
1252     case SWITCH_TYPE_PASSED:
1253     case SWITCH_TYPE_ENABLED:
1254       fputc (' ', stderr);
1255       /* Drop through.  */
1256
1257     case SWITCH_TYPE_DESCRIPTIVE:
1258       fputs (text, stderr);
1259       /* No need to return the length here as
1260          print_single_switch has already done it.  */
1261       return 0;
1262
1263     default:
1264       return -1;
1265     }
1266 }
1267
1268 /* Print an option value and return the adjusted position in the line.
1269    ??? print_fn doesn't handle errors, eg disk full; presumably other
1270    code will catch a disk full though.  */
1271
1272 static int
1273 print_single_switch (print_switch_fn_type print_fn,
1274                      int pos,
1275                      print_switch_type type,
1276                      const char * text)
1277 {
1278   /* The ultrix fprintf returns 0 on success, so compute the result
1279      we want here since we need it for the following test.  The +1
1280      is for the separator character that will probably be emitted.  */
1281   int len = strlen (text) + 1;
1282
1283   if (pos != 0
1284       && pos + len > MAX_LINE)
1285     {
1286       print_fn (SWITCH_TYPE_LINE_END, NULL);
1287       pos = 0;
1288     }
1289
1290   if (pos == 0)
1291     pos += print_fn (SWITCH_TYPE_LINE_START, NULL);
1292
1293   print_fn (type, text);
1294   return pos + len;
1295 }
1296
1297 /* Print active target switches using PRINT_FN.
1298    POS is the current cursor position and MAX is the size of a "line".
1299    Each line begins with INDENT and ends with TERM.
1300    Each switch is separated from the next by SEP.  */
1301
1302 static void
1303 print_switch_values (print_switch_fn_type print_fn)
1304 {
1305   int pos = 0;
1306   size_t j;
1307
1308   /* Fill in the -frandom-seed option, if the user didn't pass it, so
1309      that it can be printed below.  This helps reproducibility.  */
1310   if (!flag_random_seed)
1311     init_random_seed ();
1312
1313   /* Print the options as passed.  */
1314   pos = print_single_switch (print_fn, pos,
1315                              SWITCH_TYPE_DESCRIPTIVE, _("options passed: "));
1316
1317   for (j = 1; j < save_decoded_options_count; j++)
1318     {
1319       switch (save_decoded_options[j].opt_index)
1320         {
1321         case OPT_o:
1322         case OPT_d:
1323         case OPT_dumpbase:
1324         case OPT_dumpdir:
1325         case OPT_auxbase:
1326         case OPT_quiet:
1327         case OPT_version:
1328           /* Ignore these.  */
1329           continue;
1330         }
1331
1332       pos = print_single_switch (print_fn, pos, SWITCH_TYPE_PASSED,
1333                                  save_decoded_options[j].orig_option_with_args_text);
1334     }
1335
1336   if (pos > 0)
1337     print_fn (SWITCH_TYPE_LINE_END, NULL);
1338
1339   /* Print the -f and -m options that have been enabled.
1340      We don't handle language specific options but printing argv
1341      should suffice.  */
1342   pos = print_single_switch (print_fn, 0,
1343                              SWITCH_TYPE_DESCRIPTIVE, _("options enabled: "));
1344
1345   for (j = 0; j < cl_options_count; j++)
1346     if ((cl_options[j].flags & CL_REPORT)
1347         && option_enabled (j) > 0)
1348       pos = print_single_switch (print_fn, pos,
1349                                  SWITCH_TYPE_ENABLED, cl_options[j].opt_text);
1350
1351   print_fn (SWITCH_TYPE_LINE_END, NULL);
1352 }
1353
1354 /* Open assembly code output file.  Do this even if -fsyntax-only is
1355    on, because then the driver will have provided the name of a
1356    temporary file or bit bucket for us.  NAME is the file specified on
1357    the command line, possibly NULL.  */
1358 static void
1359 init_asm_output (const char *name)
1360 {
1361   if (name == NULL && asm_file_name == 0)
1362     asm_out_file = stdout;
1363   else
1364     {
1365       if (asm_file_name == 0)
1366         {
1367           int len = strlen (dump_base_name);
1368           char *dumpname = XNEWVEC (char, len + 6);
1369
1370           memcpy (dumpname, dump_base_name, len + 1);
1371           strip_off_ending (dumpname, len);
1372           strcat (dumpname, ".s");
1373           asm_file_name = dumpname;
1374         }
1375       if (!strcmp (asm_file_name, "-"))
1376         asm_out_file = stdout;
1377       else
1378         asm_out_file = fopen (asm_file_name, "w+b");
1379       if (asm_out_file == 0)
1380         fatal_error ("can%'t open %s for writing: %m", asm_file_name);
1381     }
1382
1383   if (!flag_syntax_only)
1384     {
1385       targetm.asm_out.file_start ();
1386
1387       if (flag_record_gcc_switches)
1388         {
1389           if (targetm.asm_out.record_gcc_switches)
1390             {
1391               /* Let the target know that we are about to start recording.  */
1392               targetm.asm_out.record_gcc_switches (SWITCH_TYPE_DESCRIPTIVE,
1393                                                    NULL);
1394               /* Now record the switches.  */
1395               print_switch_values (targetm.asm_out.record_gcc_switches);
1396               /* Let the target know that the recording is over.  */
1397               targetm.asm_out.record_gcc_switches (SWITCH_TYPE_DESCRIPTIVE,
1398                                                    NULL);
1399             }
1400           else
1401             inform (input_location, "-frecord-gcc-switches is not supported by the current target");
1402         }
1403
1404 #ifdef ASM_COMMENT_START
1405       if (flag_verbose_asm)
1406         {
1407           /* Print the list of switches in effect
1408              into the assembler file as comments.  */
1409           print_version (asm_out_file, ASM_COMMENT_START);
1410           print_switch_values (print_to_asm_out_file);
1411           putc ('\n', asm_out_file);
1412         }
1413 #endif
1414     }
1415 }
1416
1417 /* Return true if the state of option OPTION should be stored in PCH files
1418    and checked by default_pch_valid_p.  Store the option's current state
1419    in STATE if so.  */
1420
1421 static inline bool
1422 option_affects_pch_p (int option, struct cl_option_state *state)
1423 {
1424   if ((cl_options[option].flags & CL_TARGET) == 0)
1425     return false;
1426   if (cl_options[option].flag_var == &target_flags)
1427     if (targetm.check_pch_target_flags)
1428       return false;
1429   return get_option_state (option, state);
1430 }
1431
1432 /* Default version of get_pch_validity.
1433    By default, every flag difference is fatal; that will be mostly right for
1434    most targets, but completely right for very few.  */
1435
1436 void *
1437 default_get_pch_validity (size_t *sz)
1438 {
1439   struct cl_option_state state;
1440   size_t i;
1441   char *result, *r;
1442
1443   *sz = 2;
1444   if (targetm.check_pch_target_flags)
1445     *sz += sizeof (target_flags);
1446   for (i = 0; i < cl_options_count; i++)
1447     if (option_affects_pch_p (i, &state))
1448       *sz += state.size;
1449
1450   result = r = XNEWVEC (char, *sz);
1451   r[0] = flag_pic;
1452   r[1] = flag_pie;
1453   r += 2;
1454   if (targetm.check_pch_target_flags)
1455     {
1456       memcpy (r, &target_flags, sizeof (target_flags));
1457       r += sizeof (target_flags);
1458     }
1459
1460   for (i = 0; i < cl_options_count; i++)
1461     if (option_affects_pch_p (i, &state))
1462       {
1463         memcpy (r, state.data, state.size);
1464         r += state.size;
1465       }
1466
1467   return result;
1468 }
1469
1470 /* Return a message which says that a PCH file was created with a different
1471    setting of OPTION.  */
1472
1473 static const char *
1474 pch_option_mismatch (const char *option)
1475 {
1476   char *r;
1477
1478   asprintf (&r, _("created and used with differing settings of '%s'"), option);
1479   if (r == NULL)
1480     return _("out of memory");
1481   return r;
1482 }
1483
1484 /* Default version of pch_valid_p.  */
1485
1486 const char *
1487 default_pch_valid_p (const void *data_p, size_t len)
1488 {
1489   struct cl_option_state state;
1490   const char *data = (const char *)data_p;
1491   size_t i;
1492
1493   /* -fpic and -fpie also usually make a PCH invalid.  */
1494   if (data[0] != flag_pic)
1495     return _("created and used with different settings of -fpic");
1496   if (data[1] != flag_pie)
1497     return _("created and used with different settings of -fpie");
1498   data += 2;
1499
1500   /* Check target_flags.  */
1501   if (targetm.check_pch_target_flags)
1502     {
1503       int tf;
1504       const char *r;
1505
1506       memcpy (&tf, data, sizeof (target_flags));
1507       data += sizeof (target_flags);
1508       len -= sizeof (target_flags);
1509       r = targetm.check_pch_target_flags (tf);
1510       if (r != NULL)
1511         return r;
1512     }
1513
1514   for (i = 0; i < cl_options_count; i++)
1515     if (option_affects_pch_p (i, &state))
1516       {
1517         if (memcmp (data, state.data, state.size) != 0)
1518           return pch_option_mismatch (cl_options[i].opt_text);
1519         data += state.size;
1520         len -= state.size;
1521       }
1522
1523   return NULL;
1524 }
1525
1526 /* Default tree printer.   Handles declarations only.  */
1527 bool
1528 default_tree_printer (pretty_printer *pp, text_info *text, const char *spec,
1529                       int precision, bool wide, bool set_locus, bool hash)
1530 {
1531   tree t;
1532
1533   /* FUTURE: %+x should set the locus.  */
1534   if (precision != 0 || wide || hash)
1535     return false;
1536
1537   switch (*spec)
1538     {
1539     case 'E':
1540       t = va_arg (*text->args_ptr, tree);
1541       if (TREE_CODE (t) == IDENTIFIER_NODE)
1542         {
1543           pp_identifier (pp, IDENTIFIER_POINTER (t));
1544           return true;
1545         }
1546       break;
1547
1548     case 'D':
1549       t = va_arg (*text->args_ptr, tree);
1550       if (DECL_DEBUG_EXPR_IS_FROM (t) && DECL_DEBUG_EXPR (t))
1551         t = DECL_DEBUG_EXPR (t);
1552       break;
1553
1554     case 'F':
1555     case 'T':
1556       t = va_arg (*text->args_ptr, tree);
1557       break;
1558
1559     case 'K':
1560       percent_K_format (text);
1561       return true;
1562
1563     default:
1564       return false;
1565     }
1566
1567   if (set_locus && text->locus)
1568     *text->locus = DECL_SOURCE_LOCATION (t);
1569
1570   if (DECL_P (t))
1571     {
1572       const char *n = DECL_NAME (t)
1573         ? identifier_to_locale (lang_hooks.decl_printable_name (t, 2))
1574         : _("<anonymous>");
1575       pp_string (pp, n);
1576     }
1577   else
1578     dump_generic_node (pp, t, 0, TDF_DIAGNOSTIC, 0);
1579
1580   return true;
1581 }
1582
1583 /* A helper function; used as the reallocator function for cpp's line
1584    table.  */
1585 static void *
1586 realloc_for_line_map (void *ptr, size_t len)
1587 {
1588   return GGC_RESIZEVAR (void, ptr, len);
1589 }
1590
1591 /* A helper function: used as the allocator function for
1592    identifier_to_locale.  */
1593 static void *
1594 alloc_for_identifier_to_locale (size_t len)
1595 {
1596   return ggc_alloc_atomic (len);
1597 }
1598
1599 /* Initialization of the front end environment, before command line
1600    options are parsed.  Signal handlers, internationalization etc.
1601    ARGV0 is main's argv[0].  */
1602 static void
1603 general_init (const char *argv0)
1604 {
1605   const char *p;
1606
1607   p = argv0 + strlen (argv0);
1608   while (p != argv0 && !IS_DIR_SEPARATOR (p[-1]))
1609     --p;
1610   progname = p;
1611
1612   xmalloc_set_program_name (progname);
1613
1614   hex_init ();
1615
1616   /* Unlock the stdio streams.  */
1617   unlock_std_streams ();
1618
1619   gcc_init_libintl ();
1620
1621   identifier_to_locale_alloc = alloc_for_identifier_to_locale;
1622   identifier_to_locale_free = ggc_free;
1623
1624   /* Initialize the diagnostics reporting machinery, so option parsing
1625      can give warnings and errors.  */
1626   diagnostic_initialize (global_dc, N_OPTS);
1627   diagnostic_starter (global_dc) = default_tree_diagnostic_starter;
1628   /* Set a default printer.  Language specific initializations will
1629      override it later.  */
1630   pp_format_decoder (global_dc->printer) = &default_tree_printer;
1631   global_dc->show_option_requested = flag_diagnostics_show_option;
1632   global_dc->show_column = flag_show_column;
1633   global_dc->internal_error = plugins_internal_error_function;
1634   global_dc->option_enabled = option_enabled;
1635   global_dc->option_name = option_name;
1636
1637   /* Trap fatal signals, e.g. SIGSEGV, and convert them to ICE messages.  */
1638 #ifdef SIGSEGV
1639   signal (SIGSEGV, crash_signal);
1640 #endif
1641 #ifdef SIGILL
1642   signal (SIGILL, crash_signal);
1643 #endif
1644 #ifdef SIGBUS
1645   signal (SIGBUS, crash_signal);
1646 #endif
1647 #ifdef SIGABRT
1648   signal (SIGABRT, crash_signal);
1649 #endif
1650 #if defined SIGIOT && (!defined SIGABRT || SIGABRT != SIGIOT)
1651   signal (SIGIOT, crash_signal);
1652 #endif
1653 #ifdef SIGFPE
1654   signal (SIGFPE, crash_signal);
1655 #endif
1656
1657   /* Other host-specific signal setup.  */
1658   (*host_hooks.extra_signals)();
1659
1660   /* Initialize the garbage-collector, string pools and tree type hash
1661      table.  */
1662   init_ggc ();
1663   init_stringpool ();
1664   line_table = ggc_alloc_line_maps ();
1665   linemap_init (line_table);
1666   line_table->reallocator = realloc_for_line_map;
1667   init_ttree ();
1668
1669   /* Initialize register usage now so switches may override.  */
1670   init_reg_sets ();
1671
1672   /* Register the language-independent parameters.  */
1673   add_params (lang_independent_params, LAST_PARAM);
1674
1675   /* This must be done after add_params but before argument processing.  */
1676   init_ggc_heuristics();
1677   init_optimization_passes ();
1678   statistics_early_init ();
1679 }
1680
1681 /* Return true if the current target supports -fsection-anchors.  */
1682
1683 static bool
1684 target_supports_section_anchors_p (void)
1685 {
1686   if (targetm.min_anchor_offset == 0 && targetm.max_anchor_offset == 0)
1687     return false;
1688
1689   if (targetm.asm_out.output_anchor == NULL)
1690     return false;
1691
1692   return true;
1693 }
1694
1695 /* Default the align_* variables to 1 if they're still unset, and
1696    set up the align_*_log variables.  */
1697 static void
1698 init_alignments (void)
1699 {
1700   if (align_loops <= 0)
1701     align_loops = 1;
1702   if (align_loops_max_skip > align_loops)
1703     align_loops_max_skip = align_loops - 1;
1704   align_loops_log = floor_log2 (align_loops * 2 - 1);
1705   if (align_jumps <= 0)
1706     align_jumps = 1;
1707   if (align_jumps_max_skip > align_jumps)
1708     align_jumps_max_skip = align_jumps - 1;
1709   align_jumps_log = floor_log2 (align_jumps * 2 - 1);
1710   if (align_labels <= 0)
1711     align_labels = 1;
1712   align_labels_log = floor_log2 (align_labels * 2 - 1);
1713   if (align_labels_max_skip > align_labels)
1714     align_labels_max_skip = align_labels - 1;
1715   if (align_functions <= 0)
1716     align_functions = 1;
1717   align_functions_log = floor_log2 (align_functions * 2 - 1);
1718 }
1719
1720 /* Process the options that have been parsed.  */
1721 static void
1722 process_options (void)
1723 {
1724   /* Just in case lang_hooks.post_options ends up calling a debug_hook.
1725      This can happen with incorrect pre-processed input. */
1726   debug_hooks = &do_nothing_debug_hooks;
1727
1728   /* This replaces set_Wunused.  */
1729   if (warn_unused_function == -1)
1730     warn_unused_function = warn_unused;
1731   if (warn_unused_label == -1)
1732     warn_unused_label = warn_unused;
1733   /* Wunused-parameter is enabled if both -Wunused -Wextra are enabled.  */
1734   if (warn_unused_parameter == -1)
1735     warn_unused_parameter = (warn_unused && extra_warnings);
1736   if (warn_unused_variable == -1)
1737     warn_unused_variable = warn_unused;
1738   /* Wunused-but-set-parameter is enabled if both -Wunused -Wextra are
1739      enabled.  */
1740   if (warn_unused_but_set_parameter == -1)
1741     warn_unused_but_set_parameter = (warn_unused && extra_warnings);
1742   if (warn_unused_but_set_variable == -1)
1743     warn_unused_but_set_variable = warn_unused;
1744   if (warn_unused_value == -1)
1745     warn_unused_value = warn_unused;
1746
1747   /* This replaces set_Wextra.  */
1748   if (warn_uninitialized == -1)
1749     warn_uninitialized = extra_warnings;
1750
1751   /* Allow the front end to perform consistency checks and do further
1752      initialization based on the command line options.  This hook also
1753      sets the original filename if appropriate (e.g. foo.i -> foo.c)
1754      so we can correctly initialize debug output.  */
1755   no_backend = lang_hooks.post_options (&main_input_filename);
1756
1757   /* Some machines may reject certain combinations of options.  */
1758   targetm.target_option.override ();
1759
1760   /* Avoid any informative notes in the second run of -fcompare-debug.  */
1761   if (flag_compare_debug) 
1762     diagnostic_inhibit_notes (global_dc);
1763
1764   if (flag_section_anchors && !target_supports_section_anchors_p ())
1765     {
1766       warning (OPT_fsection_anchors,
1767                "this target does not support %qs", "-fsection-anchors");
1768       flag_section_anchors = 0;
1769     }
1770
1771   if (flag_short_enums == 2)
1772     flag_short_enums = targetm.default_short_enums ();
1773
1774   /* Set aux_base_name if not already set.  */
1775   if (aux_base_name)
1776     ;
1777   else if (main_input_filename)
1778     {
1779       char *name = xstrdup (lbasename (main_input_filename));
1780
1781       strip_off_ending (name, strlen (name));
1782       aux_base_name = name;
1783     }
1784   else
1785     aux_base_name = "gccaux";
1786
1787 #ifndef HAVE_cloog
1788   if (flag_graphite
1789       || flag_loop_block
1790       || flag_loop_interchange
1791       || flag_loop_strip_mine
1792       || flag_graphite_identity
1793       || flag_loop_parallelize_all)
1794     sorry ("Graphite loop optimizations cannot be used");
1795 #endif
1796
1797   /* Unrolling all loops implies that standard loop unrolling must also
1798      be done.  */
1799   if (flag_unroll_all_loops)
1800     flag_unroll_loops = 1;
1801
1802   /* The loop unrolling code assumes that cse will be run after loop.
1803      web and rename-registers also help when run after loop unrolling.  */
1804   if (flag_rerun_cse_after_loop == AUTODETECT_VALUE)
1805     flag_rerun_cse_after_loop = flag_unroll_loops || flag_peel_loops;
1806
1807   if (flag_web == AUTODETECT_VALUE)
1808     flag_web = flag_unroll_loops || flag_peel_loops;
1809
1810   if (flag_rename_registers == AUTODETECT_VALUE)
1811     flag_rename_registers = flag_unroll_loops || flag_peel_loops;
1812
1813   if (flag_non_call_exceptions)
1814     flag_asynchronous_unwind_tables = 1;
1815   if (flag_asynchronous_unwind_tables)
1816     flag_unwind_tables = 1;
1817
1818   if (flag_value_profile_transformations)
1819     flag_profile_values = 1;
1820
1821   /* Warn about options that are not supported on this machine.  */
1822 #ifndef INSN_SCHEDULING
1823   if (flag_schedule_insns || flag_schedule_insns_after_reload)
1824     warning (0, "instruction scheduling not supported on this target machine");
1825 #endif
1826 #ifndef DELAY_SLOTS
1827   if (flag_delayed_branch)
1828     warning (0, "this target machine does not have delayed branches");
1829 #endif
1830
1831   user_label_prefix = USER_LABEL_PREFIX;
1832   if (flag_leading_underscore != -1)
1833     {
1834       /* If the default prefix is more complicated than "" or "_",
1835          issue a warning and ignore this option.  */
1836       if (user_label_prefix[0] == 0 ||
1837           (user_label_prefix[0] == '_' && user_label_prefix[1] == 0))
1838         {
1839           user_label_prefix = flag_leading_underscore ? "_" : "";
1840         }
1841       else
1842         warning (0, "-f%sleading-underscore not supported on this target machine",
1843                  flag_leading_underscore ? "" : "no-");
1844     }
1845
1846   /* If we are in verbose mode, write out the version and maybe all the
1847      option flags in use.  */
1848   if (version_flag)
1849     {
1850       print_version (stderr, "");
1851       if (! quiet_flag)
1852         print_switch_values (print_to_stderr);
1853     }
1854
1855   if (flag_syntax_only)
1856     {
1857       write_symbols = NO_DEBUG;
1858       profile_flag = 0;
1859     }
1860
1861   if (flag_gtoggle)
1862     {
1863       if (debug_info_level == DINFO_LEVEL_NONE)
1864         {
1865           debug_info_level = DINFO_LEVEL_NORMAL;
1866
1867           if (write_symbols == NO_DEBUG)
1868             write_symbols = PREFERRED_DEBUGGING_TYPE;
1869         }
1870       else
1871         debug_info_level = DINFO_LEVEL_NONE;
1872     }
1873
1874   if (flag_dump_final_insns && !flag_syntax_only && !no_backend)
1875     {
1876       FILE *final_output = fopen (flag_dump_final_insns, "w");
1877       if (!final_output)
1878         {
1879           error ("could not open final insn dump file %qs: %m",
1880                  flag_dump_final_insns);
1881           flag_dump_final_insns = NULL;
1882         }
1883       else if (fclose (final_output))
1884         {
1885           error ("could not close zeroed insn dump file %qs: %m",
1886                  flag_dump_final_insns);
1887           flag_dump_final_insns = NULL;
1888         }
1889     }
1890
1891   /* Unless over-ridden for the target, assume that all DWARF levels
1892      may be emitted, if DWARF2_DEBUG is selected.  */
1893   if (dwarf_strict < 0)
1894     dwarf_strict = 0;
1895
1896   /* A lot of code assumes write_symbols == NO_DEBUG if the debugging
1897      level is 0.  */
1898   if (debug_info_level == DINFO_LEVEL_NONE)
1899     write_symbols = NO_DEBUG;
1900
1901   if (write_symbols == NO_DEBUG)
1902     ;
1903 #if defined(DBX_DEBUGGING_INFO)
1904   else if (write_symbols == DBX_DEBUG)
1905     debug_hooks = &dbx_debug_hooks;
1906 #endif
1907 #if defined(XCOFF_DEBUGGING_INFO)
1908   else if (write_symbols == XCOFF_DEBUG)
1909     debug_hooks = &xcoff_debug_hooks;
1910 #endif
1911 #ifdef SDB_DEBUGGING_INFO
1912   else if (write_symbols == SDB_DEBUG)
1913     debug_hooks = &sdb_debug_hooks;
1914 #endif
1915 #ifdef DWARF2_DEBUGGING_INFO
1916   else if (write_symbols == DWARF2_DEBUG)
1917     debug_hooks = &dwarf2_debug_hooks;
1918 #endif
1919 #ifdef VMS_DEBUGGING_INFO
1920   else if (write_symbols == VMS_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
1921     debug_hooks = &vmsdbg_debug_hooks;
1922 #endif
1923   else
1924     error ("target system does not support the \"%s\" debug format",
1925            debug_type_names[write_symbols]);
1926
1927   /* We know which debug output will be used so we can set flag_var_tracking
1928      and flag_var_tracking_uninit if the user has not specified them.  */
1929   if (debug_info_level < DINFO_LEVEL_NORMAL
1930       || debug_hooks->var_location == do_nothing_debug_hooks.var_location)
1931     {
1932       if (flag_var_tracking == 1
1933           || flag_var_tracking_uninit == 1)
1934         {
1935           if (debug_info_level < DINFO_LEVEL_NORMAL)
1936             warning (0, "variable tracking requested, but useless unless "
1937                      "producing debug info");
1938           else
1939             warning (0, "variable tracking requested, but not supported "
1940                      "by this debug format");
1941         }
1942       flag_var_tracking = 0;
1943       flag_var_tracking_uninit = 0;
1944     }
1945
1946   /* If the user specifically requested variable tracking with tagging
1947      uninitialized variables, we need to turn on variable tracking.
1948      (We already determined above that variable tracking is feasible.)  */
1949   if (flag_var_tracking_uninit)
1950     flag_var_tracking = 1;
1951
1952   if (flag_var_tracking == AUTODETECT_VALUE)
1953     flag_var_tracking = optimize >= 1;
1954
1955   if (flag_var_tracking_assignments == AUTODETECT_VALUE)
1956     flag_var_tracking_assignments = flag_var_tracking
1957       && !(flag_selective_scheduling || flag_selective_scheduling2);
1958
1959   if (flag_var_tracking_assignments_toggle)
1960     flag_var_tracking_assignments = !flag_var_tracking_assignments;
1961
1962   if (flag_var_tracking_assignments && !flag_var_tracking)
1963     flag_var_tracking = flag_var_tracking_assignments = -1;
1964
1965   if (flag_var_tracking_assignments
1966       && (flag_selective_scheduling || flag_selective_scheduling2))
1967     warning (0, "var-tracking-assignments changes selective scheduling");
1968
1969   if (flag_tree_cselim == AUTODETECT_VALUE)
1970 #ifdef HAVE_conditional_move
1971     flag_tree_cselim = 1;
1972 #else
1973     flag_tree_cselim = 0;
1974 #endif
1975
1976   /* If auxiliary info generation is desired, open the output file.
1977      This goes in the same directory as the source file--unlike
1978      all the other output files.  */
1979   if (flag_gen_aux_info)
1980     {
1981       aux_info_file = fopen (aux_info_file_name, "w");
1982       if (aux_info_file == 0)
1983         fatal_error ("can%'t open %s: %m", aux_info_file_name);
1984     }
1985
1986   if (! targetm.have_named_sections)
1987     {
1988       if (flag_function_sections)
1989         {
1990           warning (0, "-ffunction-sections not supported for this target");
1991           flag_function_sections = 0;
1992         }
1993       if (flag_data_sections)
1994         {
1995           warning (0, "-fdata-sections not supported for this target");
1996           flag_data_sections = 0;
1997         }
1998     }
1999
2000   if (flag_function_sections && profile_flag)
2001     {
2002       warning (0, "-ffunction-sections disabled; it makes profiling impossible");
2003       flag_function_sections = 0;
2004     }
2005
2006 #ifndef HAVE_prefetch
2007   if (flag_prefetch_loop_arrays > 0)
2008     {
2009       warning (0, "-fprefetch-loop-arrays not supported for this target");
2010       flag_prefetch_loop_arrays = 0;
2011     }
2012 #else
2013   if (flag_prefetch_loop_arrays > 0 && !HAVE_prefetch)
2014     {
2015       warning (0, "-fprefetch-loop-arrays not supported for this target (try -march switches)");
2016       flag_prefetch_loop_arrays = 0;
2017     }
2018 #endif
2019
2020   /* This combination of options isn't handled for i386 targets and doesn't
2021      make much sense anyway, so don't allow it.  */
2022   if (flag_prefetch_loop_arrays > 0 && optimize_size)
2023     {
2024       warning (0, "-fprefetch-loop-arrays is not supported with -Os");
2025       flag_prefetch_loop_arrays = 0;
2026     }
2027
2028   /* The presence of IEEE signaling NaNs, implies all math can trap.  */
2029   if (flag_signaling_nans)
2030     flag_trapping_math = 1;
2031
2032   /* We cannot reassociate if we want traps or signed zeros.  */
2033   if (flag_associative_math && (flag_trapping_math || flag_signed_zeros))
2034     {
2035       warning (0, "-fassociative-math disabled; other options take precedence");
2036       flag_associative_math = 0;
2037     }
2038
2039   /* With -fcx-limited-range, we do cheap and quick complex arithmetic.  */
2040   if (flag_cx_limited_range)
2041     flag_complex_method = 0;
2042
2043   /* With -fcx-fortran-rules, we do something in-between cheap and C99.  */
2044   if (flag_cx_fortran_rules)
2045     flag_complex_method = 1;
2046
2047   /* Targets must be able to place spill slots at lower addresses.  If the
2048      target already uses a soft frame pointer, the transition is trivial.  */
2049   if (!FRAME_GROWS_DOWNWARD && flag_stack_protect)
2050     {
2051       warning (0, "-fstack-protector not supported for this target");
2052       flag_stack_protect = 0;
2053     }
2054   if (!flag_stack_protect)
2055     warn_stack_protect = 0;
2056
2057   /* ??? Unwind info is not correct around the CFG unless either a frame
2058      pointer is present or A_O_A is set.  Fixing this requires rewriting
2059      unwind info generation to be aware of the CFG and propagating states
2060      around edges.  */
2061   if (flag_unwind_tables && !ACCUMULATE_OUTGOING_ARGS
2062       && flag_omit_frame_pointer)
2063     {
2064       warning (0, "unwind tables currently require a frame pointer "
2065                "for correctness");
2066       flag_omit_frame_pointer = 0;
2067     }
2068
2069   /* Save the current optimization options.  */
2070   optimization_default_node = build_optimization_node ();
2071   optimization_current_node = optimization_default_node;
2072 }
2073
2074 /* This function can be called multiple times to reinitialize the compiler
2075    back end when register classes or instruction sets have changed,
2076    before each function.  */
2077 static void
2078 backend_init_target (void)
2079 {
2080   /* Initialize alignment variables.  */
2081   init_alignments ();
2082
2083   /* This reinitializes hard_frame_pointer, and calls init_reg_modes_target()
2084      to initialize reg_raw_mode[].  */
2085   init_emit_regs ();
2086
2087   /* This invokes target hooks to set fixed_reg[] etc, which is
2088      mode-dependent.  */
2089   init_regs ();
2090
2091   /* This depends on stack_pointer_rtx.  */
2092   init_fake_stack_mems ();
2093
2094   /* Sets static_base_value[HARD_FRAME_POINTER_REGNUM], which is
2095      mode-dependent.  */
2096   init_alias_target ();
2097
2098   /* Depends on HARD_FRAME_POINTER_REGNUM.  */
2099   init_reload ();
2100
2101   /* The following initialization functions need to generate rtl, so
2102      provide a dummy function context for them.  */
2103   init_dummy_function_start ();
2104
2105   /* rtx_cost is mode-dependent, so cached values need to be recomputed
2106      on a mode change.  */
2107   init_expmed ();
2108
2109   /* We may need to recompute regno_save_code[] and regno_restore_code[]
2110      after a mode change as well.  */
2111   caller_save_initialized_p = false;
2112
2113   expand_dummy_function_end ();
2114 }
2115
2116 /* Initialize the compiler back end.  This function is called only once,
2117    when starting the compiler.  */
2118 static void
2119 backend_init (void)
2120 {
2121   init_emit_once ();
2122
2123   init_rtlanal ();
2124   init_inline_once ();
2125   init_varasm_once ();
2126   save_register_info ();
2127
2128   /* Initialize the target-specific back end pieces.  */
2129   ira_init_once ();
2130   backend_init_target ();
2131 }
2132
2133 /* Initialize excess precision settings.  */
2134 static void
2135 init_excess_precision (void)
2136 {
2137   /* Adjust excess precision handling based on the target options.  If
2138      the front end cannot handle it, flag_excess_precision_cmdline
2139      will already have been set accordingly in the post_options
2140      hook.  */
2141   gcc_assert (flag_excess_precision_cmdline != EXCESS_PRECISION_DEFAULT);
2142   flag_excess_precision = flag_excess_precision_cmdline;
2143   if (flag_unsafe_math_optimizations)
2144     flag_excess_precision = EXCESS_PRECISION_FAST;
2145   if (flag_excess_precision == EXCESS_PRECISION_STANDARD)
2146     {
2147       int flt_eval_method = TARGET_FLT_EVAL_METHOD;
2148       switch (flt_eval_method)
2149         {
2150         case -1:
2151         case 0:
2152           /* Either the target acts unpredictably (-1) or has all the
2153              operations required not to have excess precision (0).  */
2154           flag_excess_precision = EXCESS_PRECISION_FAST;
2155           break;
2156         case 1:
2157         case 2:
2158           /* In these cases, predictable excess precision makes
2159              sense.  */
2160           break;
2161         default:
2162           /* Any other implementation-defined FLT_EVAL_METHOD values
2163              require the compiler to handle the associated excess
2164              precision rules in excess_precision_type.  */
2165           gcc_unreachable ();
2166         }
2167     }
2168 }
2169
2170 /* Initialize things that are both lang-dependent and target-dependent.
2171    This function can be called more than once if target parameters change.  */
2172 static void
2173 lang_dependent_init_target (void)
2174 {
2175   /* This determines excess precision settings.  */
2176   init_excess_precision ();
2177
2178   /* This creates various _DECL nodes, so needs to be called after the
2179      front end is initialized.  It also depends on the HAVE_xxx macros
2180      generated from the target machine description.  */
2181   init_optabs ();
2182
2183   /* The following initialization functions need to generate rtl, so
2184      provide a dummy function context for them.  */
2185   init_dummy_function_start ();
2186
2187   /* Do the target-specific parts of expr initialization.  */
2188   init_expr_target ();
2189
2190   /* Although the actions of these functions are language-independent,
2191      they use optabs, so we cannot call them from backend_init.  */
2192   init_set_costs ();
2193   ira_init ();
2194
2195   expand_dummy_function_end ();
2196 }
2197
2198 /* Language-dependent initialization.  Returns nonzero on success.  */
2199 static int
2200 lang_dependent_init (const char *name)
2201 {
2202   location_t save_loc = input_location;
2203   if (dump_base_name == 0)
2204     dump_base_name = name && name[0] ? name : "gccdump";
2205
2206   /* Other front-end initialization.  */
2207   input_location = BUILTINS_LOCATION;
2208   if (lang_hooks.init () == 0)
2209     return 0;
2210   input_location = save_loc;
2211
2212   init_asm_output (name);
2213
2214   /* This creates various _DECL nodes, so needs to be called after the
2215      front end is initialized.  */
2216   init_eh ();
2217
2218   /* Do the target-specific parts of the initialization.  */
2219   lang_dependent_init_target ();
2220
2221   /* If dbx symbol table desired, initialize writing it and output the
2222      predefined types.  */
2223   timevar_push (TV_SYMOUT);
2224
2225 #if defined DWARF2_DEBUGGING_INFO || defined DWARF2_UNWIND_INFO
2226   if (dwarf2out_do_frame ())
2227     dwarf2out_frame_init ();
2228 #endif
2229
2230   /* Now we have the correct original filename, we can initialize
2231      debug output.  */
2232   (*debug_hooks->init) (name);
2233
2234   timevar_pop (TV_SYMOUT);
2235
2236   return 1;
2237 }
2238
2239
2240 /* Reinitialize everything when target parameters, such as register usage,
2241    have changed.  */
2242 void
2243 target_reinit (void)
2244 {
2245   /* Reinitialize RTL backend.  */
2246   backend_init_target ();
2247
2248   /* Reinitialize lang-dependent parts.  */
2249   lang_dependent_init_target ();
2250 }
2251
2252 void
2253 dump_memory_report (bool final)
2254 {
2255   ggc_print_statistics ();
2256   stringpool_statistics ();
2257   dump_tree_statistics ();
2258   dump_gimple_statistics ();
2259   dump_rtx_statistics ();
2260   dump_alloc_pool_statistics ();
2261   dump_bitmap_statistics ();
2262   dump_vec_loc_statistics ();
2263   dump_ggc_loc_statistics (final);
2264   dump_alias_stats (stderr);
2265   dump_pta_stats (stderr);
2266 }
2267
2268 /* Clean up: close opened files, etc.  */
2269
2270 static void
2271 finalize (void)
2272 {
2273   /* Close the dump files.  */
2274   if (flag_gen_aux_info)
2275     {
2276       fclose (aux_info_file);
2277       if (seen_error ())
2278         unlink (aux_info_file_name);
2279     }
2280
2281   /* Close non-debugging input and output files.  Take special care to note
2282      whether fclose returns an error, since the pages might still be on the
2283      buffer chain while the file is open.  */
2284
2285   if (asm_out_file)
2286     {
2287       if (ferror (asm_out_file) != 0)
2288         fatal_error ("error writing to %s: %m", asm_file_name);
2289       if (fclose (asm_out_file) != 0)
2290         fatal_error ("error closing %s: %m", asm_file_name);
2291       if (flag_wpa)
2292         unlink_if_ordinary (asm_file_name);
2293     }
2294
2295   statistics_fini ();
2296   finish_optimization_passes ();
2297
2298   ira_finish_once ();
2299
2300   if (mem_report)
2301     dump_memory_report (true);
2302
2303   /* Language-specific end of compilation actions.  */
2304   lang_hooks.finish ();
2305 }
2306
2307 /* Initialize the compiler, and compile the input file.  */
2308 static void
2309 do_compile (void)
2310 {
2311   /* Initialize timing first.  The C front ends read the main file in
2312      the post_options hook, and C++ does file timings.  */
2313   if (time_report || !quiet_flag  || flag_detailed_statistics)
2314     timevar_init ();
2315   timevar_start (TV_TOTAL);
2316
2317   process_options ();
2318
2319   /* Don't do any more if an error has already occurred.  */
2320   if (!seen_error ())
2321     {
2322       /* This must be run always, because it is needed to compute the FP
2323          predefined macros, such as __LDBL_MAX__, for targets using non
2324          default FP formats.  */
2325       init_adjust_machine_modes ();
2326
2327       /* Set up the back-end if requested.  */
2328       if (!no_backend)
2329         backend_init ();
2330
2331       /* Language-dependent initialization.  Returns true on success.  */
2332       if (lang_dependent_init (main_input_filename))
2333         compile_file ();
2334
2335       finalize ();
2336     }
2337
2338   /* Stop timing and print the times.  */
2339   timevar_stop (TV_TOTAL);
2340   timevar_print (stderr);
2341 }
2342
2343 /* Entry point of cc1, cc1plus, jc1, f771, etc.
2344    Exit code is FATAL_EXIT_CODE if can't open files or if there were
2345    any errors, or SUCCESS_EXIT_CODE if compilation succeeded.
2346
2347    It is not safe to call this function more than once.  */
2348
2349 int
2350 toplev_main (int argc, char **argv)
2351 {
2352   expandargv (&argc, &argv);
2353
2354   /* Initialization of GCC's environment, and diagnostics.  */
2355   general_init (argv[0]);
2356
2357   /* Parse the options and do minimal processing; basically just
2358      enough to default flags appropriately.  */
2359   decode_options (argc, CONST_CAST2 (const char **, char **, argv),
2360                   &save_decoded_options, &save_decoded_options_count);
2361
2362   init_local_tick ();
2363
2364   initialize_plugins ();
2365
2366   if (version_flag)
2367     print_version (stderr, "");
2368
2369   if (help_flag)
2370     print_plugins_help (stderr, "");
2371
2372   /* Exit early if we can (e.g. -help).  */
2373   if (!exit_after_options)
2374     do_compile ();
2375
2376   if (warningcount || errorcount)
2377     print_ignored_options ();
2378   diagnostic_finish (global_dc);
2379
2380   /* Invoke registered plugin callbacks if any.  */
2381   invoke_plugin_callbacks (PLUGIN_FINISH, NULL);
2382
2383   finalize_plugins ();
2384   if (seen_error ())
2385     return (FATAL_EXIT_CODE);
2386
2387   return (SUCCESS_EXIT_CODE);
2388 }