OSDN Git Service

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