OSDN Git Service

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