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