OSDN Git Service

* toplev.c (output_stack_usage): Use lbasename instead of
[pf3gnuchains/gcc-fork.git] / gcc / toplev.c
1 /* Top level of GCC compilers (cc1, cc1plus, etc.)
2    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4    Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 /* This is the top level of cc1/c++.
23    It parses command args, opens files, invokes the various passes
24    in the proper order, and counts the time used by each.
25    Error messages and low-level interface to malloc also handled here.  */
26
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "tm.h"
31 #include <signal.h>
32
33 #ifdef HAVE_SYS_RESOURCE_H
34 # include <sys/resource.h>
35 #endif
36
37 #ifdef HAVE_SYS_TIMES_H
38 # include <sys/times.h>
39 #endif
40
41 #include "line-map.h"
42 #include "input.h"
43 #include "tree.h"
44 #include "realmpfr.h"   /* For GMP/MPFR/MPC versions, in print_version.  */
45 #include "version.h"
46 #include "rtl.h"
47 #include "tm_p.h"
48 #include "flags.h"
49 #include "insn-attr.h"
50 #include "insn-config.h"
51 #include "insn-flags.h"
52 #include "hard-reg-set.h"
53 #include "recog.h"
54 #include "output.h"
55 #include "except.h"
56 #include "function.h"
57 #include "toplev.h"
58 #include "expr.h"
59 #include "basic-block.h"
60 #include "intl.h"
61 #include "ggc.h"
62 #include "graph.h"
63 #include "regs.h"
64 #include "timevar.h"
65 #include "diagnostic.h"
66 #include "tree-diagnostic.h"
67 #include "tree-pretty-print.h"
68 #include "params.h"
69 #include "reload.h"
70 #include "ira.h"
71 #include "dwarf2asm.h"
72 #include "integrate.h"
73 #include "debug.h"
74 #include "target.h"
75 #include "langhooks.h"
76 #include "cfglayout.h"
77 #include "cfgloop.h"
78 #include "hosthooks.h"
79 #include "cgraph.h"
80 #include "opts.h"
81 #include "opts-diagnostic.h"
82 #include "coverage.h"
83 #include "value-prof.h"
84 #include "alloc-pool.h"
85 #include "tree-mudflap.h"
86 #include "tree-pass.h"
87 #include "gimple.h"
88 #include "tree-ssa-alias.h"
89 #include "plugin.h"
90
91 #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
92 #include "dwarf2out.h"
93 #endif
94
95 #if defined(DBX_DEBUGGING_INFO) || defined(XCOFF_DEBUGGING_INFO)
96 #include "dbxout.h"
97 #endif
98
99 #ifdef SDB_DEBUGGING_INFO
100 #include "sdbout.h"
101 #endif
102
103 #ifdef XCOFF_DEBUGGING_INFO
104 #include "xcoffout.h"           /* Needed for external data
105                                    declarations for e.g. AIX 4.x.  */
106 #endif
107
108 static void general_init (const char *);
109 static void do_compile (void);
110 static void process_options (void);
111 static void backend_init (void);
112 static int lang_dependent_init (const char *);
113 static void init_asm_output (const char *);
114 static void finalize (void);
115
116 static void crash_signal (int) ATTRIBUTE_NORETURN;
117 static void setup_core_dumping (void);
118 static void compile_file (void);
119
120 /* Nonzero to dump debug info whilst parsing (-dy option).  */
121 static int set_yydebug;
122
123 /* True if we don't need a backend (e.g. preprocessing only).  */
124 static bool no_backend;
125
126 /* Length of line when printing switch values.  */
127 #define MAX_LINE 75
128
129 /* Decoded options, and number of such options.  */
130 static struct cl_decoded_option *save_decoded_options;
131 static unsigned int save_decoded_options_count;
132
133 /* Name of top-level original source file (what was input to cpp).
134    This comes from the #-command at the beginning of the actual input.
135    If there isn't any there, then this is the cc1 input file name.  */
136
137 const char *main_input_filename;
138
139 /* Used to enable -fvar-tracking, -fweb and -frename-registers according
140    to optimize in process_options ().  */
141 #define AUTODETECT_VALUE 2
142
143 /* Name to use as base of names for dump output files.  */
144
145 const char *dump_base_name;
146
147 /* Directory used for dump output files.  */
148
149 const char *dump_dir_name;
150
151 /* Name to use as a base for auxiliary output files.  */
152
153 const char *aux_base_name;
154
155 /* Prefix for profile data files */
156 const char *profile_data_prefix;
157
158 /* A mask of target_flags that includes bit X if X was set or cleared
159    on the command line.  */
160
161 int target_flags_explicit;
162
163 /* Debug hooks - dependent upon command line options.  */
164
165 const struct gcc_debug_hooks *debug_hooks;
166
167 /* Other flags saying which kinds of debugging dump have been requested.  */
168
169 int rtl_dump_and_exit;
170 int flag_print_asm_name;
171 enum graph_dump_types graph_dump_format;
172
173 /* Name for output file of assembly code, specified with -o.  */
174
175 const char *asm_file_name;
176
177 /* Nonzero means do optimizations.  -O.
178    Particular numeric values stand for particular amounts of optimization;
179    thus, -O2 stores 2 here.  However, the optimizations beyond the basic
180    ones are not controlled directly by this variable.  Instead, they are
181    controlled by individual `flag_...' variables that are defaulted
182    based on this variable.  */
183
184 int optimize = 0;
185
186 /* Nonzero means optimize for size.  -Os.
187    The only valid values are zero and nonzero. When optimize_size is
188    nonzero, optimize defaults to 2, but certain individual code
189    bloating optimizations are disabled.  */
190
191 int optimize_size = 0;
192
193 /* True if this is the lto front end.  This is used to disable
194    gimple generation and lowering passes that are normally run on the
195    output of a front end.  These passes must be bypassed for lto since
196    they have already been done before the gimple was written.  */
197
198 bool in_lto_p = false;
199
200 /* Nonzero if we should write GIMPLE bytecode for link-time optimization.  */
201
202 int flag_generate_lto;
203
204 /* The FUNCTION_DECL for the function currently being compiled,
205    or 0 if between functions.  */
206 tree current_function_decl;
207
208 /* Set to the FUNC_BEGIN label of the current function, or NULL
209    if none.  */
210 const char * current_function_func_begin_label;
211
212 /* A random sequence of characters, unless overridden by user.  */
213 static const char *flag_random_seed;
214
215 /* A local time stamp derived from the time of compilation. It will be
216    zero if the system cannot provide a time.  It will be -1u, if the
217    user has specified a particular random seed.  */
218 unsigned local_tick;
219
220 /* -f flags.  */
221
222 /* 0 means straightforward implementation of complex divide acceptable.
223    1 means wide ranges of inputs must work for complex divide.
224    2 means C99-like requirements for complex multiply and divide.  */
225
226 int flag_complex_method = 1;
227
228 /* Nonzero means we should be saving declaration info into a .X file.  */
229
230 int flag_gen_aux_info = 0;
231
232 /* Specified name of aux-info file.  */
233
234 const char *aux_info_file_name;
235
236 /* Nonzero if we are compiling code for a shared library, zero for
237    executable.  */
238
239 int flag_shlib;
240
241 /* Generate code for GNU or NeXT Objective-C runtime environment.  */
242
243 #ifdef NEXT_OBJC_RUNTIME
244 int flag_next_runtime = 1;
245 #else
246 int flag_next_runtime = 0;
247 #endif
248
249 /* Set to the default thread-local storage (tls) model to use.  */
250
251 enum tls_model flag_tls_default = TLS_MODEL_GLOBAL_DYNAMIC;
252
253 /* Set the default region and algorithm for the integrated register
254    allocator.  */
255
256 enum ira_algorithm flag_ira_algorithm = IRA_ALGORITHM_CB;
257 enum ira_region flag_ira_region = IRA_REGION_MIXED;
258
259 /* Set the default for excess precision.  */
260
261 enum excess_precision flag_excess_precision_cmdline = EXCESS_PRECISION_DEFAULT;
262
263 /* Nonzero means change certain warnings into errors.
264    Usually these are warnings about failure to conform to some standard.  */
265
266 int flag_pedantic_errors = 0;
267
268 /* Nonzero means make permerror produce warnings instead of errors.  */
269
270 int flag_permissive = 0;
271
272 /* -dA causes debug commentary information to be produced in
273    the generated assembly code (to make it more readable).  This option
274    is generally only of use to those who actually need to read the
275    generated assembly code (perhaps while debugging the compiler itself).
276    Currently, this switch is only used by dwarfout.c; however, it is intended
277    to be a catchall for printing debug information in the assembler file.  */
278
279 int flag_debug_asm = 0;
280
281 /* -dP causes the rtl to be emitted as a comment in assembly.  */
282
283 int flag_dump_rtl_in_asm = 0;
284
285 /* When non-NULL, indicates that whenever space is allocated on the
286    stack, the resulting stack pointer must not pass this
287    address---that is, for stacks that grow downward, the stack pointer
288    must always be greater than or equal to this address; for stacks
289    that grow upward, the stack pointer must be less than this address.
290    At present, the rtx may be either a REG or a SYMBOL_REF, although
291    the support provided depends on the backend.  */
292 rtx stack_limit_rtx;
293
294 /* Positive if we should track variables, negative if we should run
295    the var-tracking pass only to discard debug annotations, zero if
296    we're not to run it.  When flag_var_tracking == AUTODETECT_VALUE it
297    will be set according to optimize, debug_info_level and debug_hooks
298    in process_options ().  */
299 int flag_var_tracking = AUTODETECT_VALUE;
300
301 /* Positive if we should track variables at assignments, negative if
302    we should run the var-tracking pass only to discard debug
303    annotations.  When flag_var_tracking_assignments ==
304    AUTODETECT_VALUE it will be set according to flag_var_tracking.  */
305 int flag_var_tracking_assignments = AUTODETECT_VALUE;
306
307 /* Nonzero if we should toggle flag_var_tracking_assignments after
308    processing options and computing its default.  */
309 int flag_var_tracking_assignments_toggle = 0;
310
311 /* Type of stack check.  */
312 enum stack_check_type flag_stack_check = NO_STACK_CHECK;
313
314 /* True if the user has tagged the function with the 'section'
315    attribute.  */
316
317 bool user_defined_section_attribute = false;
318
319 struct target_flag_state default_target_flag_state;
320 #if SWITCHABLE_TARGET
321 struct target_flag_state *this_target_flag_state = &default_target_flag_state;
322 #else
323 #define this_target_flag_state (&default_target_flag_state)
324 #endif
325
326 typedef struct
327 {
328   const char *const string;
329   int *const variable;
330   const int on_value;
331 }
332 lang_independent_options;
333
334 /* Nonzero if subexpressions must be evaluated from left-to-right.  */
335 int flag_evaluation_order = 0;
336
337 /* The user symbol prefix after having resolved same.  */
338 const char *user_label_prefix;
339
340 static const param_info lang_independent_params[] = {
341 #define DEFPARAM(ENUM, OPTION, HELP, DEFAULT, MIN, MAX) \
342   { OPTION, DEFAULT, false, MIN, MAX, HELP },
343 #include "params.def"
344 #undef DEFPARAM
345   { NULL, 0, false, 0, 0, NULL }
346 };
347
348 /* Output files for assembler code (real compiler output)
349    and debugging dumps.  */
350
351 FILE *asm_out_file;
352 FILE *aux_info_file;
353 FILE *stack_usage_file = NULL;
354 FILE *dump_file = NULL;
355 const char *dump_file_name;
356
357 /* The current working directory of a translation.  It's generally the
358    directory from which compilation was initiated, but a preprocessed
359    file may specify the original directory in which it was
360    created.  */
361
362 static const char *src_pwd;
363
364 /* Initialize src_pwd with the given string, and return true.  If it
365    was already initialized, return false.  As a special case, it may
366    be called with a NULL argument to test whether src_pwd has NOT been
367    initialized yet.  */
368
369 bool
370 set_src_pwd (const char *pwd)
371 {
372   if (src_pwd)
373     {
374       if (strcmp (src_pwd, pwd) == 0)
375         return true;
376       else
377         return false;
378     }
379
380   src_pwd = xstrdup (pwd);
381   return true;
382 }
383
384 /* Return the directory from which the translation unit was initiated,
385    in case set_src_pwd() was not called before to assign it a
386    different value.  */
387
388 const char *
389 get_src_pwd (void)
390 {
391   if (! src_pwd)
392     {
393       src_pwd = getpwd ();
394       if (!src_pwd)
395         src_pwd = ".";
396     }
397
398    return src_pwd;
399 }
400
401 /* Called when the start of a function definition is parsed,
402    this function prints on stderr the name of the function.  */
403 void
404 announce_function (tree decl)
405 {
406   if (!quiet_flag)
407     {
408       if (rtl_dump_and_exit)
409         fprintf (stderr, "%s ",
410                  identifier_to_locale (IDENTIFIER_POINTER (DECL_NAME (decl))));
411       else
412         fprintf (stderr, " %s",
413                  identifier_to_locale (lang_hooks.decl_printable_name (decl, 2)));
414       fflush (stderr);
415       pp_needs_newline (global_dc->printer) = true;
416       diagnostic_set_last_function (global_dc, (diagnostic_info *) NULL);
417     }
418 }
419
420 /* Initialize local_tick with the time of day, or -1 if
421    flag_random_seed is set.  */
422
423 static void
424 init_local_tick (void)
425 {
426   if (!flag_random_seed)
427     {
428       /* Get some more or less random data.  */
429 #ifdef HAVE_GETTIMEOFDAY
430       {
431         struct timeval tv;
432
433         gettimeofday (&tv, NULL);
434         local_tick = tv.tv_sec * 1000 + tv.tv_usec / 1000;
435       }
436 #else
437       {
438         time_t now = time (NULL);
439
440         if (now != (time_t)-1)
441           local_tick = (unsigned) now;
442       }
443 #endif
444     }
445   else
446     local_tick = -1;
447 }
448
449 /* Set up a default flag_random_seed and local_tick, unless the user
450    already specified one.  Must be called after init_local_tick.  */
451
452 static void
453 init_random_seed (void)
454 {
455   unsigned HOST_WIDE_INT value;
456   static char random_seed[HOST_BITS_PER_WIDE_INT / 4 + 3];
457
458   value = local_tick ^ getpid ();
459
460   sprintf (random_seed, HOST_WIDE_INT_PRINT_HEX, value);
461   flag_random_seed = random_seed;
462 }
463
464 /* Obtain the random_seed string.  Unless NOINIT, initialize it if
465    it's not provided in the command line.  */
466
467 const char *
468 get_random_seed (bool noinit)
469 {
470   if (!flag_random_seed && !noinit)
471     init_random_seed ();
472   return flag_random_seed;
473 }
474
475 /* Modify the random_seed string to VAL.  Return its previous
476    value.  */
477
478 const char *
479 set_random_seed (const char *val)
480 {
481   const char *old = flag_random_seed;
482   flag_random_seed = val;
483   return old;
484 }
485
486 #if GCC_VERSION < 3004
487
488 /* The functions clz_hwi, ctz_hwi, ffs_hwi, floor_log2 and exact_log2
489    are defined as inline functions in toplev.h if GCC_VERSION >= 3004.
490    The definitions here are used for older versions of gcc.  */
491
492 /* Given X, an unsigned number, return the largest int Y such that 2**Y <= X.
493    If X is 0, return -1.  */
494
495 int
496 floor_log2 (unsigned HOST_WIDE_INT x)
497 {
498   int t = 0;
499
500   if (x == 0)
501     return -1;
502
503   if (HOST_BITS_PER_WIDE_INT > 64)
504     if (x >= (unsigned HOST_WIDE_INT) 1 << (t + 64))
505       t += 64;
506   if (HOST_BITS_PER_WIDE_INT > 32)
507     if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 32))
508       t += 32;
509   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 16))
510     t += 16;
511   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 8))
512     t += 8;
513   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 4))
514     t += 4;
515   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 2))
516     t += 2;
517   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 1))
518     t += 1;
519
520   return t;
521 }
522
523 /* Return the logarithm of X, base 2, considering X unsigned,
524    if X is a power of 2.  Otherwise, returns -1.  */
525
526 int
527 exact_log2 (unsigned HOST_WIDE_INT x)
528 {
529   if (x != (x & -x))
530     return -1;
531   return floor_log2 (x);
532 }
533
534 /* Given X, an unsigned number, return the number of least significant bits
535    that are zero.  When X == 0, the result is the word size.  */
536
537 int
538 ctz_hwi (unsigned HOST_WIDE_INT x)
539 {
540   return x ? floor_log2 (x & -x) : HOST_BITS_PER_WIDE_INT;
541 }
542
543 /* Similarly for most significant bits.  */
544
545 int
546 clz_hwi (unsigned HOST_WIDE_INT x)
547 {
548   return HOST_BITS_PER_WIDE_INT - 1 - floor_log2(x);
549 }
550
551 /* Similar to ctz_hwi, except that the least significant bit is numbered
552    starting from 1, and X == 0 yields 0.  */
553
554 int
555 ffs_hwi (unsigned HOST_WIDE_INT x)
556 {
557   return 1 + floor_log2 (x & -x);
558 }
559
560 #endif /* GCC_VERSION < 3004 */
561
562 /* Handler for fatal signals, such as SIGSEGV.  These are transformed
563    into ICE messages, which is much more user friendly.  In case the
564    error printer crashes, reset the signal to prevent infinite recursion.  */
565
566 static void
567 crash_signal (int signo)
568 {
569   signal (signo, SIG_DFL);
570
571   /* If we crashed while processing an ASM statement, then be a little more
572      graceful.  It's most likely the user's fault.  */
573   if (this_is_asm_operands)
574     {
575       output_operand_lossage ("unrecoverable error");
576       exit (FATAL_EXIT_CODE);
577     }
578
579   internal_error ("%s", strsignal (signo));
580 }
581
582 /* Arrange to dump core on error.  (The regular error message is still
583    printed first, except in the case of abort().)  */
584
585 static void
586 setup_core_dumping (void)
587 {
588 #ifdef SIGABRT
589   signal (SIGABRT, SIG_DFL);
590 #endif
591 #if defined(HAVE_SETRLIMIT)
592   {
593     struct rlimit rlim;
594     if (getrlimit (RLIMIT_CORE, &rlim) != 0)
595       fatal_error ("getting core file size maximum limit: %m");
596     rlim.rlim_cur = rlim.rlim_max;
597     if (setrlimit (RLIMIT_CORE, &rlim) != 0)
598       fatal_error ("setting core file size limit to maximum: %m");
599   }
600 #endif
601   diagnostic_abort_on_error (global_dc);
602 }
603
604
605 /* Strip off a legitimate source ending from the input string NAME of
606    length LEN.  Rather than having to know the names used by all of
607    our front ends, we strip off an ending of a period followed by
608    up to five characters.  (Java uses ".class".)  */
609
610 void
611 strip_off_ending (char *name, int len)
612 {
613   int i;
614   for (i = 2; i < 6 && len > i; i++)
615     {
616       if (name[len - i] == '.')
617         {
618           name[len - i] = '\0';
619           break;
620         }
621     }
622 }
623
624 /* Output a quoted string.  */
625
626 void
627 output_quoted_string (FILE *asm_file, const char *string)
628 {
629 #ifdef OUTPUT_QUOTED_STRING
630   OUTPUT_QUOTED_STRING (asm_file, string);
631 #else
632   char c;
633
634   putc ('\"', asm_file);
635   while ((c = *string++) != 0)
636     {
637       if (ISPRINT (c))
638         {
639           if (c == '\"' || c == '\\')
640             putc ('\\', asm_file);
641           putc (c, asm_file);
642         }
643       else
644         fprintf (asm_file, "\\%03o", (unsigned char) c);
645     }
646   putc ('\"', asm_file);
647 #endif
648 }
649
650 /* A subroutine of wrapup_global_declarations.  We've come to the end of
651    the compilation unit.  All deferred variables should be undeferred,
652    and all incomplete decls should be finalized.  */
653
654 void
655 wrapup_global_declaration_1 (tree decl)
656 {
657   /* We're not deferring this any longer.  Assignment is conditional to
658      avoid needlessly dirtying PCH pages.  */
659   if (CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_WITH_VIS)
660       && DECL_DEFER_OUTPUT (decl) != 0)
661     DECL_DEFER_OUTPUT (decl) = 0;
662
663   if (TREE_CODE (decl) == VAR_DECL && DECL_SIZE (decl) == 0)
664     lang_hooks.finish_incomplete_decl (decl);
665 }
666
667 /* A subroutine of wrapup_global_declarations.  Decide whether or not DECL
668    needs to be output.  Return true if it is output.  */
669
670 bool
671 wrapup_global_declaration_2 (tree decl)
672 {
673   if (TREE_ASM_WRITTEN (decl) || DECL_EXTERNAL (decl))
674     return false;
675
676   /* Don't write out static consts, unless we still need them.
677
678      We also keep static consts if not optimizing (for debugging),
679      unless the user specified -fno-keep-static-consts.
680      ??? They might be better written into the debug information.
681      This is possible when using DWARF.
682
683      A language processor that wants static constants to be always
684      written out (even if it is not used) is responsible for
685      calling rest_of_decl_compilation itself.  E.g. the C front-end
686      calls rest_of_decl_compilation from finish_decl.
687      One motivation for this is that is conventional in some
688      environments to write things like:
689      static const char rcsid[] = "... version string ...";
690      intending to force the string to be in the executable.
691
692      A language processor that would prefer to have unneeded
693      static constants "optimized away" would just defer writing
694      them out until here.  E.g. C++ does this, because static
695      constants are often defined in header files.
696
697      ??? A tempting alternative (for both C and C++) would be
698      to force a constant to be written if and only if it is
699      defined in a main file, as opposed to an include file.  */
700
701   if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
702     {
703       struct varpool_node *node;
704       bool needed = true;
705       node = varpool_get_node (decl);
706
707       if (!node && flag_ltrans)
708         needed = false;
709       else if (node && node->finalized)
710         needed = false;
711       else if (node && node->alias)
712         needed = false;
713       else if (!cgraph_global_info_ready
714                && (TREE_USED (decl)
715                    || TREE_USED (DECL_ASSEMBLER_NAME (decl))))
716         /* needed */;
717       else if (node && node->needed)
718         /* needed */;
719       else if (DECL_COMDAT (decl))
720         needed = false;
721       else if (TREE_READONLY (decl) && !TREE_PUBLIC (decl)
722                && (optimize || !flag_keep_static_consts
723                    || DECL_ARTIFICIAL (decl)))
724         needed = false;
725
726       if (needed)
727         {
728           rest_of_decl_compilation (decl, 1, 1);
729           return true;
730         }
731     }
732
733   return false;
734 }
735
736 /* Do any final processing required for the declarations in VEC, of
737    which there are LEN.  We write out inline functions and variables
738    that have been deferred until this point, but which are required.
739    Returns nonzero if anything was put out.  */
740
741 bool
742 wrapup_global_declarations (tree *vec, int len)
743 {
744   bool reconsider, output_something = false;
745   int i;
746
747   for (i = 0; i < len; i++)
748     wrapup_global_declaration_1 (vec[i]);
749
750   /* Now emit any global variables or functions that we have been
751      putting off.  We need to loop in case one of the things emitted
752      here references another one which comes earlier in the list.  */
753   do
754     {
755       reconsider = false;
756       for (i = 0; i < len; i++)
757         reconsider |= wrapup_global_declaration_2 (vec[i]);
758       if (reconsider)
759         output_something = true;
760     }
761   while (reconsider);
762
763   return output_something;
764 }
765
766 /* A subroutine of check_global_declarations.  Issue appropriate warnings
767    for the global declaration DECL.  */
768
769 void
770 check_global_declaration_1 (tree decl)
771 {
772   /* Warn about any function declared static but not defined.  We don't
773      warn about variables, because many programs have static variables
774      that exist only to get some text into the object file.  */
775   if (TREE_CODE (decl) == FUNCTION_DECL
776       && DECL_INITIAL (decl) == 0
777       && DECL_EXTERNAL (decl)
778       && ! DECL_ARTIFICIAL (decl)
779       && ! TREE_NO_WARNING (decl)
780       && ! TREE_PUBLIC (decl)
781       && (warn_unused_function
782           || TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
783     {
784       if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
785         pedwarn (input_location, 0, "%q+F used but never defined", decl);
786       else
787         warning (OPT_Wunused_function, "%q+F declared %<static%> but never defined", decl);
788       /* This symbol is effectively an "extern" declaration now.  */
789       TREE_PUBLIC (decl) = 1;
790       assemble_external (decl);
791     }
792
793   /* Warn about static fns or vars defined but not used.  */
794   if (((warn_unused_function && TREE_CODE (decl) == FUNCTION_DECL)
795        /* We don't warn about "static const" variables because the
796           "rcs_id" idiom uses that construction.  */
797        || (warn_unused_variable
798            && TREE_CODE (decl) == VAR_DECL && ! TREE_READONLY (decl)))
799       && ! DECL_IN_SYSTEM_HEADER (decl)
800       && ! TREE_USED (decl)
801       /* The TREE_USED bit for file-scope decls is kept in the identifier,
802          to handle multiple external decls in different scopes.  */
803       && ! (DECL_NAME (decl) && TREE_USED (DECL_NAME (decl)))
804       && ! DECL_EXTERNAL (decl)
805       && ! TREE_PUBLIC (decl)
806       /* A volatile variable might be used in some non-obvious way.  */
807       && ! TREE_THIS_VOLATILE (decl)
808       /* Global register variables must be declared to reserve them.  */
809       && ! (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
810       /* Otherwise, ask the language.  */
811       && lang_hooks.decls.warn_unused_global (decl))
812     warning ((TREE_CODE (decl) == FUNCTION_DECL)
813              ? OPT_Wunused_function
814              : OPT_Wunused_variable,
815              "%q+D defined but not used", decl);
816 }
817
818 /* Issue appropriate warnings for the global declarations in VEC (of
819    which there are LEN).  */
820
821 void
822 check_global_declarations (tree *vec, int len)
823 {
824   int i;
825
826   for (i = 0; i < len; i++)
827     check_global_declaration_1 (vec[i]);
828 }
829
830 /* Emit debugging information for all global declarations in VEC.  */
831
832 void
833 emit_debug_global_declarations (tree *vec, int len)
834 {
835   int i;
836
837   /* Avoid confusing the debug information machinery when there are errors.  */
838   if (seen_error ())
839     return;
840
841   timevar_push (TV_SYMOUT);
842   for (i = 0; i < len; i++)
843     debug_hooks->global_decl (vec[i]);
844   timevar_pop (TV_SYMOUT);
845 }
846
847 /* Warn about a use of an identifier which was marked deprecated.  */
848 void
849 warn_deprecated_use (tree node, tree attr)
850 {
851   const char *msg;
852
853   if (node == 0 || !warn_deprecated_decl)
854     return;
855
856   if (!attr)
857     {
858       if (DECL_P (node))
859         attr = DECL_ATTRIBUTES (node);
860       else if (TYPE_P (node))
861         {
862           tree decl = TYPE_STUB_DECL (node);
863           if (decl)
864             attr = lookup_attribute ("deprecated",
865                                      TYPE_ATTRIBUTES (TREE_TYPE (decl)));
866         }
867     }
868
869   if (attr)
870     attr = lookup_attribute ("deprecated", attr);
871
872   if (attr)
873     msg = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)));
874   else
875     msg = NULL;
876
877   if (DECL_P (node))
878     {
879       expanded_location xloc = expand_location (DECL_SOURCE_LOCATION (node));
880       if (msg)
881         warning (OPT_Wdeprecated_declarations,
882                  "%qD is deprecated (declared at %s:%d): %s",
883                  node, xloc.file, xloc.line, msg);
884       else
885         warning (OPT_Wdeprecated_declarations,
886                  "%qD is deprecated (declared at %s:%d)",
887                  node, xloc.file, xloc.line);
888     }
889   else if (TYPE_P (node))
890     {
891       tree what = NULL_TREE;
892       tree decl = TYPE_STUB_DECL (node);
893
894       if (TYPE_NAME (node))
895         {
896           if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
897             what = TYPE_NAME (node);
898           else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
899                    && DECL_NAME (TYPE_NAME (node)))
900             what = DECL_NAME (TYPE_NAME (node));
901         }
902
903       if (decl)
904         {
905           expanded_location xloc
906             = expand_location (DECL_SOURCE_LOCATION (decl));
907           if (what)
908             {
909               if (msg)
910                 warning (OPT_Wdeprecated_declarations,
911                          "%qE is deprecated (declared at %s:%d): %s",
912                          what, xloc.file, xloc.line, msg);
913               else
914                 warning (OPT_Wdeprecated_declarations,
915                          "%qE is deprecated (declared at %s:%d)", what,
916                          xloc.file, xloc.line);
917             }
918           else
919             {
920               if (msg)
921                 warning (OPT_Wdeprecated_declarations,
922                          "type is deprecated (declared at %s:%d): %s",
923                          xloc.file, xloc.line, msg);
924               else
925                 warning (OPT_Wdeprecated_declarations,
926                          "type is deprecated (declared at %s:%d)",
927                          xloc.file, xloc.line);
928             }
929         }
930       else
931         {
932           if (what)
933             {
934               if (msg)
935                 warning (OPT_Wdeprecated_declarations, "%qE is deprecated: %s",
936                          what, msg);
937               else
938                 warning (OPT_Wdeprecated_declarations, "%qE is deprecated", what);
939             }
940           else
941             {
942               if (msg)
943                 warning (OPT_Wdeprecated_declarations, "type is deprecated: %s",
944                          msg);
945               else
946                 warning (OPT_Wdeprecated_declarations, "type is deprecated");
947             }
948         }
949     }
950 }
951
952 /* Compile an entire translation unit.  Write a file of assembly
953    output and various debugging dumps.  */
954
955 static void
956 compile_file (void)
957 {
958   /* Initialize yet another pass.  */
959
960   ggc_protect_identifiers = true;
961
962   init_cgraph ();
963   init_final (main_input_filename);
964   coverage_init (aux_base_name);
965   statistics_init ();
966   invoke_plugin_callbacks (PLUGIN_START_UNIT, NULL);
967
968   timevar_push (TV_PARSE);
969
970   /* Call the parser, which parses the entire file (calling
971      rest_of_compilation for each function).  */
972   lang_hooks.parse_file (set_yydebug);
973
974   /* Compilation is now finished except for writing
975      what's left of the symbol table output.  */
976   timevar_pop (TV_PARSE);
977
978   if (flag_syntax_only || flag_wpa)
979     return;
980
981   ggc_protect_identifiers = false;
982
983   /* This must also call cgraph_finalize_compilation_unit.  */
984   lang_hooks.decls.final_write_globals ();
985
986   if (seen_error ())
987     return;
988
989   varpool_assemble_pending_decls ();
990   finish_aliases_2 ();
991
992   /* Likewise for mudflap static object registrations.  */
993   if (flag_mudflap)
994     mudflap_finish_file ();
995
996   output_shared_constant_pool ();
997   output_object_blocks ();
998
999   /* Write out any pending weak symbol declarations.  */
1000   weak_finish ();
1001
1002   /* This must be at the end before unwind and debug info.
1003      Some target ports emit PIC setup thunks here.  */
1004   targetm.asm_out.code_end ();
1005
1006   /* Do dbx symbols.  */
1007   timevar_push (TV_SYMOUT);
1008
1009 #if defined DWARF2_DEBUGGING_INFO || defined DWARF2_UNWIND_INFO
1010   if (dwarf2out_do_frame ())
1011     dwarf2out_frame_finish ();
1012 #endif
1013
1014   (*debug_hooks->finish) (main_input_filename);
1015   timevar_pop (TV_SYMOUT);
1016
1017   /* Output some stuff at end of file if nec.  */
1018
1019   dw2_output_indirect_constants ();
1020
1021   /* Flush any pending external directives.  */
1022   process_pending_assemble_externals ();
1023
1024   /* Emit LTO marker if LTO info has been previously emitted.  This is
1025      used by collect2 to determine whether an object file contains IL.
1026      We used to emit an undefined reference here, but this produces
1027      link errors if an object file with IL is stored into a shared
1028      library without invoking lto1.  */
1029   if (flag_generate_lto)
1030     {
1031 #if defined ASM_OUTPUT_ALIGNED_DECL_COMMON
1032       ASM_OUTPUT_ALIGNED_DECL_COMMON (asm_out_file, NULL_TREE,
1033                                       "__gnu_lto_v1",
1034                                       (unsigned HOST_WIDE_INT) 1, 8);
1035 #elif defined ASM_OUTPUT_ALIGNED_COMMON
1036       ASM_OUTPUT_ALIGNED_COMMON (asm_out_file, "__gnu_lto_v1",
1037                                  (unsigned HOST_WIDE_INT) 1, 8);
1038 #else
1039       ASM_OUTPUT_COMMON (asm_out_file, "__gnu_lto_v1",
1040                          (unsigned HOST_WIDE_INT) 1,
1041                          (unsigned HOST_WIDE_INT) 1);
1042 #endif
1043     }
1044
1045   /* Attach a special .ident directive to the end of the file to identify
1046      the version of GCC which compiled this code.  The format of the .ident
1047      string is patterned after the ones produced by native SVR4 compilers.  */
1048 #ifdef IDENT_ASM_OP
1049   if (!flag_no_ident)
1050     {
1051       const char *pkg_version = "(GNU) ";
1052
1053       if (strcmp ("(GCC) ", pkgversion_string))
1054         pkg_version = pkgversion_string;
1055       fprintf (asm_out_file, "%s\"GCC: %s%s\"\n",
1056                IDENT_ASM_OP, pkg_version, version_string);
1057     }
1058 #endif
1059
1060   /* Invoke registered plugin callbacks.  */
1061   invoke_plugin_callbacks (PLUGIN_FINISH_UNIT, NULL);
1062
1063   /* This must be at the end.  Some target ports emit end of file directives
1064      into the assembly file here, and hence we can not output anything to the
1065      assembly file after this point.  */
1066   targetm.asm_out.file_end ();
1067 }
1068
1069 /* Parse a -d... command line switch.  */
1070
1071 void
1072 decode_d_option (const char *arg)
1073 {
1074   int c;
1075
1076   while (*arg)
1077     switch (c = *arg++)
1078       {
1079       case 'A':
1080         flag_debug_asm = 1;
1081         break;
1082       case 'p':
1083         flag_print_asm_name = 1;
1084         break;
1085       case 'P':
1086         flag_dump_rtl_in_asm = 1;
1087         flag_print_asm_name = 1;
1088         break;
1089       case 'v':
1090         graph_dump_format = vcg;
1091         break;
1092       case 'x':
1093         rtl_dump_and_exit = 1;
1094         break;
1095       case 'y':
1096         set_yydebug = 1;
1097         break;
1098       case 'D': /* These are handled by the preprocessor.  */
1099       case 'I':
1100       case 'M':
1101       case 'N':
1102       case 'U':
1103         break;
1104       case 'H':
1105         setup_core_dumping();
1106         break;
1107       case 'a':
1108         enable_rtl_dump_file ();
1109         break;
1110
1111       default:
1112           warning (0, "unrecognized gcc debugging option: %c", c);
1113         break;
1114       }
1115 }
1116
1117 /* Indexed by enum debug_info_type.  */
1118 const char *const debug_type_names[] =
1119 {
1120   "none", "stabs", "coff", "dwarf-2", "xcoff", "vms"
1121 };
1122
1123 /* Print version information to FILE.
1124    Each line begins with INDENT (for the case where FILE is the
1125    assembler output file).  */
1126
1127 void
1128 print_version (FILE *file, const char *indent)
1129 {
1130   static const char fmt1[] =
1131 #ifdef __GNUC__
1132     N_("%s%s%s %sversion %s (%s)\n%s\tcompiled by GNU C version %s, ")
1133 #else
1134     N_("%s%s%s %sversion %s (%s) compiled by CC, ")
1135 #endif
1136     ;
1137   static const char fmt2[] =
1138     N_("GMP version %s, MPFR version %s, MPC version %s\n");
1139   static const char fmt3[] =
1140     N_("%s%swarning: %s header version %s differs from library version %s.\n");
1141   static const char fmt4[] =
1142     N_("%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n");
1143 #ifndef __VERSION__
1144 #define __VERSION__ "[?]"
1145 #endif
1146   fprintf (file,
1147            file == stderr ? _(fmt1) : fmt1,
1148            indent, *indent != 0 ? " " : "",
1149            lang_hooks.name, pkgversion_string, version_string, TARGET_NAME,
1150            indent, __VERSION__);
1151
1152   /* We need to stringify the GMP macro values.  Ugh, gmp_version has
1153      two string formats, "i.j.k" and "i.j" when k is zero.  As of
1154      gmp-4.3.0, GMP always uses the 3 number format.  */
1155 #define GCC_GMP_STRINGIFY_VERSION3(X) #X
1156 #define GCC_GMP_STRINGIFY_VERSION2(X) GCC_GMP_STRINGIFY_VERSION3(X)
1157 #define GCC_GMP_VERSION_NUM(X,Y,Z) (((X) << 16L) | ((Y) << 8) | (Z))
1158 #define GCC_GMP_VERSION \
1159   GCC_GMP_VERSION_NUM(__GNU_MP_VERSION, __GNU_MP_VERSION_MINOR, __GNU_MP_VERSION_PATCHLEVEL)
1160 #if GCC_GMP_VERSION < GCC_GMP_VERSION_NUM(4,3,0) && __GNU_MP_VERSION_PATCHLEVEL == 0
1161 #define GCC_GMP_STRINGIFY_VERSION GCC_GMP_STRINGIFY_VERSION2(__GNU_MP_VERSION) "." \
1162   GCC_GMP_STRINGIFY_VERSION2(__GNU_MP_VERSION_MINOR)
1163 #else
1164 #define GCC_GMP_STRINGIFY_VERSION GCC_GMP_STRINGIFY_VERSION2(__GNU_MP_VERSION) "." \
1165   GCC_GMP_STRINGIFY_VERSION2(__GNU_MP_VERSION_MINOR) "." \
1166   GCC_GMP_STRINGIFY_VERSION2(__GNU_MP_VERSION_PATCHLEVEL)
1167 #endif
1168   fprintf (file,
1169            file == stderr ? _(fmt2) : fmt2,
1170            GCC_GMP_STRINGIFY_VERSION, MPFR_VERSION_STRING, MPC_VERSION_STRING);
1171   if (strcmp (GCC_GMP_STRINGIFY_VERSION, gmp_version))
1172     fprintf (file,
1173              file == stderr ? _(fmt3) : fmt3,
1174              indent, *indent != 0 ? " " : "",
1175              "GMP", GCC_GMP_STRINGIFY_VERSION, gmp_version);
1176   if (strcmp (MPFR_VERSION_STRING, mpfr_get_version ()))
1177     fprintf (file,
1178              file == stderr ? _(fmt3) : fmt3,
1179              indent, *indent != 0 ? " " : "",
1180              "MPFR", MPFR_VERSION_STRING, mpfr_get_version ());
1181   if (strcmp (MPC_VERSION_STRING, mpc_get_version ()))
1182     fprintf (file,
1183              file == stderr ? _(fmt3) : fmt3,
1184              indent, *indent != 0 ? " " : "",
1185              "MPC", MPC_VERSION_STRING, mpc_get_version ());
1186   fprintf (file,
1187            file == stderr ? _(fmt4) : fmt4,
1188            indent, *indent != 0 ? " " : "",
1189            PARAM_VALUE (GGC_MIN_EXPAND), PARAM_VALUE (GGC_MIN_HEAPSIZE));
1190
1191   print_plugins_versions (file, indent);
1192 }
1193
1194 #ifdef ASM_COMMENT_START
1195 static int
1196 print_to_asm_out_file (print_switch_type type, const char * text)
1197 {
1198   bool prepend_sep = true;
1199
1200   switch (type)
1201     {
1202     case SWITCH_TYPE_LINE_END:
1203       putc ('\n', asm_out_file);
1204       return 1;
1205
1206     case SWITCH_TYPE_LINE_START:
1207       fputs (ASM_COMMENT_START, asm_out_file);
1208       return strlen (ASM_COMMENT_START);
1209
1210     case SWITCH_TYPE_DESCRIPTIVE:
1211       if (ASM_COMMENT_START[0] == 0)
1212         prepend_sep = false;
1213       /* Drop through.  */
1214     case SWITCH_TYPE_PASSED:
1215     case SWITCH_TYPE_ENABLED:
1216       if (prepend_sep)
1217         fputc (' ', asm_out_file);
1218       fputs (text, asm_out_file);
1219       /* No need to return the length here as
1220          print_single_switch has already done it.  */
1221       return 0;
1222
1223     default:
1224       return -1;
1225     }
1226 }
1227 #endif
1228
1229 static int
1230 print_to_stderr (print_switch_type type, const char * text)
1231 {
1232   switch (type)
1233     {
1234     case SWITCH_TYPE_LINE_END:
1235       putc ('\n', stderr);
1236       return 1;
1237
1238     case SWITCH_TYPE_LINE_START:
1239       return 0;
1240
1241     case SWITCH_TYPE_PASSED:
1242     case SWITCH_TYPE_ENABLED:
1243       fputc (' ', stderr);
1244       /* Drop through.  */
1245
1246     case SWITCH_TYPE_DESCRIPTIVE:
1247       fputs (text, stderr);
1248       /* No need to return the length here as
1249          print_single_switch has already done it.  */
1250       return 0;
1251
1252     default:
1253       return -1;
1254     }
1255 }
1256
1257 /* Print an option value and return the adjusted position in the line.
1258    ??? print_fn doesn't handle errors, eg disk full; presumably other
1259    code will catch a disk full though.  */
1260
1261 static int
1262 print_single_switch (print_switch_fn_type print_fn,
1263                      int pos,
1264                      print_switch_type type,
1265                      const char * text)
1266 {
1267   /* The ultrix fprintf returns 0 on success, so compute the result
1268      we want here since we need it for the following test.  The +1
1269      is for the separator character that will probably be emitted.  */
1270   int len = strlen (text) + 1;
1271
1272   if (pos != 0
1273       && pos + len > MAX_LINE)
1274     {
1275       print_fn (SWITCH_TYPE_LINE_END, NULL);
1276       pos = 0;
1277     }
1278
1279   if (pos == 0)
1280     pos += print_fn (SWITCH_TYPE_LINE_START, NULL);
1281
1282   print_fn (type, text);
1283   return pos + len;
1284 }
1285
1286 /* Print active target switches using PRINT_FN.
1287    POS is the current cursor position and MAX is the size of a "line".
1288    Each line begins with INDENT and ends with TERM.
1289    Each switch is separated from the next by SEP.  */
1290
1291 static void
1292 print_switch_values (print_switch_fn_type print_fn)
1293 {
1294   int pos = 0;
1295   size_t j;
1296
1297   /* Fill in the -frandom-seed option, if the user didn't pass it, so
1298      that it can be printed below.  This helps reproducibility.  */
1299   if (!flag_random_seed)
1300     init_random_seed ();
1301
1302   /* Print the options as passed.  */
1303   pos = print_single_switch (print_fn, pos,
1304                              SWITCH_TYPE_DESCRIPTIVE, _("options passed: "));
1305
1306   for (j = 1; j < save_decoded_options_count; j++)
1307     {
1308       switch (save_decoded_options[j].opt_index)
1309         {
1310         case OPT_o:
1311         case OPT_d:
1312         case OPT_dumpbase:
1313         case OPT_dumpdir:
1314         case OPT_auxbase:
1315         case OPT_quiet:
1316         case OPT_version:
1317           /* Ignore these.  */
1318           continue;
1319         }
1320
1321       pos = print_single_switch (print_fn, pos, SWITCH_TYPE_PASSED,
1322                                  save_decoded_options[j].orig_option_with_args_text);
1323     }
1324
1325   if (pos > 0)
1326     print_fn (SWITCH_TYPE_LINE_END, NULL);
1327
1328   /* Print the -f and -m options that have been enabled.
1329      We don't handle language specific options but printing argv
1330      should suffice.  */
1331   pos = print_single_switch (print_fn, 0,
1332                              SWITCH_TYPE_DESCRIPTIVE, _("options enabled: "));
1333
1334   for (j = 0; j < cl_options_count; j++)
1335     if ((cl_options[j].flags & CL_REPORT)
1336         && option_enabled (j) > 0)
1337       pos = print_single_switch (print_fn, pos,
1338                                  SWITCH_TYPE_ENABLED, cl_options[j].opt_text);
1339
1340   print_fn (SWITCH_TYPE_LINE_END, NULL);
1341 }
1342
1343 /* Open assembly code output file.  Do this even if -fsyntax-only is
1344    on, because then the driver will have provided the name of a
1345    temporary file or bit bucket for us.  NAME is the file specified on
1346    the command line, possibly NULL.  */
1347 static void
1348 init_asm_output (const char *name)
1349 {
1350   if (name == NULL && asm_file_name == 0)
1351     asm_out_file = stdout;
1352   else
1353     {
1354       if (asm_file_name == 0)
1355         {
1356           int len = strlen (dump_base_name);
1357           char *dumpname = XNEWVEC (char, len + 6);
1358
1359           memcpy (dumpname, dump_base_name, len + 1);
1360           strip_off_ending (dumpname, len);
1361           strcat (dumpname, ".s");
1362           asm_file_name = dumpname;
1363         }
1364       if (!strcmp (asm_file_name, "-"))
1365         asm_out_file = stdout;
1366       else
1367         asm_out_file = fopen (asm_file_name, "w+b");
1368       if (asm_out_file == 0)
1369         fatal_error ("can%'t open %s for writing: %m", asm_file_name);
1370     }
1371
1372   if (!flag_syntax_only)
1373     {
1374       targetm.asm_out.file_start ();
1375
1376       if (flag_record_gcc_switches)
1377         {
1378           if (targetm.asm_out.record_gcc_switches)
1379             {
1380               /* Let the target know that we are about to start recording.  */
1381               targetm.asm_out.record_gcc_switches (SWITCH_TYPE_DESCRIPTIVE,
1382                                                    NULL);
1383               /* Now record the switches.  */
1384               print_switch_values (targetm.asm_out.record_gcc_switches);
1385               /* Let the target know that the recording is over.  */
1386               targetm.asm_out.record_gcc_switches (SWITCH_TYPE_DESCRIPTIVE,
1387                                                    NULL);
1388             }
1389           else
1390             inform (input_location, "-frecord-gcc-switches is not supported by the current target");
1391         }
1392
1393 #ifdef ASM_COMMENT_START
1394       if (flag_verbose_asm)
1395         {
1396           /* Print the list of switches in effect
1397              into the assembler file as comments.  */
1398           print_version (asm_out_file, ASM_COMMENT_START);
1399           print_switch_values (print_to_asm_out_file);
1400           putc ('\n', asm_out_file);
1401         }
1402 #endif
1403     }
1404 }
1405
1406 /* Return true if the state of option OPTION should be stored in PCH files
1407    and checked by default_pch_valid_p.  Store the option's current state
1408    in STATE if so.  */
1409
1410 static inline bool
1411 option_affects_pch_p (int option, struct cl_option_state *state)
1412 {
1413   if ((cl_options[option].flags & CL_TARGET) == 0)
1414     return false;
1415   if (cl_options[option].flag_var == &target_flags)
1416     if (targetm.check_pch_target_flags)
1417       return false;
1418   return get_option_state (option, state);
1419 }
1420
1421 /* Default version of get_pch_validity.
1422    By default, every flag difference is fatal; that will be mostly right for
1423    most targets, but completely right for very few.  */
1424
1425 void *
1426 default_get_pch_validity (size_t *sz)
1427 {
1428   struct cl_option_state state;
1429   size_t i;
1430   char *result, *r;
1431
1432   *sz = 2;
1433   if (targetm.check_pch_target_flags)
1434     *sz += sizeof (target_flags);
1435   for (i = 0; i < cl_options_count; i++)
1436     if (option_affects_pch_p (i, &state))
1437       *sz += state.size;
1438
1439   result = r = XNEWVEC (char, *sz);
1440   r[0] = flag_pic;
1441   r[1] = flag_pie;
1442   r += 2;
1443   if (targetm.check_pch_target_flags)
1444     {
1445       memcpy (r, &target_flags, sizeof (target_flags));
1446       r += sizeof (target_flags);
1447     }
1448
1449   for (i = 0; i < cl_options_count; i++)
1450     if (option_affects_pch_p (i, &state))
1451       {
1452         memcpy (r, state.data, state.size);
1453         r += state.size;
1454       }
1455
1456   return result;
1457 }
1458
1459 /* Return a message which says that a PCH file was created with a different
1460    setting of OPTION.  */
1461
1462 static const char *
1463 pch_option_mismatch (const char *option)
1464 {
1465   char *r;
1466
1467   asprintf (&r, _("created and used with differing settings of '%s'"), option);
1468   if (r == NULL)
1469     return _("out of memory");
1470   return r;
1471 }
1472
1473 /* Default version of pch_valid_p.  */
1474
1475 const char *
1476 default_pch_valid_p (const void *data_p, size_t len)
1477 {
1478   struct cl_option_state state;
1479   const char *data = (const char *)data_p;
1480   size_t i;
1481
1482   /* -fpic and -fpie also usually make a PCH invalid.  */
1483   if (data[0] != flag_pic)
1484     return _("created and used with different settings of -fpic");
1485   if (data[1] != flag_pie)
1486     return _("created and used with different settings of -fpie");
1487   data += 2;
1488
1489   /* Check target_flags.  */
1490   if (targetm.check_pch_target_flags)
1491     {
1492       int tf;
1493       const char *r;
1494
1495       memcpy (&tf, data, sizeof (target_flags));
1496       data += sizeof (target_flags);
1497       len -= sizeof (target_flags);
1498       r = targetm.check_pch_target_flags (tf);
1499       if (r != NULL)
1500         return r;
1501     }
1502
1503   for (i = 0; i < cl_options_count; i++)
1504     if (option_affects_pch_p (i, &state))
1505       {
1506         if (memcmp (data, state.data, state.size) != 0)
1507           return pch_option_mismatch (cl_options[i].opt_text);
1508         data += state.size;
1509         len -= state.size;
1510       }
1511
1512   return NULL;
1513 }
1514
1515 /* Default tree printer.   Handles declarations only.  */
1516 bool
1517 default_tree_printer (pretty_printer *pp, text_info *text, const char *spec,
1518                       int precision, bool wide, bool set_locus, bool hash)
1519 {
1520   tree t;
1521
1522   /* FUTURE: %+x should set the locus.  */
1523   if (precision != 0 || wide || hash)
1524     return false;
1525
1526   switch (*spec)
1527     {
1528     case 'E':
1529       t = va_arg (*text->args_ptr, tree);
1530       if (TREE_CODE (t) == IDENTIFIER_NODE)
1531         {
1532           pp_identifier (pp, IDENTIFIER_POINTER (t));
1533           return true;
1534         }
1535       break;
1536
1537     case 'D':
1538       t = va_arg (*text->args_ptr, tree);
1539       if (DECL_DEBUG_EXPR_IS_FROM (t) && DECL_DEBUG_EXPR (t))
1540         t = DECL_DEBUG_EXPR (t);
1541       break;
1542
1543     case 'F':
1544     case 'T':
1545       t = va_arg (*text->args_ptr, tree);
1546       break;
1547
1548     case 'K':
1549       percent_K_format (text);
1550       return true;
1551
1552     default:
1553       return false;
1554     }
1555
1556   if (set_locus && text->locus)
1557     *text->locus = DECL_SOURCE_LOCATION (t);
1558
1559   if (DECL_P (t))
1560     {
1561       const char *n = DECL_NAME (t)
1562         ? identifier_to_locale (lang_hooks.decl_printable_name (t, 2))
1563         : _("<anonymous>");
1564       pp_string (pp, n);
1565     }
1566   else
1567     dump_generic_node (pp, t, 0, TDF_DIAGNOSTIC, 0);
1568
1569   return true;
1570 }
1571
1572 /* A helper function; used as the reallocator function for cpp's line
1573    table.  */
1574 static void *
1575 realloc_for_line_map (void *ptr, size_t len)
1576 {
1577   return GGC_RESIZEVAR (void, ptr, len);
1578 }
1579
1580 /* A helper function: used as the allocator function for
1581    identifier_to_locale.  */
1582 static void *
1583 alloc_for_identifier_to_locale (size_t len)
1584 {
1585   return ggc_alloc_atomic (len);
1586 }
1587
1588 /* Output stack usage information.  */
1589 void
1590 output_stack_usage (void)
1591 {
1592   static bool warning_issued = false;
1593   enum stack_usage_kind_type { STATIC = 0, DYNAMIC, DYNAMIC_BOUNDED };
1594   const char *stack_usage_kind_str[] = {
1595     "static",
1596     "dynamic",
1597     "dynamic,bounded"
1598   };
1599   HOST_WIDE_INT stack_usage = current_function_static_stack_size;
1600   enum stack_usage_kind_type stack_usage_kind;
1601   expanded_location loc;
1602   const char *raw_id, *id;
1603
1604   if (stack_usage < 0)
1605     {
1606       if (!warning_issued)
1607         {
1608           warning (0, "-fstack-usage not supported for this target");
1609           warning_issued = true;
1610         }
1611       return;
1612     }
1613
1614   stack_usage_kind = STATIC;
1615
1616   /* Add the maximum amount of space pushed onto the stack.  */
1617   if (current_function_pushed_stack_size > 0)
1618     {
1619       stack_usage += current_function_pushed_stack_size;
1620       stack_usage_kind = DYNAMIC_BOUNDED;
1621     }
1622
1623   /* Now on to the tricky part: dynamic stack allocation.  */
1624   if (current_function_allocates_dynamic_stack_space)
1625     {
1626       if (current_function_has_unbounded_dynamic_stack_size)
1627         stack_usage_kind = DYNAMIC;
1628       else
1629         stack_usage_kind = DYNAMIC_BOUNDED;
1630
1631       /* Add the size even in the unbounded case, this can't hurt.  */
1632       stack_usage += current_function_dynamic_stack_size;
1633     }
1634
1635   loc = expand_location (DECL_SOURCE_LOCATION (current_function_decl));
1636
1637   /* Strip the scope prefix if any.  */
1638   raw_id = lang_hooks.decl_printable_name (current_function_decl, 2);
1639   id = strrchr (raw_id, '.');
1640   if (id)
1641     id++;
1642   else
1643     id = raw_id;
1644
1645   fprintf (stack_usage_file,
1646            "%s:%d:%d:%s\t"HOST_WIDE_INT_PRINT_DEC"\t%s\n",
1647            lbasename (loc.file),
1648            loc.line,
1649            loc.column,
1650            id,
1651            stack_usage,
1652            stack_usage_kind_str[stack_usage_kind]);
1653 }
1654
1655 /* Open an auxiliary output file.  */
1656 static FILE *
1657 open_auxiliary_file (const char *ext)
1658 {
1659   char *filename;
1660   FILE *file;
1661
1662   filename = concat (aux_base_name, ".", ext, NULL);
1663   file = fopen (filename, "w");
1664   if (!file)
1665     fatal_error ("can't open %s for writing: %m", filename);
1666   free (filename);
1667   return file;
1668 }
1669
1670 /* Initialization of the front end environment, before command line
1671    options are parsed.  Signal handlers, internationalization etc.
1672    ARGV0 is main's argv[0].  */
1673 static void
1674 general_init (const char *argv0)
1675 {
1676   const char *p;
1677
1678   p = argv0 + strlen (argv0);
1679   while (p != argv0 && !IS_DIR_SEPARATOR (p[-1]))
1680     --p;
1681   progname = p;
1682
1683   xmalloc_set_program_name (progname);
1684
1685   hex_init ();
1686
1687   /* Unlock the stdio streams.  */
1688   unlock_std_streams ();
1689
1690   gcc_init_libintl ();
1691
1692   identifier_to_locale_alloc = alloc_for_identifier_to_locale;
1693   identifier_to_locale_free = ggc_free;
1694
1695   /* Initialize the diagnostics reporting machinery, so option parsing
1696      can give warnings and errors.  */
1697   diagnostic_initialize (global_dc, N_OPTS);
1698   diagnostic_starter (global_dc) = default_tree_diagnostic_starter;
1699   /* Set a default printer.  Language specific initializations will
1700      override it later.  */
1701   pp_format_decoder (global_dc->printer) = &default_tree_printer;
1702   global_dc->show_option_requested = flag_diagnostics_show_option;
1703   global_dc->show_column = flag_show_column;
1704   global_dc->internal_error = plugins_internal_error_function;
1705   global_dc->option_enabled = option_enabled;
1706   global_dc->option_name = option_name;
1707
1708   /* Trap fatal signals, e.g. SIGSEGV, and convert them to ICE messages.  */
1709 #ifdef SIGSEGV
1710   signal (SIGSEGV, crash_signal);
1711 #endif
1712 #ifdef SIGILL
1713   signal (SIGILL, crash_signal);
1714 #endif
1715 #ifdef SIGBUS
1716   signal (SIGBUS, crash_signal);
1717 #endif
1718 #ifdef SIGABRT
1719   signal (SIGABRT, crash_signal);
1720 #endif
1721 #if defined SIGIOT && (!defined SIGABRT || SIGABRT != SIGIOT)
1722   signal (SIGIOT, crash_signal);
1723 #endif
1724 #ifdef SIGFPE
1725   signal (SIGFPE, crash_signal);
1726 #endif
1727
1728   /* Other host-specific signal setup.  */
1729   (*host_hooks.extra_signals)();
1730
1731   /* Initialize the garbage-collector, string pools and tree type hash
1732      table.  */
1733   init_ggc ();
1734   init_stringpool ();
1735   line_table = ggc_alloc_line_maps ();
1736   linemap_init (line_table);
1737   line_table->reallocator = realloc_for_line_map;
1738   init_ttree ();
1739
1740   /* Initialize register usage now so switches may override.  */
1741   init_reg_sets ();
1742
1743   /* Register the language-independent parameters.  */
1744   add_params (lang_independent_params, LAST_PARAM);
1745
1746   /* This must be done after add_params but before argument processing.  */
1747   init_ggc_heuristics();
1748   init_optimization_passes ();
1749   statistics_early_init ();
1750 }
1751
1752 /* Return true if the current target supports -fsection-anchors.  */
1753
1754 static bool
1755 target_supports_section_anchors_p (void)
1756 {
1757   if (targetm.min_anchor_offset == 0 && targetm.max_anchor_offset == 0)
1758     return false;
1759
1760   if (targetm.asm_out.output_anchor == NULL)
1761     return false;
1762
1763   return true;
1764 }
1765
1766 /* Default the align_* variables to 1 if they're still unset, and
1767    set up the align_*_log variables.  */
1768 static void
1769 init_alignments (void)
1770 {
1771   if (align_loops <= 0)
1772     align_loops = 1;
1773   if (align_loops_max_skip > align_loops)
1774     align_loops_max_skip = align_loops - 1;
1775   align_loops_log = floor_log2 (align_loops * 2 - 1);
1776   if (align_jumps <= 0)
1777     align_jumps = 1;
1778   if (align_jumps_max_skip > align_jumps)
1779     align_jumps_max_skip = align_jumps - 1;
1780   align_jumps_log = floor_log2 (align_jumps * 2 - 1);
1781   if (align_labels <= 0)
1782     align_labels = 1;
1783   align_labels_log = floor_log2 (align_labels * 2 - 1);
1784   if (align_labels_max_skip > align_labels)
1785     align_labels_max_skip = align_labels - 1;
1786   if (align_functions <= 0)
1787     align_functions = 1;
1788   align_functions_log = floor_log2 (align_functions * 2 - 1);
1789 }
1790
1791 /* Process the options that have been parsed.  */
1792 static void
1793 process_options (void)
1794 {
1795   /* Just in case lang_hooks.post_options ends up calling a debug_hook.
1796      This can happen with incorrect pre-processed input. */
1797   debug_hooks = &do_nothing_debug_hooks;
1798
1799   /* This replaces set_Wunused.  */
1800   if (warn_unused_function == -1)
1801     warn_unused_function = warn_unused;
1802   if (warn_unused_label == -1)
1803     warn_unused_label = warn_unused;
1804   /* Wunused-parameter is enabled if both -Wunused -Wextra are enabled.  */
1805   if (warn_unused_parameter == -1)
1806     warn_unused_parameter = (warn_unused && extra_warnings);
1807   if (warn_unused_variable == -1)
1808     warn_unused_variable = warn_unused;
1809   /* Wunused-but-set-parameter is enabled if both -Wunused -Wextra are
1810      enabled.  */
1811   if (warn_unused_but_set_parameter == -1)
1812     warn_unused_but_set_parameter = (warn_unused && extra_warnings);
1813   if (warn_unused_but_set_variable == -1)
1814     warn_unused_but_set_variable = warn_unused;
1815   if (warn_unused_value == -1)
1816     warn_unused_value = warn_unused;
1817
1818   /* This replaces set_Wextra.  */
1819   if (warn_uninitialized == -1)
1820     warn_uninitialized = extra_warnings;
1821
1822   /* Allow the front end to perform consistency checks and do further
1823      initialization based on the command line options.  This hook also
1824      sets the original filename if appropriate (e.g. foo.i -> foo.c)
1825      so we can correctly initialize debug output.  */
1826   no_backend = lang_hooks.post_options (&main_input_filename);
1827
1828   /* Some machines may reject certain combinations of options.  */
1829   targetm.target_option.override ();
1830
1831   /* Avoid any informative notes in the second run of -fcompare-debug.  */
1832   if (flag_compare_debug) 
1833     diagnostic_inhibit_notes (global_dc);
1834
1835   if (flag_section_anchors && !target_supports_section_anchors_p ())
1836     {
1837       warning (OPT_fsection_anchors,
1838                "this target does not support %qs", "-fsection-anchors");
1839       flag_section_anchors = 0;
1840     }
1841
1842   if (flag_short_enums == 2)
1843     flag_short_enums = targetm.default_short_enums ();
1844
1845   /* Set aux_base_name if not already set.  */
1846   if (aux_base_name)
1847     ;
1848   else if (main_input_filename)
1849     {
1850       char *name = xstrdup (lbasename (main_input_filename));
1851
1852       strip_off_ending (name, strlen (name));
1853       aux_base_name = name;
1854     }
1855   else
1856     aux_base_name = "gccaux";
1857
1858 #ifndef HAVE_cloog
1859   if (flag_graphite
1860       || flag_loop_block
1861       || flag_loop_interchange
1862       || flag_loop_strip_mine
1863       || flag_graphite_identity
1864       || flag_loop_parallelize_all)
1865     sorry ("Graphite loop optimizations cannot be used");
1866 #endif
1867
1868   /* Unrolling all loops implies that standard loop unrolling must also
1869      be done.  */
1870   if (flag_unroll_all_loops)
1871     flag_unroll_loops = 1;
1872
1873   /* The loop unrolling code assumes that cse will be run after loop.
1874      web and rename-registers also help when run after loop unrolling.  */
1875   if (flag_rerun_cse_after_loop == AUTODETECT_VALUE)
1876     flag_rerun_cse_after_loop = flag_unroll_loops || flag_peel_loops;
1877
1878   if (flag_web == AUTODETECT_VALUE)
1879     flag_web = flag_unroll_loops || flag_peel_loops;
1880
1881   if (flag_rename_registers == AUTODETECT_VALUE)
1882     flag_rename_registers = flag_unroll_loops || flag_peel_loops;
1883
1884   if (flag_non_call_exceptions)
1885     flag_asynchronous_unwind_tables = 1;
1886   if (flag_asynchronous_unwind_tables)
1887     flag_unwind_tables = 1;
1888
1889   if (flag_value_profile_transformations)
1890     flag_profile_values = 1;
1891
1892   /* Warn about options that are not supported on this machine.  */
1893 #ifndef INSN_SCHEDULING
1894   if (flag_schedule_insns || flag_schedule_insns_after_reload)
1895     warning (0, "instruction scheduling not supported on this target machine");
1896 #endif
1897 #ifndef DELAY_SLOTS
1898   if (flag_delayed_branch)
1899     warning (0, "this target machine does not have delayed branches");
1900 #endif
1901
1902   user_label_prefix = USER_LABEL_PREFIX;
1903   if (flag_leading_underscore != -1)
1904     {
1905       /* If the default prefix is more complicated than "" or "_",
1906          issue a warning and ignore this option.  */
1907       if (user_label_prefix[0] == 0 ||
1908           (user_label_prefix[0] == '_' && user_label_prefix[1] == 0))
1909         {
1910           user_label_prefix = flag_leading_underscore ? "_" : "";
1911         }
1912       else
1913         warning (0, "-f%sleading-underscore not supported on this target machine",
1914                  flag_leading_underscore ? "" : "no-");
1915     }
1916
1917   /* If we are in verbose mode, write out the version and maybe all the
1918      option flags in use.  */
1919   if (version_flag)
1920     {
1921       print_version (stderr, "");
1922       if (! quiet_flag)
1923         print_switch_values (print_to_stderr);
1924     }
1925
1926   if (flag_syntax_only)
1927     {
1928       write_symbols = NO_DEBUG;
1929       profile_flag = 0;
1930     }
1931
1932   if (flag_gtoggle)
1933     {
1934       if (debug_info_level == DINFO_LEVEL_NONE)
1935         {
1936           debug_info_level = DINFO_LEVEL_NORMAL;
1937
1938           if (write_symbols == NO_DEBUG)
1939             write_symbols = PREFERRED_DEBUGGING_TYPE;
1940         }
1941       else
1942         debug_info_level = DINFO_LEVEL_NONE;
1943     }
1944
1945   if (flag_dump_final_insns && !flag_syntax_only && !no_backend)
1946     {
1947       FILE *final_output = fopen (flag_dump_final_insns, "w");
1948       if (!final_output)
1949         {
1950           error ("could not open final insn dump file %qs: %m",
1951                  flag_dump_final_insns);
1952           flag_dump_final_insns = NULL;
1953         }
1954       else if (fclose (final_output))
1955         {
1956           error ("could not close zeroed insn dump file %qs: %m",
1957                  flag_dump_final_insns);
1958           flag_dump_final_insns = NULL;
1959         }
1960     }
1961
1962   /* Unless over-ridden for the target, assume that all DWARF levels
1963      may be emitted, if DWARF2_DEBUG is selected.  */
1964   if (dwarf_strict < 0)
1965     dwarf_strict = 0;
1966
1967   /* A lot of code assumes write_symbols == NO_DEBUG if the debugging
1968      level is 0.  */
1969   if (debug_info_level == DINFO_LEVEL_NONE)
1970     write_symbols = NO_DEBUG;
1971
1972   if (write_symbols == NO_DEBUG)
1973     ;
1974 #if defined(DBX_DEBUGGING_INFO)
1975   else if (write_symbols == DBX_DEBUG)
1976     debug_hooks = &dbx_debug_hooks;
1977 #endif
1978 #if defined(XCOFF_DEBUGGING_INFO)
1979   else if (write_symbols == XCOFF_DEBUG)
1980     debug_hooks = &xcoff_debug_hooks;
1981 #endif
1982 #ifdef SDB_DEBUGGING_INFO
1983   else if (write_symbols == SDB_DEBUG)
1984     debug_hooks = &sdb_debug_hooks;
1985 #endif
1986 #ifdef DWARF2_DEBUGGING_INFO
1987   else if (write_symbols == DWARF2_DEBUG)
1988     debug_hooks = &dwarf2_debug_hooks;
1989 #endif
1990 #ifdef VMS_DEBUGGING_INFO
1991   else if (write_symbols == VMS_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
1992     debug_hooks = &vmsdbg_debug_hooks;
1993 #endif
1994   else
1995     error ("target system does not support the \"%s\" debug format",
1996            debug_type_names[write_symbols]);
1997
1998   /* We know which debug output will be used so we can set flag_var_tracking
1999      and flag_var_tracking_uninit if the user has not specified them.  */
2000   if (debug_info_level < DINFO_LEVEL_NORMAL
2001       || debug_hooks->var_location == do_nothing_debug_hooks.var_location)
2002     {
2003       if (flag_var_tracking == 1
2004           || flag_var_tracking_uninit == 1)
2005         {
2006           if (debug_info_level < DINFO_LEVEL_NORMAL)
2007             warning (0, "variable tracking requested, but useless unless "
2008                      "producing debug info");
2009           else
2010             warning (0, "variable tracking requested, but not supported "
2011                      "by this debug format");
2012         }
2013       flag_var_tracking = 0;
2014       flag_var_tracking_uninit = 0;
2015     }
2016
2017   /* If the user specifically requested variable tracking with tagging
2018      uninitialized variables, we need to turn on variable tracking.
2019      (We already determined above that variable tracking is feasible.)  */
2020   if (flag_var_tracking_uninit)
2021     flag_var_tracking = 1;
2022
2023   if (flag_var_tracking == AUTODETECT_VALUE)
2024     flag_var_tracking = optimize >= 1;
2025
2026   if (flag_var_tracking_assignments == AUTODETECT_VALUE)
2027     flag_var_tracking_assignments = flag_var_tracking
2028       && !(flag_selective_scheduling || flag_selective_scheduling2);
2029
2030   if (flag_var_tracking_assignments_toggle)
2031     flag_var_tracking_assignments = !flag_var_tracking_assignments;
2032
2033   if (flag_var_tracking_assignments && !flag_var_tracking)
2034     flag_var_tracking = flag_var_tracking_assignments = -1;
2035
2036   if (flag_var_tracking_assignments
2037       && (flag_selective_scheduling || flag_selective_scheduling2))
2038     warning (0, "var-tracking-assignments changes selective scheduling");
2039
2040   if (flag_tree_cselim == AUTODETECT_VALUE)
2041 #ifdef HAVE_conditional_move
2042     flag_tree_cselim = 1;
2043 #else
2044     flag_tree_cselim = 0;
2045 #endif
2046
2047   /* If auxiliary info generation is desired, open the output file.
2048      This goes in the same directory as the source file--unlike
2049      all the other output files.  */
2050   if (flag_gen_aux_info)
2051     {
2052       aux_info_file = fopen (aux_info_file_name, "w");
2053       if (aux_info_file == 0)
2054         fatal_error ("can%'t open %s: %m", aux_info_file_name);
2055     }
2056
2057   if (! targetm.have_named_sections)
2058     {
2059       if (flag_function_sections)
2060         {
2061           warning (0, "-ffunction-sections not supported for this target");
2062           flag_function_sections = 0;
2063         }
2064       if (flag_data_sections)
2065         {
2066           warning (0, "-fdata-sections not supported for this target");
2067           flag_data_sections = 0;
2068         }
2069     }
2070
2071   if (flag_function_sections && profile_flag)
2072     {
2073       warning (0, "-ffunction-sections disabled; it makes profiling impossible");
2074       flag_function_sections = 0;
2075     }
2076
2077 #ifndef HAVE_prefetch
2078   if (flag_prefetch_loop_arrays > 0)
2079     {
2080       warning (0, "-fprefetch-loop-arrays not supported for this target");
2081       flag_prefetch_loop_arrays = 0;
2082     }
2083 #else
2084   if (flag_prefetch_loop_arrays > 0 && !HAVE_prefetch)
2085     {
2086       warning (0, "-fprefetch-loop-arrays not supported for this target (try -march switches)");
2087       flag_prefetch_loop_arrays = 0;
2088     }
2089 #endif
2090
2091   /* This combination of options isn't handled for i386 targets and doesn't
2092      make much sense anyway, so don't allow it.  */
2093   if (flag_prefetch_loop_arrays > 0 && optimize_size)
2094     {
2095       warning (0, "-fprefetch-loop-arrays is not supported with -Os");
2096       flag_prefetch_loop_arrays = 0;
2097     }
2098
2099   /* The presence of IEEE signaling NaNs, implies all math can trap.  */
2100   if (flag_signaling_nans)
2101     flag_trapping_math = 1;
2102
2103   /* We cannot reassociate if we want traps or signed zeros.  */
2104   if (flag_associative_math && (flag_trapping_math || flag_signed_zeros))
2105     {
2106       warning (0, "-fassociative-math disabled; other options take precedence");
2107       flag_associative_math = 0;
2108     }
2109
2110   /* With -fcx-limited-range, we do cheap and quick complex arithmetic.  */
2111   if (flag_cx_limited_range)
2112     flag_complex_method = 0;
2113
2114   /* With -fcx-fortran-rules, we do something in-between cheap and C99.  */
2115   if (flag_cx_fortran_rules)
2116     flag_complex_method = 1;
2117
2118   /* Targets must be able to place spill slots at lower addresses.  If the
2119      target already uses a soft frame pointer, the transition is trivial.  */
2120   if (!FRAME_GROWS_DOWNWARD && flag_stack_protect)
2121     {
2122       warning (0, "-fstack-protector not supported for this target");
2123       flag_stack_protect = 0;
2124     }
2125   if (!flag_stack_protect)
2126     warn_stack_protect = 0;
2127
2128   /* ??? Unwind info is not correct around the CFG unless either a frame
2129      pointer is present or A_O_A is set.  Fixing this requires rewriting
2130      unwind info generation to be aware of the CFG and propagating states
2131      around edges.  */
2132   if (flag_unwind_tables && !ACCUMULATE_OUTGOING_ARGS
2133       && flag_omit_frame_pointer)
2134     {
2135       warning (0, "unwind tables currently require a frame pointer "
2136                "for correctness");
2137       flag_omit_frame_pointer = 0;
2138     }
2139
2140   /* Save the current optimization options.  */
2141   optimization_default_node = build_optimization_node ();
2142   optimization_current_node = optimization_default_node;
2143 }
2144
2145 /* This function can be called multiple times to reinitialize the compiler
2146    back end when register classes or instruction sets have changed,
2147    before each function.  */
2148 static void
2149 backend_init_target (void)
2150 {
2151   /* Initialize alignment variables.  */
2152   init_alignments ();
2153
2154   /* This reinitializes hard_frame_pointer, and calls init_reg_modes_target()
2155      to initialize reg_raw_mode[].  */
2156   init_emit_regs ();
2157
2158   /* This invokes target hooks to set fixed_reg[] etc, which is
2159      mode-dependent.  */
2160   init_regs ();
2161
2162   /* This depends on stack_pointer_rtx.  */
2163   init_fake_stack_mems ();
2164
2165   /* Sets static_base_value[HARD_FRAME_POINTER_REGNUM], which is
2166      mode-dependent.  */
2167   init_alias_target ();
2168
2169   /* Depends on HARD_FRAME_POINTER_REGNUM.  */
2170   init_reload ();
2171
2172   /* The following initialization functions need to generate rtl, so
2173      provide a dummy function context for them.  */
2174   init_dummy_function_start ();
2175
2176   /* rtx_cost is mode-dependent, so cached values need to be recomputed
2177      on a mode change.  */
2178   init_expmed ();
2179
2180   /* We may need to recompute regno_save_code[] and regno_restore_code[]
2181      after a mode change as well.  */
2182   caller_save_initialized_p = false;
2183
2184   expand_dummy_function_end ();
2185 }
2186
2187 /* Initialize the compiler back end.  This function is called only once,
2188    when starting the compiler.  */
2189 static void
2190 backend_init (void)
2191 {
2192   init_emit_once ();
2193
2194   init_rtlanal ();
2195   init_inline_once ();
2196   init_varasm_once ();
2197   save_register_info ();
2198
2199   /* Initialize the target-specific back end pieces.  */
2200   ira_init_once ();
2201   backend_init_target ();
2202 }
2203
2204 /* Initialize excess precision settings.  */
2205 static void
2206 init_excess_precision (void)
2207 {
2208   /* Adjust excess precision handling based on the target options.  If
2209      the front end cannot handle it, flag_excess_precision_cmdline
2210      will already have been set accordingly in the post_options
2211      hook.  */
2212   gcc_assert (flag_excess_precision_cmdline != EXCESS_PRECISION_DEFAULT);
2213   flag_excess_precision = flag_excess_precision_cmdline;
2214   if (flag_unsafe_math_optimizations)
2215     flag_excess_precision = EXCESS_PRECISION_FAST;
2216   if (flag_excess_precision == EXCESS_PRECISION_STANDARD)
2217     {
2218       int flt_eval_method = TARGET_FLT_EVAL_METHOD;
2219       switch (flt_eval_method)
2220         {
2221         case -1:
2222         case 0:
2223           /* Either the target acts unpredictably (-1) or has all the
2224              operations required not to have excess precision (0).  */
2225           flag_excess_precision = EXCESS_PRECISION_FAST;
2226           break;
2227         case 1:
2228         case 2:
2229           /* In these cases, predictable excess precision makes
2230              sense.  */
2231           break;
2232         default:
2233           /* Any other implementation-defined FLT_EVAL_METHOD values
2234              require the compiler to handle the associated excess
2235              precision rules in excess_precision_type.  */
2236           gcc_unreachable ();
2237         }
2238     }
2239 }
2240
2241 /* Initialize things that are both lang-dependent and target-dependent.
2242    This function can be called more than once if target parameters change.  */
2243 static void
2244 lang_dependent_init_target (void)
2245 {
2246   /* This determines excess precision settings.  */
2247   init_excess_precision ();
2248
2249   /* This creates various _DECL nodes, so needs to be called after the
2250      front end is initialized.  It also depends on the HAVE_xxx macros
2251      generated from the target machine description.  */
2252   init_optabs ();
2253
2254   /* The following initialization functions need to generate rtl, so
2255      provide a dummy function context for them.  */
2256   init_dummy_function_start ();
2257
2258   /* Do the target-specific parts of expr initialization.  */
2259   init_expr_target ();
2260
2261   /* Although the actions of these functions are language-independent,
2262      they use optabs, so we cannot call them from backend_init.  */
2263   init_set_costs ();
2264   ira_init ();
2265
2266   expand_dummy_function_end ();
2267 }
2268
2269 /* Language-dependent initialization.  Returns nonzero on success.  */
2270 static int
2271 lang_dependent_init (const char *name)
2272 {
2273   location_t save_loc = input_location;
2274   if (dump_base_name == 0)
2275     dump_base_name = name && name[0] ? name : "gccdump";
2276
2277   /* Other front-end initialization.  */
2278   input_location = BUILTINS_LOCATION;
2279   if (lang_hooks.init () == 0)
2280     return 0;
2281   input_location = save_loc;
2282
2283   init_asm_output (name);
2284
2285   /* If stack usage information is desired, open the output file.  */
2286   if (flag_stack_usage)
2287     stack_usage_file = open_auxiliary_file ("su");
2288
2289   /* This creates various _DECL nodes, so needs to be called after the
2290      front end is initialized.  */
2291   init_eh ();
2292
2293   /* Do the target-specific parts of the initialization.  */
2294   lang_dependent_init_target ();
2295
2296   /* If dbx symbol table desired, initialize writing it and output the
2297      predefined types.  */
2298   timevar_push (TV_SYMOUT);
2299
2300 #if defined DWARF2_DEBUGGING_INFO || defined DWARF2_UNWIND_INFO
2301   if (dwarf2out_do_frame ())
2302     dwarf2out_frame_init ();
2303 #endif
2304
2305   /* Now we have the correct original filename, we can initialize
2306      debug output.  */
2307   (*debug_hooks->init) (name);
2308
2309   timevar_pop (TV_SYMOUT);
2310
2311   return 1;
2312 }
2313
2314
2315 /* Reinitialize everything when target parameters, such as register usage,
2316    have changed.  */
2317 void
2318 target_reinit (void)
2319 {
2320   /* Reinitialize RTL backend.  */
2321   backend_init_target ();
2322
2323   /* Reinitialize lang-dependent parts.  */
2324   lang_dependent_init_target ();
2325 }
2326
2327 void
2328 dump_memory_report (bool final)
2329 {
2330   ggc_print_statistics ();
2331   stringpool_statistics ();
2332   dump_tree_statistics ();
2333   dump_gimple_statistics ();
2334   dump_rtx_statistics ();
2335   dump_alloc_pool_statistics ();
2336   dump_bitmap_statistics ();
2337   dump_vec_loc_statistics ();
2338   dump_ggc_loc_statistics (final);
2339   dump_alias_stats (stderr);
2340   dump_pta_stats (stderr);
2341 }
2342
2343 /* Clean up: close opened files, etc.  */
2344
2345 static void
2346 finalize (void)
2347 {
2348   /* Close the dump files.  */
2349   if (flag_gen_aux_info)
2350     {
2351       fclose (aux_info_file);
2352       if (seen_error ())
2353         unlink (aux_info_file_name);
2354     }
2355
2356   /* Close non-debugging input and output files.  Take special care to note
2357      whether fclose returns an error, since the pages might still be on the
2358      buffer chain while the file is open.  */
2359
2360   if (asm_out_file)
2361     {
2362       if (ferror (asm_out_file) != 0)
2363         fatal_error ("error writing to %s: %m", asm_file_name);
2364       if (fclose (asm_out_file) != 0)
2365         fatal_error ("error closing %s: %m", asm_file_name);
2366       if (flag_wpa)
2367         unlink_if_ordinary (asm_file_name);
2368     }
2369
2370   if (stack_usage_file)
2371     fclose (stack_usage_file);
2372
2373   statistics_fini ();
2374   finish_optimization_passes ();
2375
2376   ira_finish_once ();
2377
2378   if (mem_report)
2379     dump_memory_report (true);
2380
2381   /* Language-specific end of compilation actions.  */
2382   lang_hooks.finish ();
2383 }
2384
2385 /* Initialize the compiler, and compile the input file.  */
2386 static void
2387 do_compile (void)
2388 {
2389   /* Initialize timing first.  The C front ends read the main file in
2390      the post_options hook, and C++ does file timings.  */
2391   if (time_report || !quiet_flag  || flag_detailed_statistics)
2392     timevar_init ();
2393   timevar_start (TV_TOTAL);
2394
2395   process_options ();
2396
2397   /* Don't do any more if an error has already occurred.  */
2398   if (!seen_error ())
2399     {
2400       /* This must be run always, because it is needed to compute the FP
2401          predefined macros, such as __LDBL_MAX__, for targets using non
2402          default FP formats.  */
2403       init_adjust_machine_modes ();
2404
2405       /* Set up the back-end if requested.  */
2406       if (!no_backend)
2407         backend_init ();
2408
2409       /* Language-dependent initialization.  Returns true on success.  */
2410       if (lang_dependent_init (main_input_filename))
2411         compile_file ();
2412
2413       finalize ();
2414     }
2415
2416   /* Stop timing and print the times.  */
2417   timevar_stop (TV_TOTAL);
2418   timevar_print (stderr);
2419 }
2420
2421 /* Entry point of cc1, cc1plus, jc1, f771, etc.
2422    Exit code is FATAL_EXIT_CODE if can't open files or if there were
2423    any errors, or SUCCESS_EXIT_CODE if compilation succeeded.
2424
2425    It is not safe to call this function more than once.  */
2426
2427 int
2428 toplev_main (int argc, char **argv)
2429 {
2430   expandargv (&argc, &argv);
2431
2432   /* Initialization of GCC's environment, and diagnostics.  */
2433   general_init (argv[0]);
2434
2435   /* Parse the options and do minimal processing; basically just
2436      enough to default flags appropriately.  */
2437   decode_options (argc, CONST_CAST2 (const char **, char **, argv),
2438                   &save_decoded_options, &save_decoded_options_count);
2439
2440   init_local_tick ();
2441
2442   initialize_plugins ();
2443
2444   if (version_flag)
2445     print_version (stderr, "");
2446
2447   if (help_flag)
2448     print_plugins_help (stderr, "");
2449
2450   /* Exit early if we can (e.g. -help).  */
2451   if (!exit_after_options)
2452     do_compile ();
2453
2454   if (warningcount || errorcount)
2455     print_ignored_options ();
2456   diagnostic_finish (global_dc);
2457
2458   /* Invoke registered plugin callbacks if any.  */
2459   invoke_plugin_callbacks (PLUGIN_FINISH, NULL);
2460
2461   finalize_plugins ();
2462   if (seen_error ())
2463     return (FATAL_EXIT_CODE);
2464
2465   return (SUCCESS_EXIT_CODE);
2466 }