OSDN Git Service

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