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