OSDN Git Service

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