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