OSDN Git Service

* lib/gcc-simulate-thread.exp (simulate-thread): Improve error message.
[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   /* Unrolling all loops implies that standard loop unrolling must also
1337      be done.  */
1338   if (flag_unroll_all_loops)
1339     flag_unroll_loops = 1;
1340
1341   /* web and rename-registers help when run after loop unrolling.  */
1342   if (flag_web == AUTODETECT_VALUE)
1343     flag_web = flag_unroll_loops || flag_peel_loops;
1344
1345   if (flag_rename_registers == AUTODETECT_VALUE)
1346     flag_rename_registers = flag_unroll_loops || flag_peel_loops;
1347
1348   if (flag_non_call_exceptions)
1349     flag_asynchronous_unwind_tables = 1;
1350   if (flag_asynchronous_unwind_tables)
1351     flag_unwind_tables = 1;
1352
1353   if (flag_value_profile_transformations)
1354     flag_profile_values = 1;
1355
1356   /* Warn about options that are not supported on this machine.  */
1357 #ifndef INSN_SCHEDULING
1358   if (flag_schedule_insns || flag_schedule_insns_after_reload)
1359     warning (0, "instruction scheduling not supported on this target machine");
1360 #endif
1361 #ifndef DELAY_SLOTS
1362   if (flag_delayed_branch)
1363     warning (0, "this target machine does not have delayed branches");
1364 #endif
1365
1366   user_label_prefix = USER_LABEL_PREFIX;
1367   if (flag_leading_underscore != -1)
1368     {
1369       /* If the default prefix is more complicated than "" or "_",
1370          issue a warning and ignore this option.  */
1371       if (user_label_prefix[0] == 0 ||
1372           (user_label_prefix[0] == '_' && user_label_prefix[1] == 0))
1373         {
1374           user_label_prefix = flag_leading_underscore ? "_" : "";
1375         }
1376       else
1377         warning (0, "-f%sleading-underscore not supported on this target machine",
1378                  flag_leading_underscore ? "" : "no-");
1379     }
1380
1381   /* If we are in verbose mode, write out the version and maybe all the
1382      option flags in use.  */
1383   if (version_flag)
1384     {
1385       print_version (stderr, "");
1386       if (! quiet_flag)
1387         print_switch_values (print_to_stderr);
1388     }
1389
1390   if (flag_syntax_only)
1391     {
1392       write_symbols = NO_DEBUG;
1393       profile_flag = 0;
1394     }
1395
1396   if (flag_gtoggle)
1397     {
1398       if (debug_info_level == DINFO_LEVEL_NONE)
1399         {
1400           debug_info_level = DINFO_LEVEL_NORMAL;
1401
1402           if (write_symbols == NO_DEBUG)
1403             write_symbols = PREFERRED_DEBUGGING_TYPE;
1404         }
1405       else
1406         debug_info_level = DINFO_LEVEL_NONE;
1407     }
1408
1409   if (flag_dump_final_insns && !flag_syntax_only && !no_backend)
1410     {
1411       FILE *final_output = fopen (flag_dump_final_insns, "w");
1412       if (!final_output)
1413         {
1414           error ("could not open final insn dump file %qs: %m",
1415                  flag_dump_final_insns);
1416           flag_dump_final_insns = NULL;
1417         }
1418       else if (fclose (final_output))
1419         {
1420           error ("could not close zeroed insn dump file %qs: %m",
1421                  flag_dump_final_insns);
1422           flag_dump_final_insns = NULL;
1423         }
1424     }
1425
1426   /* Unless over-ridden for the target, assume that all DWARF levels
1427      may be emitted, if DWARF2_DEBUG is selected.  */
1428   if (dwarf_strict < 0)
1429     dwarf_strict = 0;
1430
1431   /* A lot of code assumes write_symbols == NO_DEBUG if the debugging
1432      level is 0.  */
1433   if (debug_info_level == DINFO_LEVEL_NONE)
1434     write_symbols = NO_DEBUG;
1435
1436   if (write_symbols == NO_DEBUG)
1437     ;
1438 #if defined(DBX_DEBUGGING_INFO)
1439   else if (write_symbols == DBX_DEBUG)
1440     debug_hooks = &dbx_debug_hooks;
1441 #endif
1442 #if defined(XCOFF_DEBUGGING_INFO)
1443   else if (write_symbols == XCOFF_DEBUG)
1444     debug_hooks = &xcoff_debug_hooks;
1445 #endif
1446 #ifdef SDB_DEBUGGING_INFO
1447   else if (write_symbols == SDB_DEBUG)
1448     debug_hooks = &sdb_debug_hooks;
1449 #endif
1450 #ifdef DWARF2_DEBUGGING_INFO
1451   else if (write_symbols == DWARF2_DEBUG)
1452     debug_hooks = &dwarf2_debug_hooks;
1453 #endif
1454 #ifdef VMS_DEBUGGING_INFO
1455   else if (write_symbols == VMS_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
1456     debug_hooks = &vmsdbg_debug_hooks;
1457 #endif
1458   else
1459     error ("target system does not support the \"%s\" debug format",
1460            debug_type_names[write_symbols]);
1461
1462   /* We know which debug output will be used so we can set flag_var_tracking
1463      and flag_var_tracking_uninit if the user has not specified them.  */
1464   if (debug_info_level < DINFO_LEVEL_NORMAL
1465       || debug_hooks->var_location == do_nothing_debug_hooks.var_location)
1466     {
1467       if (flag_var_tracking == 1
1468           || flag_var_tracking_uninit == 1)
1469         {
1470           if (debug_info_level < DINFO_LEVEL_NORMAL)
1471             warning (0, "variable tracking requested, but useless unless "
1472                      "producing debug info");
1473           else
1474             warning (0, "variable tracking requested, but not supported "
1475                      "by this debug format");
1476         }
1477       flag_var_tracking = 0;
1478       flag_var_tracking_uninit = 0;
1479     }
1480
1481   /* The debug hooks are used to implement -fdump-go-spec because it
1482      gives a simple and stable API for all the information we need to
1483      dump.  */
1484   if (flag_dump_go_spec != NULL)
1485     debug_hooks = dump_go_spec_init (flag_dump_go_spec, debug_hooks);
1486
1487   /* If the user specifically requested variable tracking with tagging
1488      uninitialized variables, we need to turn on variable tracking.
1489      (We already determined above that variable tracking is feasible.)  */
1490   if (flag_var_tracking_uninit)
1491     flag_var_tracking = 1;
1492
1493   if (flag_var_tracking == AUTODETECT_VALUE)
1494     flag_var_tracking = optimize >= 1;
1495
1496   if (flag_var_tracking_assignments == AUTODETECT_VALUE)
1497     flag_var_tracking_assignments = flag_var_tracking
1498       && !(flag_selective_scheduling || flag_selective_scheduling2);
1499
1500   if (flag_var_tracking_assignments_toggle)
1501     flag_var_tracking_assignments = !flag_var_tracking_assignments;
1502
1503   if (flag_var_tracking_assignments && !flag_var_tracking)
1504     flag_var_tracking = flag_var_tracking_assignments = -1;
1505
1506   if (flag_var_tracking_assignments
1507       && (flag_selective_scheduling || flag_selective_scheduling2))
1508     warning (0, "var-tracking-assignments changes selective scheduling");
1509
1510   if (flag_tree_cselim == AUTODETECT_VALUE)
1511 #ifdef HAVE_conditional_move
1512     flag_tree_cselim = 1;
1513 #else
1514     flag_tree_cselim = 0;
1515 #endif
1516
1517   /* If auxiliary info generation is desired, open the output file.
1518      This goes in the same directory as the source file--unlike
1519      all the other output files.  */
1520   if (flag_gen_aux_info)
1521     {
1522       aux_info_file = fopen (aux_info_file_name, "w");
1523       if (aux_info_file == 0)
1524         fatal_error ("can%'t open %s: %m", aux_info_file_name);
1525     }
1526
1527   if (!targetm_common.have_named_sections)
1528     {
1529       if (flag_function_sections)
1530         {
1531           warning (0, "-ffunction-sections not supported for this target");
1532           flag_function_sections = 0;
1533         }
1534       if (flag_data_sections)
1535         {
1536           warning (0, "-fdata-sections not supported for this target");
1537           flag_data_sections = 0;
1538         }
1539     }
1540
1541   if (flag_function_sections && profile_flag)
1542     {
1543       warning (0, "-ffunction-sections disabled; it makes profiling impossible");
1544       flag_function_sections = 0;
1545     }
1546
1547 #ifndef HAVE_prefetch
1548   if (flag_prefetch_loop_arrays > 0)
1549     {
1550       warning (0, "-fprefetch-loop-arrays not supported for this target");
1551       flag_prefetch_loop_arrays = 0;
1552     }
1553 #else
1554   if (flag_prefetch_loop_arrays > 0 && !HAVE_prefetch)
1555     {
1556       warning (0, "-fprefetch-loop-arrays not supported for this target (try -march switches)");
1557       flag_prefetch_loop_arrays = 0;
1558     }
1559 #endif
1560
1561   /* This combination of options isn't handled for i386 targets and doesn't
1562      make much sense anyway, so don't allow it.  */
1563   if (flag_prefetch_loop_arrays > 0 && optimize_size)
1564     {
1565       warning (0, "-fprefetch-loop-arrays is not supported with -Os");
1566       flag_prefetch_loop_arrays = 0;
1567     }
1568
1569   /* The presence of IEEE signaling NaNs, implies all math can trap.  */
1570   if (flag_signaling_nans)
1571     flag_trapping_math = 1;
1572
1573   /* We cannot reassociate if we want traps or signed zeros.  */
1574   if (flag_associative_math && (flag_trapping_math || flag_signed_zeros))
1575     {
1576       warning (0, "-fassociative-math disabled; other options take precedence");
1577       flag_associative_math = 0;
1578     }
1579
1580   /* With -fcx-limited-range, we do cheap and quick complex arithmetic.  */
1581   if (flag_cx_limited_range)
1582     flag_complex_method = 0;
1583
1584   /* With -fcx-fortran-rules, we do something in-between cheap and C99.  */
1585   if (flag_cx_fortran_rules)
1586     flag_complex_method = 1;
1587
1588   /* Targets must be able to place spill slots at lower addresses.  If the
1589      target already uses a soft frame pointer, the transition is trivial.  */
1590   if (!FRAME_GROWS_DOWNWARD && flag_stack_protect)
1591     {
1592       warning (0, "-fstack-protector not supported for this target");
1593       flag_stack_protect = 0;
1594     }
1595   if (!flag_stack_protect)
1596     warn_stack_protect = 0;
1597
1598   /* ??? Unwind info is not correct around the CFG unless either a frame
1599      pointer is present or A_O_A is set.  Fixing this requires rewriting
1600      unwind info generation to be aware of the CFG and propagating states
1601      around edges.  */
1602   if (flag_unwind_tables && !ACCUMULATE_OUTGOING_ARGS
1603       && flag_omit_frame_pointer)
1604     {
1605       warning (0, "unwind tables currently require a frame pointer "
1606                "for correctness");
1607       flag_omit_frame_pointer = 0;
1608     }
1609
1610   /* Enable -Werror=coverage-mismatch when -Werror and -Wno-error
1611      have not been set.  */
1612   if (!global_options_set.x_warnings_are_errors
1613       && warn_coverage_mismatch
1614       && (global_dc->classify_diagnostic[OPT_Wcoverage_mismatch] ==
1615           DK_UNSPECIFIED))
1616     diagnostic_classify_diagnostic (global_dc, OPT_Wcoverage_mismatch,
1617                                     DK_ERROR, UNKNOWN_LOCATION);
1618
1619   /* Save the current optimization options.  */
1620   optimization_default_node = build_optimization_node ();
1621   optimization_current_node = optimization_default_node;
1622 }
1623
1624 /* This function can be called multiple times to reinitialize the compiler
1625    back end when register classes or instruction sets have changed,
1626    before each function.  */
1627 static void
1628 backend_init_target (void)
1629 {
1630   /* Initialize alignment variables.  */
1631   init_alignments ();
1632
1633   /* This reinitializes hard_frame_pointer, and calls init_reg_modes_target()
1634      to initialize reg_raw_mode[].  */
1635   init_emit_regs ();
1636
1637   /* This invokes target hooks to set fixed_reg[] etc, which is
1638      mode-dependent.  */
1639   init_regs ();
1640
1641   /* This depends on stack_pointer_rtx.  */
1642   init_fake_stack_mems ();
1643
1644   /* Sets static_base_value[HARD_FRAME_POINTER_REGNUM], which is
1645      mode-dependent.  */
1646   init_alias_target ();
1647
1648   /* Depends on HARD_FRAME_POINTER_REGNUM.  */
1649   init_reload ();
1650
1651   /* The following initialization functions need to generate rtl, so
1652      provide a dummy function context for them.  */
1653   init_dummy_function_start ();
1654
1655   /* rtx_cost is mode-dependent, so cached values need to be recomputed
1656      on a mode change.  */
1657   init_expmed ();
1658
1659   /* We may need to recompute regno_save_code[] and regno_restore_code[]
1660      after a mode change as well.  */
1661   caller_save_initialized_p = false;
1662
1663   expand_dummy_function_end ();
1664 }
1665
1666 /* Initialize the compiler back end.  This function is called only once,
1667    when starting the compiler.  */
1668 static void
1669 backend_init (void)
1670 {
1671   init_emit_once ();
1672
1673   init_rtlanal ();
1674   init_inline_once ();
1675   init_varasm_once ();
1676   save_register_info ();
1677
1678   /* Initialize the target-specific back end pieces.  */
1679   ira_init_once ();
1680   backend_init_target ();
1681 }
1682
1683 /* Initialize excess precision settings.  */
1684 static void
1685 init_excess_precision (void)
1686 {
1687   /* Adjust excess precision handling based on the target options.  If
1688      the front end cannot handle it, flag_excess_precision_cmdline
1689      will already have been set accordingly in the post_options
1690      hook.  */
1691   gcc_assert (flag_excess_precision_cmdline != EXCESS_PRECISION_DEFAULT);
1692   flag_excess_precision = flag_excess_precision_cmdline;
1693   if (flag_unsafe_math_optimizations)
1694     flag_excess_precision = EXCESS_PRECISION_FAST;
1695   if (flag_excess_precision == EXCESS_PRECISION_STANDARD)
1696     {
1697       int flt_eval_method = TARGET_FLT_EVAL_METHOD;
1698       switch (flt_eval_method)
1699         {
1700         case -1:
1701         case 0:
1702           /* Either the target acts unpredictably (-1) or has all the
1703              operations required not to have excess precision (0).  */
1704           flag_excess_precision = EXCESS_PRECISION_FAST;
1705           break;
1706         case 1:
1707         case 2:
1708           /* In these cases, predictable excess precision makes
1709              sense.  */
1710           break;
1711         default:
1712           /* Any other implementation-defined FLT_EVAL_METHOD values
1713              require the compiler to handle the associated excess
1714              precision rules in excess_precision_type.  */
1715           gcc_unreachable ();
1716         }
1717     }
1718 }
1719
1720 /* Initialize things that are both lang-dependent and target-dependent.
1721    This function can be called more than once if target parameters change.  */
1722 static void
1723 lang_dependent_init_target (void)
1724 {
1725   /* This determines excess precision settings.  */
1726   init_excess_precision ();
1727
1728   /* This creates various _DECL nodes, so needs to be called after the
1729      front end is initialized.  It also depends on the HAVE_xxx macros
1730      generated from the target machine description.  */
1731   init_optabs ();
1732
1733   /* The following initialization functions need to generate rtl, so
1734      provide a dummy function context for them.  */
1735   init_dummy_function_start ();
1736
1737   /* Do the target-specific parts of expr initialization.  */
1738   init_expr_target ();
1739
1740   /* Although the actions of these functions are language-independent,
1741      they use optabs, so we cannot call them from backend_init.  */
1742   init_set_costs ();
1743   ira_init ();
1744
1745   expand_dummy_function_end ();
1746 }
1747
1748 /* Language-dependent initialization.  Returns nonzero on success.  */
1749 static int
1750 lang_dependent_init (const char *name)
1751 {
1752   location_t save_loc = input_location;
1753   if (dump_base_name == 0)
1754     dump_base_name = name && name[0] ? name : "gccdump";
1755
1756   /* Other front-end initialization.  */
1757   input_location = BUILTINS_LOCATION;
1758   if (lang_hooks.init () == 0)
1759     return 0;
1760   input_location = save_loc;
1761
1762   if (!flag_wpa)
1763     {
1764       init_asm_output (name);
1765
1766       /* If stack usage information is desired, open the output file.  */
1767       if (flag_stack_usage)
1768         stack_usage_file = open_auxiliary_file ("su");
1769     }
1770
1771   /* This creates various _DECL nodes, so needs to be called after the
1772      front end is initialized.  */
1773   init_eh ();
1774
1775   /* Do the target-specific parts of the initialization.  */
1776   lang_dependent_init_target ();
1777
1778   if (!flag_wpa)
1779     {
1780       /* If dbx symbol table desired, initialize writing it and output the
1781          predefined types.  */
1782       timevar_push (TV_SYMOUT);
1783
1784       /* Now we have the correct original filename, we can initialize
1785          debug output.  */
1786       (*debug_hooks->init) (name);
1787
1788       timevar_pop (TV_SYMOUT);
1789     }
1790
1791   return 1;
1792 }
1793
1794
1795 /* Reinitialize everything when target parameters, such as register usage,
1796    have changed.  */
1797 void
1798 target_reinit (void)
1799 {
1800   struct rtl_data saved_x_rtl;
1801   rtx *saved_regno_reg_rtx;
1802
1803   /* Save *crtl and regno_reg_rtx around the reinitialization
1804      to allow target_reinit being called even after prepare_function_start.  */
1805   saved_regno_reg_rtx = regno_reg_rtx;
1806   if (saved_regno_reg_rtx)
1807     {  
1808       saved_x_rtl = *crtl;
1809       memset (crtl, '\0', sizeof (*crtl));
1810       regno_reg_rtx = NULL;
1811     }
1812
1813   /* Reinitialize RTL backend.  */
1814   backend_init_target ();
1815
1816   /* Reinitialize lang-dependent parts.  */
1817   lang_dependent_init_target ();
1818
1819   /* And restore it at the end, as free_after_compilation from
1820      expand_dummy_function_end clears it.  */
1821   if (saved_regno_reg_rtx)
1822     {
1823       *crtl = saved_x_rtl;
1824       regno_reg_rtx = saved_regno_reg_rtx;
1825       saved_regno_reg_rtx = NULL;
1826     }
1827 }
1828
1829 void
1830 dump_memory_report (bool final)
1831 {
1832   dump_line_table_statistics ();
1833   ggc_print_statistics ();
1834   stringpool_statistics ();
1835   dump_tree_statistics ();
1836   dump_gimple_statistics ();
1837   dump_rtx_statistics ();
1838   dump_alloc_pool_statistics ();
1839   dump_bitmap_statistics ();
1840   dump_vec_loc_statistics ();
1841   dump_ggc_loc_statistics (final);
1842   dump_alias_stats (stderr);
1843   dump_pta_stats (stderr);
1844 }
1845
1846 /* Clean up: close opened files, etc.  */
1847
1848 static void
1849 finalize (bool no_backend)
1850 {
1851   /* Close the dump files.  */
1852   if (flag_gen_aux_info)
1853     {
1854       fclose (aux_info_file);
1855       if (seen_error ())
1856         unlink (aux_info_file_name);
1857     }
1858
1859   /* Close non-debugging input and output files.  Take special care to note
1860      whether fclose returns an error, since the pages might still be on the
1861      buffer chain while the file is open.  */
1862
1863   if (asm_out_file)
1864     {
1865       if (ferror (asm_out_file) != 0)
1866         fatal_error ("error writing to %s: %m", asm_file_name);
1867       if (fclose (asm_out_file) != 0)
1868         fatal_error ("error closing %s: %m", asm_file_name);
1869     }
1870
1871   if (stack_usage_file)
1872     fclose (stack_usage_file);
1873
1874   if (!no_backend)
1875     {
1876       statistics_fini ();
1877
1878       finish_optimization_passes ();
1879
1880       ira_finish_once ();
1881     }
1882
1883   if (mem_report)
1884     dump_memory_report (true);
1885
1886   /* Language-specific end of compilation actions.  */
1887   lang_hooks.finish ();
1888 }
1889
1890 /* Initialize the compiler, and compile the input file.  */
1891 static void
1892 do_compile (void)
1893 {
1894   /* Initialize timing first.  The C front ends read the main file in
1895      the post_options hook, and C++ does file timings.  */
1896   if (time_report || !quiet_flag  || flag_detailed_statistics)
1897     timevar_init ();
1898   timevar_start (TV_TOTAL);
1899
1900   process_options ();
1901
1902   /* Don't do any more if an error has already occurred.  */
1903   if (!seen_error ())
1904     {
1905       timevar_start (TV_PHASE_SETUP);
1906
1907       /* This must be run always, because it is needed to compute the FP
1908          predefined macros, such as __LDBL_MAX__, for targets using non
1909          default FP formats.  */
1910       init_adjust_machine_modes ();
1911
1912       /* Set up the back-end if requested.  */
1913       if (!no_backend)
1914         backend_init ();
1915
1916       /* Language-dependent initialization.  Returns true on success.  */
1917       if (lang_dependent_init (main_input_filename))
1918         {
1919           /* Initialize yet another pass.  */
1920
1921           ggc_protect_identifiers = true;
1922
1923           init_cgraph ();
1924           init_final (main_input_filename);
1925           coverage_init (aux_base_name);
1926           statistics_init ();
1927           invoke_plugin_callbacks (PLUGIN_START_UNIT, NULL);
1928
1929           timevar_stop (TV_PHASE_SETUP);
1930
1931           compile_file ();
1932         }
1933       else
1934         {
1935           timevar_stop (TV_PHASE_SETUP);
1936         }
1937
1938       timevar_start (TV_PHASE_FINALIZE);
1939
1940       finalize (no_backend);
1941
1942       timevar_stop (TV_PHASE_FINALIZE);
1943     }
1944
1945   /* Stop timing and print the times.  */
1946   timevar_stop (TV_TOTAL);
1947   timevar_print (stderr);
1948 }
1949
1950 /* Entry point of cc1, cc1plus, jc1, f771, etc.
1951    Exit code is FATAL_EXIT_CODE if can't open files or if there were
1952    any errors, or SUCCESS_EXIT_CODE if compilation succeeded.
1953
1954    It is not safe to call this function more than once.  */
1955
1956 int
1957 toplev_main (int argc, char **argv)
1958 {
1959   /* Parsing and gimplification sometimes need quite large stack.
1960      Increase stack size limits if possible.  */
1961   stack_limit_increase (64 * 1024 * 1024);
1962
1963   expandargv (&argc, &argv);
1964
1965   /* Initialization of GCC's environment, and diagnostics.  */
1966   general_init (argv[0]);
1967
1968   /* One-off initialization of options that does not need to be
1969      repeated when options are added for particular functions.  */
1970   init_options_once ();
1971
1972   /* Initialize global options structures; this must be repeated for
1973      each structure used for parsing options.  */
1974   init_options_struct (&global_options, &global_options_set);
1975   lang_hooks.init_options_struct (&global_options);
1976
1977   /* Convert the options to an array.  */
1978   decode_cmdline_options_to_array_default_mask (argc,
1979                                                 CONST_CAST2 (const char **,
1980                                                              char **, argv),
1981                                                 &save_decoded_options,
1982                                                 &save_decoded_options_count);
1983
1984   /* Perform language-specific options initialization.  */
1985   lang_hooks.init_options (save_decoded_options_count, save_decoded_options);
1986
1987   /* Parse the options and do minimal processing; basically just
1988      enough to default flags appropriately.  */
1989   decode_options (&global_options, &global_options_set,
1990                   save_decoded_options, save_decoded_options_count,
1991                   UNKNOWN_LOCATION, global_dc);
1992
1993   handle_common_deferred_options ();
1994
1995   init_local_tick ();
1996
1997   initialize_plugins ();
1998
1999   if (version_flag)
2000     print_version (stderr, "");
2001
2002   if (help_flag)
2003     print_plugins_help (stderr, "");
2004
2005   /* Exit early if we can (e.g. -help).  */
2006   if (!exit_after_options)
2007     do_compile ();
2008
2009   if (warningcount || errorcount)
2010     print_ignored_options ();
2011   diagnostic_finish (global_dc);
2012
2013   /* Invoke registered plugin callbacks if any.  */
2014   invoke_plugin_callbacks (PLUGIN_FINISH, NULL);
2015
2016   finalize_plugins ();
2017   if (seen_error ())
2018     return (FATAL_EXIT_CODE);
2019
2020   return (SUCCESS_EXIT_CODE);
2021 }