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