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