OSDN Git Service

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