OSDN Git Service

2004-09-23 Frank Ch. Eigler <fche@redhat.com>
[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 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.  */
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 #undef FLOAT /* This is for hpux. They should change hpux.  */
29 #undef FFS  /* Some systems define this in param.h.  */
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include <signal.h>
34
35 #ifdef HAVE_SYS_RESOURCE_H
36 # include <sys/resource.h>
37 #endif
38
39 #ifdef HAVE_SYS_TIMES_H
40 # include <sys/times.h>
41 #endif
42
43 #include "line-map.h"
44 #include "input.h"
45 #include "tree.h"
46 #include "version.h"
47 #include "rtl.h"
48 #include "tm_p.h"
49 #include "flags.h"
50 #include "insn-attr.h"
51 #include "insn-config.h"
52 #include "insn-flags.h"
53 #include "hard-reg-set.h"
54 #include "recog.h"
55 #include "output.h"
56 #include "except.h"
57 #include "function.h"
58 #include "toplev.h"
59 #include "expr.h"
60 #include "basic-block.h"
61 #include "intl.h"
62 #include "ggc.h"
63 #include "graph.h"
64 #include "regs.h"
65 #include "timevar.h"
66 #include "diagnostic.h"
67 #include "params.h"
68 #include "reload.h"
69 #include "dwarf2asm.h"
70 #include "integrate.h"
71 #include "real.h"
72 #include "debug.h"
73 #include "target.h"
74 #include "langhooks.h"
75 #include "cfglayout.h"
76 #include "cfgloop.h"
77 #include "hosthooks.h"
78 #include "cgraph.h"
79 #include "opts.h"
80 #include "coverage.h"
81 #include "value-prof.h"
82 #include "alloc-pool.h"
83
84 #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
85 #include "dwarf2out.h"
86 #endif
87
88 #if defined(DBX_DEBUGGING_INFO) || defined(XCOFF_DEBUGGING_INFO)
89 #include "dbxout.h"
90 #endif
91
92 #ifdef SDB_DEBUGGING_INFO
93 #include "sdbout.h"
94 #endif
95
96 #ifdef XCOFF_DEBUGGING_INFO
97 #include "xcoffout.h"           /* Needed for external data
98                                    declarations for e.g. AIX 4.x.  */
99 #endif
100
101 static void general_init (const char *);
102 static void do_compile (void);
103 static void process_options (void);
104 static void backend_init (void);
105 static int lang_dependent_init (const char *);
106 static void init_asm_output (const char *);
107 static void finalize (void);
108
109 static void crash_signal (int) ATTRIBUTE_NORETURN;
110 static void setup_core_dumping (void);
111 static void compile_file (void);
112
113 static int print_single_switch (FILE *, int, int, const char *,
114                                 const char *, const char *,
115                                 const char *, const char *);
116 static void print_switch_values (FILE *, int, int, const char *,
117                                  const char *, const char *);
118
119 /* Nonzero to dump debug info whilst parsing (-dy option).  */
120 static int set_yydebug;
121
122 /* True if we don't need a backend (e.g. preprocessing only).  */
123 static bool no_backend;
124
125 /* Length of line when printing switch values.  */
126 #define MAX_LINE 75
127
128 /* Name of program invoked, sans directories.  */
129
130 const char *progname;
131
132 /* Copy of argument vector to toplev_main.  */
133 static const char **save_argv;
134
135 /* Name of top-level original source file (what was input to cpp).
136    This comes from the #-command at the beginning of the actual input.
137    If there isn't any there, then this is the cc1 input file name.  */
138
139 const char *main_input_filename;
140
141 #ifndef USE_MAPPED_LOCATION
142 location_t unknown_location = { NULL, 0 };
143 #endif
144
145 /* Used to enable -fvar-tracking, -fweb and -frename-registers according
146    to optimize and default_debug_hooks in process_options ().  */
147 #define AUTODETECT_FLAG_VAR_TRACKING 2
148
149 /* Current position in real source file.  */
150
151 location_t input_location;
152
153 struct line_maps line_table;
154
155 /* Nonzero if it is unsafe to create any new pseudo registers.  */
156 int no_new_pseudos;
157
158 /* Stack of currently pending input files.  */
159
160 struct file_stack *input_file_stack;
161
162 /* Incremented on each change to input_file_stack.  */
163 int input_file_stack_tick;
164
165 /* Name to use as base of names for dump output files.  */
166
167 const char *dump_base_name;
168
169 /* Name to use as a base for auxiliary output files.  */
170
171 const char *aux_base_name;
172
173 /* Bit flags that specify the machine subtype we are compiling for.
174    Bits are tested using macros TARGET_... defined in the tm.h file
175    and set by `-m...' switches.  Must be defined in rtlanal.c.  */
176
177 extern int target_flags;
178
179 /* A mask of target_flags that includes bit X if X was set or cleared
180    on the command line.  */
181
182 int target_flags_explicit;
183
184 /* Debug hooks - dependent upon command line options.  */
185
186 const struct gcc_debug_hooks *debug_hooks;
187
188 /* Debug hooks - target default.  */
189
190 static const struct gcc_debug_hooks *default_debug_hooks;
191
192 /* Other flags saying which kinds of debugging dump have been requested.  */
193
194 int rtl_dump_and_exit;
195 int flag_print_asm_name;
196 enum graph_dump_types graph_dump_format;
197
198 /* Name for output file of assembly code, specified with -o.  */
199
200 const char *asm_file_name;
201
202 /* Nonzero means do optimizations.  -O.
203    Particular numeric values stand for particular amounts of optimization;
204    thus, -O2 stores 2 here.  However, the optimizations beyond the basic
205    ones are not controlled directly by this variable.  Instead, they are
206    controlled by individual `flag_...' variables that are defaulted
207    based on this variable.  */
208
209 int optimize = 0;
210
211 /* Nonzero means optimize for size.  -Os.
212    The only valid values are zero and nonzero. When optimize_size is
213    nonzero, optimize defaults to 2, but certain individual code
214    bloating optimizations are disabled.  */
215
216 int optimize_size = 0;
217
218 /* The FUNCTION_DECL for the function currently being compiled,
219    or 0 if between functions.  */
220 tree current_function_decl;
221
222 /* Set to the FUNC_BEGIN label of the current function, or NULL
223    if none.  */
224 const char * current_function_func_begin_label;
225
226 /* Temporarily suppress certain warnings.
227    This is set while reading code from a system header file.  */
228
229 int in_system_header = 0;
230
231 /* Nonzero means to collect statistics which might be expensive
232    and to print them when we are done.  */
233 int flag_detailed_statistics = 0;
234
235 /* A random sequence of characters, unless overridden by user.  */
236 const char *flag_random_seed;
237
238 /* A local time stamp derived from the time of compilation. It will be
239    zero if the system cannot provide a time.  It will be -1u, if the
240    user has specified a particular random seed.  */
241 unsigned local_tick;
242
243 /* -f flags.  */
244
245 /* Nonzero means `char' should be signed.  */
246
247 int flag_signed_char;
248
249 /* Nonzero means give an enum type only as many bytes as it needs.  A value
250    of 2 means it has not yet been initialized.  */
251
252 int flag_short_enums;
253
254 /* Nonzero if structures and unions should be returned in memory.
255
256    This should only be defined if compatibility with another compiler or
257    with an ABI is needed, because it results in slower code.  */
258
259 #ifndef DEFAULT_PCC_STRUCT_RETURN
260 #define DEFAULT_PCC_STRUCT_RETURN 1
261 #endif
262
263 /* Nonzero for -fpcc-struct-return: return values the same way PCC does.  */
264
265 int flag_pcc_struct_return = DEFAULT_PCC_STRUCT_RETURN;
266
267 /* 0 means straightforward implementation of complex divide acceptable.
268    1 means wide ranges of inputs must work for complex divide.
269    2 means C99-like requirements for complex divide (not yet implemented).  */
270
271 int flag_complex_divide_method = 0;
272
273 /* Nonzero means performs web construction pass.  When flag_web ==
274    AUTODETECT_FLAG_VAR_TRACKING it will be set according to optimize
275    and default_debug_hooks in process_options ().  */
276
277 int flag_web = AUTODETECT_FLAG_VAR_TRACKING;
278
279 /* Nonzero means that we don't want inlining by virtue of -fno-inline,
280    not just because the tree inliner turned us off.  */
281
282 int flag_really_no_inline = 2;
283
284 /* Nonzero means we should be saving declaration info into a .X file.  */
285
286 int flag_gen_aux_info = 0;
287
288 /* Specified name of aux-info file.  */
289
290 const char *aux_info_file_name;
291
292 /* Nonzero if we are compiling code for a shared library, zero for
293    executable.  */
294
295 int flag_shlib;
296
297 /* Set to the default thread-local storage (tls) model to use.  */
298
299 enum tls_model flag_tls_default = TLS_MODEL_GLOBAL_DYNAMIC;
300
301 /* Nonzero means change certain warnings into errors.
302    Usually these are warnings about failure to conform to some standard.  */
303
304 int flag_pedantic_errors = 0;
305
306 /* -dA causes debug commentary information to be produced in
307    the generated assembly code (to make it more readable).  This option
308    is generally only of use to those who actually need to read the
309    generated assembly code (perhaps while debugging the compiler itself).
310    Currently, this switch is only used by dwarfout.c; however, it is intended
311    to be a catchall for printing debug information in the assembler file.  */
312
313 int flag_debug_asm = 0;
314
315 /* -dP causes the rtl to be emitted as a comment in assembly.  */
316
317 int flag_dump_rtl_in_asm = 0;
318
319 /* When non-NULL, indicates that whenever space is allocated on the
320    stack, the resulting stack pointer must not pass this
321    address---that is, for stacks that grow downward, the stack pointer
322    must always be greater than or equal to this address; for stacks
323    that grow upward, the stack pointer must be less than this address.
324    At present, the rtx may be either a REG or a SYMBOL_REF, although
325    the support provided depends on the backend.  */
326 rtx stack_limit_rtx;
327
328 /* If one, renumber instruction UIDs to reduce the number of
329    unused UIDs if there are a lot of instructions.  If greater than
330    one, unconditionally renumber instruction UIDs.  */
331 int flag_renumber_insns = 1;
332
333 /* Nonzero if we should track variables.  When
334    flag_var_tracking == AUTODETECT_FLAG_VAR_TRACKING it will be set according
335    to optimize, debug_info_level and debug_hooks in process_options ().  */
336 int flag_var_tracking = AUTODETECT_FLAG_VAR_TRACKING;
337
338 /* True if the user has tagged the function with the 'section'
339    attribute.  */
340
341 bool user_defined_section_attribute = false;
342
343 /* Values of the -falign-* flags: how much to align labels in code.
344    0 means `use default', 1 means `don't align'.
345    For each variable, there is an _log variant which is the power
346    of two not less than the variable, for .align output.  */
347
348 int align_loops_log;
349 int align_loops_max_skip;
350 int align_jumps_log;
351 int align_jumps_max_skip;
352 int align_labels_log;
353 int align_labels_max_skip;
354 int align_functions_log;
355
356 /* Like align_functions_log above, but used by front-ends to force the
357    minimum function alignment.  Zero means no alignment is forced.  */
358 int force_align_functions_log;
359
360 typedef struct
361 {
362   const char *const string;
363   int *const variable;
364   const int on_value;
365 }
366 lang_independent_options;
367
368 /* Nonzero if subexpressions must be evaluated from left-to-right.  */
369 int flag_evaluation_order = 0;
370
371 /* The user symbol prefix after having resolved same.  */
372 const char *user_label_prefix;
373
374 static const param_info lang_independent_params[] = {
375 #define DEFPARAM(ENUM, OPTION, HELP, DEFAULT) \
376   { OPTION, DEFAULT, HELP },
377 #include "params.def"
378 #undef DEFPARAM
379   { NULL, 0, NULL }
380 };
381
382 /* Here is a table, controlled by the tm.h file, listing each -m switch
383    and which bits in `target_switches' it should set or clear.
384    If VALUE is positive, it is bits to set.
385    If VALUE is negative, -VALUE is bits to clear.
386    (The sign bit is not used so there is no confusion.)  */
387
388 static const struct
389 {
390   const char *const name;
391   const int value;
392   const char *const description;
393 }
394 target_switches[] = TARGET_SWITCHES;
395
396 /* This table is similar, but allows the switch to have a value.  */
397
398 #ifdef TARGET_OPTIONS
399 static const struct
400 {
401   const char *const prefix;
402   const char **const variable;
403   const char *const description;
404   const char *const value;
405 }
406 target_options[] = TARGET_OPTIONS;
407 #endif
408
409 /* Nonzero means warn about function definitions that default the return type
410    or that use a null return and have a return-type other than void.  */
411
412 int warn_return_type;
413
414 /* Output files for assembler code (real compiler output)
415    and debugging dumps.  */
416
417 FILE *asm_out_file;
418 FILE *aux_info_file;
419 FILE *dump_file = NULL;
420 char *dump_file_name;
421
422 /* The current working directory of a translation.  It's generally the
423    directory from which compilation was initiated, but a preprocessed
424    file may specify the original directory in which it was
425    created.  */
426
427 static const char *src_pwd;
428
429 /* Initialize src_pwd with the given string, and return true.  If it
430    was already initialized, return false.  As a special case, it may
431    be called with a NULL argument to test whether src_pwd has NOT been
432    initialized yet.  */
433
434 bool
435 set_src_pwd (const char *pwd)
436 {
437   if (src_pwd)
438     {
439       if (strcmp (src_pwd, pwd) == 0)
440         return true;
441       else
442         return false;
443     }
444
445   src_pwd = xstrdup (pwd);
446   return true;
447 }
448
449 /* Return the directory from which the translation unit was initiated,
450    in case set_src_pwd() was not called before to assign it a
451    different value.  */
452
453 const char *
454 get_src_pwd (void)
455 {
456   if (! src_pwd)
457     src_pwd = getpwd ();
458
459    return src_pwd;
460 }
461
462 /* Called when the start of a function definition is parsed,
463    this function prints on stderr the name of the function.  */
464 void
465 announce_function (tree decl)
466 {
467   if (!quiet_flag)
468     {
469       if (rtl_dump_and_exit)
470         verbatim ("%s ", IDENTIFIER_POINTER (DECL_NAME (decl)));
471       else
472         verbatim (" %s", lang_hooks.decl_printable_name (decl, 2));
473       fflush (stderr);
474       pp_needs_newline (global_dc->printer) = true;
475       diagnostic_set_last_function (global_dc);
476     }
477 }
478
479 /* Set up a default flag_random_seed and local_tick, unless the user
480    already specified one.  */
481
482 static void
483 randomize (void)
484 {
485   if (!flag_random_seed)
486     {
487       unsigned HOST_WIDE_INT value;
488       static char random_seed[HOST_BITS_PER_WIDE_INT / 4 + 3];
489
490       /* Get some more or less random data.  */
491 #ifdef HAVE_GETTIMEOFDAY
492       {
493         struct timeval tv;
494
495         gettimeofday (&tv, NULL);
496         local_tick = tv.tv_sec * 1000 + tv.tv_usec / 1000;
497       }
498 #else
499       {
500         time_t now = time (NULL);
501
502         if (now != (time_t)-1)
503           local_tick = (unsigned) now;
504       }
505 #endif
506       value = local_tick ^ getpid ();
507
508       sprintf (random_seed, HOST_WIDE_INT_PRINT_HEX, value);
509       flag_random_seed = random_seed;
510     }
511   else if (!local_tick)
512     local_tick = -1;
513 }
514
515
516 /* Decode the string P as an integral parameter.
517    If the string is indeed an integer return its numeric value else
518    issue an Invalid Option error for the option PNAME and return DEFVAL.
519    If PNAME is zero just return DEFVAL, do not call error.  */
520
521 int
522 read_integral_parameter (const char *p, const char *pname, const int  defval)
523 {
524   const char *endp = p;
525
526   while (*endp)
527     {
528       if (ISDIGIT (*endp))
529         endp++;
530       else
531         break;
532     }
533
534   if (*endp != 0)
535     {
536       if (pname != 0)
537         error ("invalid option argument %qs", pname);
538       return defval;
539     }
540
541   return atoi (p);
542 }
543
544 /* Given X, an unsigned number, return the largest int Y such that 2**Y <= X.
545    If X is 0, return -1.
546
547    This should be used via the floor_log2 macro.  */
548
549 int
550 floor_log2_wide (unsigned HOST_WIDE_INT x)
551 {
552   int t=0;
553   if (x == 0)
554     return -1;
555   if (sizeof (HOST_WIDE_INT) * 8 > 64)
556     if (x >= (unsigned HOST_WIDE_INT) 1 << (t + 64))
557       t += 64;
558   if (sizeof (HOST_WIDE_INT) * 8 > 32)
559     if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 32))
560       t += 32;
561   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 16))
562     t += 16;
563   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 8))
564     t += 8;
565   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 4))
566     t += 4;
567   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 2))
568     t += 2;
569   if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 1))
570     t += 1;
571   return t;
572 }
573
574 /* Return the logarithm of X, base 2, considering X unsigned,
575    if X is a power of 2.  Otherwise, returns -1.
576
577    This should be used via the `exact_log2' macro.  */
578
579 int
580 exact_log2_wide (unsigned HOST_WIDE_INT x)
581 {
582   /* Test for 0 or a power of 2.  */
583   if (x == 0 || x != (x & -x))
584     return -1;
585   return floor_log2_wide (x);
586 }
587
588 /* Handler for fatal signals, such as SIGSEGV.  These are transformed
589    into ICE messages, which is much more user friendly.  In case the
590    error printer crashes, reset the signal to prevent infinite recursion.  */
591
592 static void
593 crash_signal (int signo)
594 {
595   signal (signo, SIG_DFL);
596
597   /* If we crashed while processing an ASM statement, then be a little more
598      graceful.  It's most likely the user's fault.  */
599   if (this_is_asm_operands)
600     {
601       output_operand_lossage ("unrecoverable error");
602       exit (FATAL_EXIT_CODE);
603     }
604
605   internal_error ("%s", strsignal (signo));
606 }
607
608 /* Arrange to dump core on error.  (The regular error message is still
609    printed first, except in the case of abort().)  */
610
611 static void
612 setup_core_dumping (void)
613 {
614 #ifdef SIGABRT
615   signal (SIGABRT, SIG_DFL);
616 #endif
617 #if defined(HAVE_SETRLIMIT)
618   {
619     struct rlimit rlim;
620     if (getrlimit (RLIMIT_CORE, &rlim) != 0)
621       fatal_error ("getting core file size maximum limit: %m");
622     rlim.rlim_cur = rlim.rlim_max;
623     if (setrlimit (RLIMIT_CORE, &rlim) != 0)
624       fatal_error ("setting core file size limit to maximum: %m");
625   }
626 #endif
627   diagnostic_abort_on_error (global_dc);
628 }
629
630
631 /* Strip off a legitimate source ending from the input string NAME of
632    length LEN.  Rather than having to know the names used by all of
633    our front ends, we strip off an ending of a period followed by
634    up to five characters.  (Java uses ".class".)  */
635
636 void
637 strip_off_ending (char *name, int len)
638 {
639   int i;
640   for (i = 2; i < 6 && len > i; i++)
641     {
642       if (name[len - i] == '.')
643         {
644           name[len - i] = '\0';
645           break;
646         }
647     }
648 }
649
650 /* Output a quoted string.  */
651
652 void
653 output_quoted_string (FILE *asm_file, const char *string)
654 {
655 #ifdef OUTPUT_QUOTED_STRING
656   OUTPUT_QUOTED_STRING (asm_file, string);
657 #else
658   char c;
659
660   putc ('\"', asm_file);
661   while ((c = *string++) != 0)
662     {
663       if (ISPRINT (c))
664         {
665           if (c == '\"' || c == '\\')
666             putc ('\\', asm_file);
667           putc (c, asm_file);
668         }
669       else
670         fprintf (asm_file, "\\%03o", (unsigned char) c);
671     }
672   putc ('\"', asm_file);
673 #endif
674 }
675
676 /* Output a file name in the form wanted by System V.  */
677
678 void
679 output_file_directive (FILE *asm_file, const char *input_name)
680 {
681   int len;
682   const char *na;
683
684   if (input_name == NULL)
685     input_name = "<stdin>";
686
687   len = strlen (input_name);
688   na = input_name + len;
689
690   /* NA gets INPUT_NAME sans directory names.  */
691   while (na > input_name)
692     {
693       if (IS_DIR_SEPARATOR (na[-1]))
694         break;
695       na--;
696     }
697
698 #ifdef ASM_OUTPUT_SOURCE_FILENAME
699   ASM_OUTPUT_SOURCE_FILENAME (asm_file, na);
700 #else
701   fprintf (asm_file, "\t.file\t");
702   output_quoted_string (asm_file, na);
703   fputc ('\n', asm_file);
704 #endif
705 }
706
707 /* Do any final processing required for the declarations in VEC, of
708    which there are LEN.  We write out inline functions and variables
709    that have been deferred until this point, but which are required.
710    Returns nonzero if anything was put out.  */
711
712 int
713 wrapup_global_declarations (tree *vec, int len)
714 {
715   tree decl;
716   int i;
717   int reconsider;
718   int output_something = 0;
719
720   for (i = 0; i < len; i++)
721     {
722       decl = vec[i];
723
724       /* We're not deferring this any longer.  Assignment is
725          conditional to avoid needlessly dirtying PCH pages.  */
726       if (DECL_DEFER_OUTPUT (decl) != 0)
727         DECL_DEFER_OUTPUT (decl) = 0;
728
729       if (TREE_CODE (decl) == VAR_DECL && DECL_SIZE (decl) == 0)
730         lang_hooks.finish_incomplete_decl (decl);
731     }
732
733   /* Now emit any global variables or functions that we have been
734      putting off.  We need to loop in case one of the things emitted
735      here references another one which comes earlier in the list.  */
736   do
737     {
738       reconsider = 0;
739       for (i = 0; i < len; i++)
740         {
741           decl = vec[i];
742
743           if (TREE_ASM_WRITTEN (decl) || DECL_EXTERNAL (decl))
744             continue;
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 cgraph_varpool_node *node;
774               bool needed = 1;
775               node = cgraph_varpool_node (decl);
776
777               if (flag_unit_at_a_time && node->finalized)
778                 needed = 0;
779               else if ((flag_unit_at_a_time && !cgraph_global_info_ready)
780                        && (TREE_USED (decl)
781                            || TREE_USED (DECL_ASSEMBLER_NAME (decl))))
782                 /* needed */;
783               else if (node->needed)
784                 /* needed */;
785               else if (DECL_COMDAT (decl))
786                 needed = 0;
787               else if (TREE_READONLY (decl) && !TREE_PUBLIC (decl)
788                        && (optimize || !flag_keep_static_consts
789                            || DECL_ARTIFICIAL (decl)))
790                 needed = 0;
791
792               if (needed)
793                 {
794                   reconsider = 1;
795                   rest_of_decl_compilation (decl, 1, 1);
796                 }
797             }
798         }
799
800       if (reconsider)
801         output_something = 1;
802     }
803   while (reconsider);
804
805   return output_something;
806 }
807
808 /* Issue appropriate warnings for the global declarations in VEC (of
809    which there are LEN).  Output debugging information for them.  */
810
811 void
812 check_global_declarations (tree *vec, int len)
813 {
814   tree decl;
815   int i;
816
817   for (i = 0; i < len; i++)
818     {
819       decl = vec[i];
820
821       if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)
822           && ! TREE_ASM_WRITTEN (decl))
823         /* Cancel the RTL for this decl so that, if debugging info
824            output for global variables is still to come,
825            this one will be omitted.  */
826         SET_DECL_RTL (decl, NULL_RTX);
827
828       /* Warn about any function
829          declared static but not defined.
830          We don't warn about variables,
831          because many programs have static variables
832          that exist only to get some text into the object file.  */
833       if (TREE_CODE (decl) == FUNCTION_DECL
834           && DECL_INITIAL (decl) == 0
835           && DECL_EXTERNAL (decl)
836           && ! DECL_ARTIFICIAL (decl)
837           && ! TREE_NO_WARNING (decl)
838           && ! TREE_PUBLIC (decl)
839           && (warn_unused_function
840               || TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
841         {
842           if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
843             pedwarn ("%J%qF used but never defined", decl, decl);
844           else
845             warning ("%J%qF declared %<static%> but never defined",
846                      decl, decl);
847           /* This symbol is effectively an "extern" declaration now.  */
848           TREE_PUBLIC (decl) = 1;
849           assemble_external (decl);
850         }
851
852       /* Warn about static fns or vars defined but not used.  */
853       if (((warn_unused_function && TREE_CODE (decl) == FUNCTION_DECL)
854            /* We don't warn about "static const" variables because the
855               "rcs_id" idiom uses that construction.  */
856            || (warn_unused_variable
857                && TREE_CODE (decl) == VAR_DECL && ! TREE_READONLY (decl)))
858           && ! DECL_IN_SYSTEM_HEADER (decl)
859           && ! TREE_USED (decl)
860           /* The TREE_USED bit for file-scope decls is kept in the identifier,
861              to handle multiple external decls in different scopes.  */
862           && ! TREE_USED (DECL_NAME (decl))
863           && ! DECL_EXTERNAL (decl)
864           && ! TREE_PUBLIC (decl)
865           /* A volatile variable might be used in some non-obvious way.  */
866           && ! TREE_THIS_VOLATILE (decl)
867           /* Global register variables must be declared to reserve them.  */
868           && ! (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
869           /* Otherwise, ask the language.  */
870           && lang_hooks.decls.warn_unused_global (decl))
871         warning ("%J%qD defined but not used", decl, decl);
872
873       /* Avoid confusing the debug information machinery when there are
874          errors.  */
875       if (errorcount == 0 && sorrycount == 0)
876         {
877           timevar_push (TV_SYMOUT);
878           (*debug_hooks->global_decl) (decl);
879           timevar_pop (TV_SYMOUT);
880         }
881     }
882 }
883
884 /* Warn about a use of an identifier which was marked deprecated.  */
885 void
886 warn_deprecated_use (tree node)
887 {
888   if (node == 0 || !warn_deprecated_decl)
889     return;
890
891   if (DECL_P (node))
892     {
893       expanded_location xloc = expand_location (DECL_SOURCE_LOCATION (node));
894       warning ("%qs is deprecated (declared at %s:%d)",
895                IDENTIFIER_POINTER (DECL_NAME (node)),
896                xloc.file, xloc.line);
897     }
898   else if (TYPE_P (node))
899     {
900       const char *what = NULL;
901       tree decl = TYPE_STUB_DECL (node);
902
903       if (TYPE_NAME (node))
904         {
905           if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
906             what = IDENTIFIER_POINTER (TYPE_NAME (node));
907           else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
908                    && DECL_NAME (TYPE_NAME (node)))
909             what = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (node)));
910         }
911
912       if (decl)
913         {
914           expanded_location xloc
915             = expand_location (DECL_SOURCE_LOCATION (decl));
916           if (what)
917             warning ("%qs is deprecated (declared at %s:%d)", what,
918                        xloc.file, xloc.line);
919           else
920             warning ("type is deprecated (declared at %s:%d)",
921                      xloc.file, xloc.line);
922         }
923       else
924         {
925           if (what)
926             warning ("%qs is deprecated", what);
927           else
928             warning ("type is deprecated");
929         }
930     }
931 }
932
933 /* Save the current INPUT_LOCATION on the top entry in the
934    INPUT_FILE_STACK.  Push a new entry for FILE and LINE, and set the
935    INPUT_LOCATION accordingly.  */
936
937 void
938 #ifdef USE_MAPPED_LOCATION
939 push_srcloc (location_t fline)
940 #else
941 push_srcloc (const char *file, int line)
942 #endif
943 {
944   struct file_stack *fs;
945
946   fs = xmalloc (sizeof (struct file_stack));
947   fs->location = input_location;
948   fs->next = input_file_stack;
949 #ifdef USE_MAPPED_LOCATION
950   input_location = fline;
951 #else
952   input_filename = file;
953   input_line = line;
954 #endif
955   input_file_stack = fs;
956   input_file_stack_tick++;
957 }
958
959 /* Pop the top entry off the stack of presently open source files.
960    Restore the INPUT_LOCATION from the new topmost entry on the
961    stack.  */
962
963 void
964 pop_srcloc (void)
965 {
966   struct file_stack *fs;
967
968   fs = input_file_stack;
969   input_location = fs->location;
970   input_file_stack = fs->next;
971   free (fs);
972   input_file_stack_tick++;
973 }
974
975 /* Compile an entire translation unit.  Write a file of assembly
976    output and various debugging dumps.  */
977
978 static void
979 compile_file (void)
980 {
981   /* Initialize yet another pass.  */
982
983   init_cgraph ();
984   init_final (main_input_filename);
985   coverage_init (aux_base_name);
986
987   timevar_push (TV_PARSE);
988
989   /* Call the parser, which parses the entire file (calling
990      rest_of_compilation for each function).  */
991   lang_hooks.parse_file (set_yydebug);
992
993   /* In case there were missing block closers,
994      get us back to the global binding level.  */
995   lang_hooks.clear_binding_stack ();
996
997   /* Compilation is now finished except for writing
998      what's left of the symbol table output.  */
999   timevar_pop (TV_PARSE);
1000
1001   if (flag_syntax_only)
1002     return;
1003
1004   lang_hooks.decls.final_write_globals ();
1005
1006   cgraph_varpool_assemble_pending_decls ();
1007
1008   /* This must occur after the loop to output deferred functions.
1009      Else the coverage initializer would not be emitted if all the
1010      functions in this compilation unit were deferred.  */
1011   coverage_finish ();
1012
1013   /* Write out any pending weak symbol declarations.  */
1014
1015   weak_finish ();
1016
1017   /* Do dbx symbols.  */
1018   timevar_push (TV_SYMOUT);
1019
1020 #ifdef DWARF2_UNWIND_INFO
1021   if (dwarf2out_do_frame ())
1022     dwarf2out_frame_finish ();
1023 #endif
1024
1025   (*debug_hooks->finish) (main_input_filename);
1026   timevar_pop (TV_SYMOUT);
1027
1028   /* Output some stuff at end of file if nec.  */
1029
1030   dw2_output_indirect_constants ();
1031
1032   /* Attach a special .ident directive to the end of the file to identify
1033      the version of GCC which compiled this code.  The format of the .ident
1034      string is patterned after the ones produced by native SVR4 compilers.  */
1035 #ifdef IDENT_ASM_OP
1036   if (!flag_no_ident)
1037     fprintf (asm_out_file, "%s\"GCC: (GNU) %s\"\n",
1038              IDENT_ASM_OP, version_string);
1039 #endif
1040
1041   /* This must be at the end.  Some target ports emit end of file directives
1042      into the assembly file here, and hence we can not output anything to the
1043      assembly file after this point.  */
1044   targetm.asm_out.file_end ();
1045 }
1046
1047 /* Display help for target options.  */
1048 void
1049 display_target_options (void)
1050 {
1051   int undoc, i;
1052   static bool displayed = false;
1053
1054   /* Avoid double printing for --help --target-help.  */
1055   if (displayed)
1056     return;
1057
1058   displayed = true;
1059
1060   if (ARRAY_SIZE (target_switches) > 1
1061 #ifdef TARGET_OPTIONS
1062       || ARRAY_SIZE (target_options) > 1
1063 #endif
1064       )
1065     {
1066       int doc = 0;
1067
1068       undoc = 0;
1069
1070       printf (_("\nTarget specific options:\n"));
1071
1072       for (i = ARRAY_SIZE (target_switches); i--;)
1073         {
1074           const char *option      = target_switches[i].name;
1075           const char *description = target_switches[i].description;
1076
1077           if (option == NULL || *option == 0)
1078             continue;
1079           else if (description == NULL)
1080             {
1081               undoc = 1;
1082
1083               if (extra_warnings)
1084                 printf (_("  -m%-23s [undocumented]\n"), option);
1085             }
1086           else if (*description != 0)
1087             doc += printf ("  -m%-23s %s\n", option, _(description));
1088         }
1089
1090 #ifdef TARGET_OPTIONS
1091       for (i = ARRAY_SIZE (target_options); i--;)
1092         {
1093           const char *option      = target_options[i].prefix;
1094           const char *description = target_options[i].description;
1095
1096           if (option == NULL || *option == 0)
1097             continue;
1098           else if (description == NULL)
1099             {
1100               undoc = 1;
1101
1102               if (extra_warnings)
1103                 printf (_("  -m%-23s [undocumented]\n"), option);
1104             }
1105           else if (*description != 0)
1106             doc += printf ("  -m%-23s %s\n", option, _(description));
1107         }
1108 #endif
1109       if (undoc)
1110         {
1111           if (doc)
1112             printf (_("\nThere are undocumented target specific options as well.\n"));
1113           else
1114             printf (_("  They exist, but they are not documented.\n"));
1115         }
1116     }
1117 }
1118
1119 /* Parse a -d... command line switch.  */
1120
1121 void
1122 decode_d_option (const char *arg)
1123 {
1124   int c;
1125
1126   while (*arg)
1127     switch (c = *arg++)
1128       {
1129       case 'A':
1130         flag_debug_asm = 1;
1131         break;
1132       case 'p':
1133         flag_print_asm_name = 1;
1134         break;
1135       case 'P':
1136         flag_dump_rtl_in_asm = 1;
1137         flag_print_asm_name = 1;
1138         break;
1139       case 'v':
1140         graph_dump_format = vcg;
1141         break;
1142       case 'x':
1143         rtl_dump_and_exit = 1;
1144         break;
1145       case 'y':
1146         set_yydebug = 1;
1147         break;
1148       case 'D': /* These are handled by the preprocessor.  */
1149       case 'I':
1150         break;
1151       case 'H':
1152         setup_core_dumping();
1153         break;
1154
1155       case 'a':
1156       default:
1157         if (!enable_rtl_dump_file (c))
1158           warning ("unrecognized gcc debugging option: %c", c);
1159         break;
1160       }
1161 }
1162
1163 /* Indexed by enum debug_info_type.  */
1164 const char *const debug_type_names[] =
1165 {
1166   "none", "stabs", "coff", "dwarf-1", "dwarf-2", "xcoff", "vms"
1167 };
1168
1169 /* Decode -m switches.  */
1170 /* Decode the switch -mNAME.  */
1171
1172 void
1173 set_target_switch (const char *name)
1174 {
1175   size_t j;
1176   int valid_target_option = 0;
1177
1178   for (j = 0; j < ARRAY_SIZE (target_switches); j++)
1179     if (!strcmp (target_switches[j].name, name))
1180       {
1181         if (target_switches[j].value < 0)
1182           target_flags &= ~-target_switches[j].value;
1183         else
1184           target_flags |= target_switches[j].value;
1185         if (name[0] != 0)
1186           {
1187             if (target_switches[j].value < 0)
1188               target_flags_explicit |= -target_switches[j].value;
1189             else
1190               target_flags_explicit |= target_switches[j].value;
1191           }
1192         valid_target_option = 1;
1193       }
1194
1195 #ifdef TARGET_OPTIONS
1196   if (!valid_target_option)
1197     for (j = 0; j < ARRAY_SIZE (target_options); j++)
1198       {
1199         int len = strlen (target_options[j].prefix);
1200         if (target_options[j].value)
1201           {
1202             if (!strcmp (target_options[j].prefix, name))
1203               {
1204                 *target_options[j].variable = target_options[j].value;
1205                 valid_target_option = 1;
1206               }
1207           }
1208         else
1209           {
1210             if (!strncmp (target_options[j].prefix, name, len))
1211               {
1212                 *target_options[j].variable = name + len;
1213                 valid_target_option = 1;
1214               }
1215           }
1216       }
1217 #endif
1218
1219   if (!valid_target_option)
1220     error ("invalid option %qs", name);
1221 }
1222
1223 /* Print version information to FILE.
1224    Each line begins with INDENT (for the case where FILE is the
1225    assembler output file).  */
1226
1227 void
1228 print_version (FILE *file, const char *indent)
1229 {
1230 #ifndef __VERSION__
1231 #define __VERSION__ "[?]"
1232 #endif
1233   fnotice (file,
1234 #ifdef __GNUC__
1235            "%s%s%s version %s (%s)\n%s\tcompiled by GNU C version %s.\n"
1236 #else
1237            "%s%s%s version %s (%s) compiled by CC.\n"
1238 #endif
1239            , indent, *indent != 0 ? " " : "",
1240            lang_hooks.name, version_string, TARGET_NAME,
1241            indent, __VERSION__);
1242   fnotice (file, "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n",
1243            indent, *indent != 0 ? " " : "",
1244            PARAM_VALUE (GGC_MIN_EXPAND), PARAM_VALUE (GGC_MIN_HEAPSIZE));
1245 }
1246
1247 /* Print an option value and return the adjusted position in the line.
1248    ??? We don't handle error returns from fprintf (disk full); presumably
1249    other code will catch a disk full though.  */
1250
1251 static int
1252 print_single_switch (FILE *file, int pos, int max,
1253                      const char *indent, const char *sep, const char *term,
1254                      const char *type, const char *name)
1255 {
1256   /* The ultrix fprintf returns 0 on success, so compute the result we want
1257      here since we need it for the following test.  */
1258   int len = strlen (sep) + strlen (type) + strlen (name);
1259
1260   if (pos != 0
1261       && pos + len > max)
1262     {
1263       fprintf (file, "%s", term);
1264       pos = 0;
1265     }
1266   if (pos == 0)
1267     {
1268       fprintf (file, "%s", indent);
1269       pos = strlen (indent);
1270     }
1271   fprintf (file, "%s%s%s", sep, type, name);
1272   pos += len;
1273   return pos;
1274 }
1275
1276 /* Print active target switches to FILE.
1277    POS is the current cursor position and MAX is the size of a "line".
1278    Each line begins with INDENT and ends with TERM.
1279    Each switch is separated from the next by SEP.  */
1280
1281 static void
1282 print_switch_values (FILE *file, int pos, int max,
1283                      const char *indent, const char *sep, const char *term)
1284 {
1285   size_t j;
1286   const char **p;
1287
1288   /* Fill in the -frandom-seed option, if the user didn't pass it, so
1289      that it can be printed below.  This helps reproducibility.  */
1290   randomize ();
1291
1292   /* Print the options as passed.  */
1293   pos = print_single_switch (file, pos, max, indent, *indent ? " " : "", term,
1294                              _("options passed: "), "");
1295
1296   for (p = &save_argv[1]; *p != NULL; p++)
1297     if (**p == '-')
1298       {
1299         /* Ignore these.  */
1300         if (strcmp (*p, "-o") == 0)
1301           {
1302             if (p[1] != NULL)
1303               p++;
1304             continue;
1305           }
1306         if (strcmp (*p, "-quiet") == 0)
1307           continue;
1308         if (strcmp (*p, "-version") == 0)
1309           continue;
1310         if ((*p)[1] == 'd')
1311           continue;
1312
1313         pos = print_single_switch (file, pos, max, indent, sep, term, *p, "");
1314       }
1315   if (pos > 0)
1316     fprintf (file, "%s", term);
1317
1318   /* Print the -f and -m options that have been enabled.
1319      We don't handle language specific options but printing argv
1320      should suffice.  */
1321
1322   pos = print_single_switch (file, 0, max, indent, *indent ? " " : "", term,
1323                              _("options enabled: "), "");
1324
1325   for (j = 0; j < cl_options_count; j++)
1326     {
1327       if (!cl_options[j].flag_var
1328           || !(cl_options[j].flags & CL_REPORT))
1329         continue;
1330
1331       if (cl_options[j].has_set_value)
1332         {
1333           if (*cl_options[j].flag_var != cl_options[j].set_value)
1334             continue;
1335         }
1336       else
1337         {
1338           if (!*cl_options[j].flag_var)
1339             continue;
1340         }
1341       
1342       pos = print_single_switch (file, pos, max, indent, sep, term,
1343                                  "", cl_options[j].opt_text);
1344     }
1345
1346   /* Print target specific options.  */
1347
1348   for (j = 0; j < ARRAY_SIZE (target_switches); j++)
1349     if (target_switches[j].name[0] != '\0'
1350         && target_switches[j].value > 0
1351         && ((target_switches[j].value & target_flags)
1352             == target_switches[j].value))
1353       {
1354         pos = print_single_switch (file, pos, max, indent, sep, term,
1355                                    "-m", target_switches[j].name);
1356       }
1357
1358 #ifdef TARGET_OPTIONS
1359   for (j = 0; j < ARRAY_SIZE (target_options); j++)
1360     if (*target_options[j].variable != NULL)
1361       {
1362         char prefix[256];
1363         sprintf (prefix, "-m%s", target_options[j].prefix);
1364         pos = print_single_switch (file, pos, max, indent, sep, term,
1365                                    prefix, *target_options[j].variable);
1366       }
1367 #endif
1368
1369   fprintf (file, "%s", term);
1370 }
1371
1372 /* Open assembly code output file.  Do this even if -fsyntax-only is
1373    on, because then the driver will have provided the name of a
1374    temporary file or bit bucket for us.  NAME is the file specified on
1375    the command line, possibly NULL.  */
1376 static void
1377 init_asm_output (const char *name)
1378 {
1379   if (name == NULL && asm_file_name == 0)
1380     asm_out_file = stdout;
1381   else
1382     {
1383       if (asm_file_name == 0)
1384         {
1385           int len = strlen (dump_base_name);
1386           char *dumpname = xmalloc (len + 6);
1387           memcpy (dumpname, dump_base_name, len + 1);
1388           strip_off_ending (dumpname, len);
1389           strcat (dumpname, ".s");
1390           asm_file_name = dumpname;
1391         }
1392       if (!strcmp (asm_file_name, "-"))
1393         asm_out_file = stdout;
1394       else
1395         asm_out_file = fopen (asm_file_name, "w+b");
1396       if (asm_out_file == 0)
1397         fatal_error ("can%'t open %s for writing: %m", asm_file_name);
1398     }
1399
1400 #ifdef IO_BUFFER_SIZE
1401   setvbuf (asm_out_file, xmalloc (IO_BUFFER_SIZE),
1402            _IOFBF, IO_BUFFER_SIZE);
1403 #endif
1404
1405   if (!flag_syntax_only)
1406     {
1407       targetm.asm_out.file_start ();
1408
1409 #ifdef ASM_COMMENT_START
1410       if (flag_verbose_asm)
1411         {
1412           /* Print the list of options in effect.  */
1413           print_version (asm_out_file, ASM_COMMENT_START);
1414           print_switch_values (asm_out_file, 0, MAX_LINE,
1415                                ASM_COMMENT_START, " ", "\n");
1416           /* Add a blank line here so it appears in assembler output but not
1417              screen output.  */
1418           fprintf (asm_out_file, "\n");
1419         }
1420 #endif
1421     }
1422 }
1423
1424 /* Default version of get_pch_validity.
1425    By default, every flag difference is fatal; that will be mostly right for
1426    most targets, but completely right for very few.  */
1427
1428 void *
1429 default_get_pch_validity (size_t *len)
1430 {
1431 #ifdef TARGET_OPTIONS
1432   size_t i;
1433 #endif
1434   char *result, *r;
1435
1436   *len = sizeof (target_flags) + 2;
1437 #ifdef TARGET_OPTIONS
1438   for (i = 0; i < ARRAY_SIZE (target_options); i++)
1439     {
1440       *len += 1;
1441       if (*target_options[i].variable)
1442         *len += strlen (*target_options[i].variable);
1443     }
1444 #endif
1445
1446   result = r = xmalloc (*len);
1447   r[0] = flag_pic;
1448   r[1] = flag_pie;
1449   r += 2;
1450   memcpy (r, &target_flags, sizeof (target_flags));
1451   r += sizeof (target_flags);
1452
1453 #ifdef TARGET_OPTIONS
1454   for (i = 0; i < ARRAY_SIZE (target_options); i++)
1455     {
1456       const char *str = *target_options[i].variable;
1457       size_t l;
1458       if (! str)
1459         str = "";
1460       l = strlen (str) + 1;
1461       memcpy (r, str, l);
1462       r += l;
1463     }
1464 #endif
1465
1466   return result;
1467 }
1468
1469 /* Default version of pch_valid_p.  */
1470
1471 const char *
1472 default_pch_valid_p (const void *data_p, size_t len)
1473 {
1474   const char *data = (const char *)data_p;
1475   const char *flag_that_differs = NULL;
1476   size_t i;
1477
1478   /* -fpic and -fpie also usually make a PCH invalid.  */
1479   if (data[0] != flag_pic)
1480     return _("created and used with different settings of -fpic");
1481   if (data[1] != flag_pie)
1482     return _("created and used with different settings of -fpie");
1483   data += 2;
1484
1485   /* Check target_flags.  */
1486   if (memcmp (data, &target_flags, sizeof (target_flags)) != 0)
1487     {
1488       for (i = 0; i < ARRAY_SIZE (target_switches); i++)
1489         {
1490           int bits;
1491           int tf;
1492
1493           memcpy (&tf, data, sizeof (target_flags));
1494
1495           bits = target_switches[i].value;
1496           if (bits < 0)
1497             bits = -bits;
1498           if ((target_flags & bits) != (tf & bits))
1499             {
1500               flag_that_differs = target_switches[i].name;
1501               goto make_message;
1502             }
1503         }
1504       gcc_unreachable ();
1505     }
1506   data += sizeof (target_flags);
1507   len -= sizeof (target_flags);
1508
1509   /* Check string options.  */
1510 #ifdef TARGET_OPTIONS
1511   for (i = 0; i < ARRAY_SIZE (target_options); i++)
1512     {
1513       const char *str = *target_options[i].variable;
1514       size_t l;
1515       if (! str)
1516         str = "";
1517       l = strlen (str) + 1;
1518       if (len < l || memcmp (data, str, l) != 0)
1519         {
1520           flag_that_differs = target_options[i].prefix;
1521           goto make_message;
1522         }
1523       data += l;
1524       len -= l;
1525     }
1526 #endif
1527
1528   return NULL;
1529
1530  make_message:
1531   {
1532     char *r;
1533     asprintf (&r, _("created and used with differing settings of '-m%s'"),
1534                   flag_that_differs);
1535     if (r == NULL)
1536       return _("out of memory");
1537     return r;
1538   }
1539 }
1540
1541 /* Default tree printer.   Handles declarations only.  */
1542 static bool
1543 default_tree_printer (pretty_printer * pp, text_info *text)
1544 {
1545   switch (*text->format_spec)
1546     {
1547     case 'D':
1548     case 'F':
1549     case 'T':
1550       {
1551         tree t = va_arg (*text->args_ptr, tree);
1552         const char *n = DECL_NAME (t)
1553           ? lang_hooks.decl_printable_name (t, 2)
1554           : "<anonymous>";
1555         pp_string (pp, n);
1556       }
1557       return true;
1558
1559     default:
1560       return false;
1561     }
1562 }
1563
1564 /* Initialization of the front end environment, before command line
1565    options are parsed.  Signal handlers, internationalization etc.
1566    ARGV0 is main's argv[0].  */
1567 static void
1568 general_init (const char *argv0)
1569 {
1570   const char *p;
1571
1572   p = argv0 + strlen (argv0);
1573   while (p != argv0 && !IS_DIR_SEPARATOR (p[-1]))
1574     --p;
1575   progname = p;
1576
1577   xmalloc_set_program_name (progname);
1578
1579   hex_init ();
1580
1581   gcc_init_libintl ();
1582
1583   /* Initialize the diagnostics reporting machinery, so option parsing
1584      can give warnings and errors.  */
1585   diagnostic_initialize (global_dc);
1586   /* Set a default printer.  Language specific initializations will
1587      override it later.  */
1588   pp_format_decoder (global_dc->printer) = &default_tree_printer;
1589
1590   /* Trap fatal signals, e.g. SIGSEGV, and convert them to ICE messages.  */
1591 #ifdef SIGSEGV
1592   signal (SIGSEGV, crash_signal);
1593 #endif
1594 #ifdef SIGILL
1595   signal (SIGILL, crash_signal);
1596 #endif
1597 #ifdef SIGBUS
1598   signal (SIGBUS, crash_signal);
1599 #endif
1600 #ifdef SIGABRT
1601   signal (SIGABRT, crash_signal);
1602 #endif
1603 #if defined SIGIOT && (!defined SIGABRT || SIGABRT != SIGIOT)
1604   signal (SIGIOT, crash_signal);
1605 #endif
1606 #ifdef SIGFPE
1607   signal (SIGFPE, crash_signal);
1608 #endif
1609
1610   /* Other host-specific signal setup.  */
1611   (*host_hooks.extra_signals)();
1612
1613   /* Initialize the garbage-collector, string pools and tree type hash
1614      table.  */
1615   init_ggc ();
1616   init_stringpool ();
1617   linemap_init (&line_table);
1618   init_ttree ();
1619
1620   /* Initialize register usage now so switches may override.  */
1621   init_reg_sets ();
1622
1623   /* Register the language-independent parameters.  */
1624   add_params (lang_independent_params, LAST_PARAM);
1625
1626   /* This must be done after add_params but before argument processing.  */
1627   init_ggc_heuristics();
1628   init_tree_optimization_passes ();
1629 }
1630
1631 /* Process the options that have been parsed.  */
1632 static void
1633 process_options (void)
1634 {
1635   /* Allow the front end to perform consistency checks and do further
1636      initialization based on the command line options.  This hook also
1637      sets the original filename if appropriate (e.g. foo.i -> foo.c)
1638      so we can correctly initialize debug output.  */
1639   no_backend = lang_hooks.post_options (&main_input_filename);
1640 #ifndef USE_MAPPED_LOCATION
1641   input_filename = main_input_filename;
1642 #endif
1643
1644 #ifdef OVERRIDE_OPTIONS
1645   /* Some machines may reject certain combinations of options.  */
1646   OVERRIDE_OPTIONS;
1647 #endif
1648
1649   if (flag_short_enums == 2)
1650     flag_short_enums = targetm.default_short_enums ();
1651
1652   /* Set aux_base_name if not already set.  */
1653   if (aux_base_name)
1654     ;
1655   else if (main_input_filename)
1656     {
1657       char *name = xstrdup (lbasename (main_input_filename));
1658
1659       strip_off_ending (name, strlen (name));
1660       aux_base_name = name;
1661     }
1662   else
1663     aux_base_name = "gccaux";
1664
1665   /* Set up the align_*_log variables, defaulting them to 1 if they
1666      were still unset.  */
1667   if (align_loops <= 0) align_loops = 1;
1668   if (align_loops_max_skip > align_loops || !align_loops)
1669     align_loops_max_skip = align_loops - 1;
1670   align_loops_log = floor_log2 (align_loops * 2 - 1);
1671   if (align_jumps <= 0) align_jumps = 1;
1672   if (align_jumps_max_skip > align_jumps || !align_jumps)
1673     align_jumps_max_skip = align_jumps - 1;
1674   align_jumps_log = floor_log2 (align_jumps * 2 - 1);
1675   if (align_labels <= 0) align_labels = 1;
1676   align_labels_log = floor_log2 (align_labels * 2 - 1);
1677   if (align_labels_max_skip > align_labels || !align_labels)
1678     align_labels_max_skip = align_labels - 1;
1679   if (align_functions <= 0) align_functions = 1;
1680   align_functions_log = floor_log2 (align_functions * 2 - 1);
1681
1682   /* Unrolling all loops implies that standard loop unrolling must also
1683      be done.  */
1684   if (flag_unroll_all_loops)
1685     flag_unroll_loops = 1;
1686
1687   /* The loop unrolling code assumes that cse will be run after loop.  */
1688   if (flag_unroll_loops || flag_peel_loops)
1689     flag_rerun_cse_after_loop = 1;
1690
1691   /* If explicitly asked to run new loop optimizer, switch off the old
1692      one.  */
1693   if (flag_loop_optimize2)
1694     flag_loop_optimize = 0;
1695
1696   /* Enable new loop optimizer pass if any of its optimizations is called.  */
1697   if (flag_move_loop_invariants
1698       || flag_unswitch_loops
1699       || flag_peel_loops
1700       || flag_unroll_loops
1701       || flag_branch_on_count_reg)
1702     flag_loop_optimize2 = 1;
1703
1704   if (flag_non_call_exceptions)
1705     flag_asynchronous_unwind_tables = 1;
1706   if (flag_asynchronous_unwind_tables)
1707     flag_unwind_tables = 1;
1708
1709   /* Disable unit-at-a-time mode for frontends not supporting callgraph
1710      interface.  */
1711   if (flag_unit_at_a_time && ! lang_hooks.callgraph.expand_function)
1712     flag_unit_at_a_time = 0;
1713
1714   if (flag_value_profile_transformations)
1715     flag_profile_values = 1;
1716
1717   /* Speculative prefetching implies the value profiling.  We also switch off
1718      the prefetching in the loop optimizer, so that we do not emit double
1719      prefetches.  TODO -- we should teach these two to cooperate; the loop
1720      based prefetching may sometimes do a better job, especially in connection
1721      with reuse analysis.  */
1722   if (flag_speculative_prefetching)
1723     {
1724       flag_profile_values = 1;
1725       flag_prefetch_loop_arrays = 0;
1726     }
1727
1728   /* Warn about options that are not supported on this machine.  */
1729 #ifndef INSN_SCHEDULING
1730   if (flag_schedule_insns || flag_schedule_insns_after_reload)
1731     warning ("instruction scheduling not supported on this target machine");
1732 #endif
1733 #ifndef DELAY_SLOTS
1734   if (flag_delayed_branch)
1735     warning ("this target machine does not have delayed branches");
1736 #endif
1737
1738   if (flag_tree_based_profiling && flag_profile_values)
1739     sorry ("value-based profiling not yet implemented in trees.");
1740
1741   user_label_prefix = USER_LABEL_PREFIX;
1742   if (flag_leading_underscore != -1)
1743     {
1744       /* If the default prefix is more complicated than "" or "_",
1745          issue a warning and ignore this option.  */
1746       if (user_label_prefix[0] == 0 ||
1747           (user_label_prefix[0] == '_' && user_label_prefix[1] == 0))
1748         {
1749           user_label_prefix = flag_leading_underscore ? "_" : "";
1750         }
1751       else
1752         warning ("-f%sleading-underscore not supported on this target machine",
1753                  flag_leading_underscore ? "" : "no-");
1754     }
1755
1756   /* If we are in verbose mode, write out the version and maybe all the
1757      option flags in use.  */
1758   if (version_flag)
1759     {
1760       print_version (stderr, "");
1761       if (! quiet_flag)
1762         print_switch_values (stderr, 0, MAX_LINE, "", " ", "\n");
1763     }
1764
1765   if (flag_syntax_only)
1766     {
1767       write_symbols = NO_DEBUG;
1768       profile_flag = 0;
1769     }
1770
1771   /* A lot of code assumes write_symbols == NO_DEBUG if the debugging
1772      level is 0.  */
1773   if (debug_info_level == DINFO_LEVEL_NONE)
1774     write_symbols = NO_DEBUG;
1775
1776   /* Now we know write_symbols, set up the debug hooks based on it.
1777      By default we do nothing for debug output.  */
1778   if (PREFERRED_DEBUGGING_TYPE == NO_DEBUG)
1779     default_debug_hooks = &do_nothing_debug_hooks;
1780 #if defined(DBX_DEBUGGING_INFO)
1781   else if (PREFERRED_DEBUGGING_TYPE == DBX_DEBUG)
1782     default_debug_hooks = &dbx_debug_hooks;
1783 #endif
1784 #if defined(XCOFF_DEBUGGING_INFO)
1785   else if (PREFERRED_DEBUGGING_TYPE == XCOFF_DEBUG)
1786     default_debug_hooks = &xcoff_debug_hooks;
1787 #endif
1788 #ifdef SDB_DEBUGGING_INFO
1789   else if (PREFERRED_DEBUGGING_TYPE == SDB_DEBUG)
1790     default_debug_hooks = &sdb_debug_hooks;
1791 #endif
1792 #ifdef DWARF2_DEBUGGING_INFO
1793   else if (PREFERRED_DEBUGGING_TYPE == DWARF2_DEBUG)
1794     default_debug_hooks = &dwarf2_debug_hooks;
1795 #endif
1796 #ifdef VMS_DEBUGGING_INFO
1797   else if (PREFERRED_DEBUGGING_TYPE == VMS_DEBUG
1798            || PREFERRED_DEBUGGING_TYPE == VMS_AND_DWARF2_DEBUG)
1799     default_debug_hooks = &vmsdbg_debug_hooks;
1800 #endif
1801
1802   debug_hooks = &do_nothing_debug_hooks;
1803   if (write_symbols == NO_DEBUG)
1804     ;
1805 #if defined(DBX_DEBUGGING_INFO)
1806   else if (write_symbols == DBX_DEBUG)
1807     debug_hooks = &dbx_debug_hooks;
1808 #endif
1809 #if defined(XCOFF_DEBUGGING_INFO)
1810   else if (write_symbols == XCOFF_DEBUG)
1811     debug_hooks = &xcoff_debug_hooks;
1812 #endif
1813 #ifdef SDB_DEBUGGING_INFO
1814   else if (write_symbols == SDB_DEBUG)
1815     debug_hooks = &sdb_debug_hooks;
1816 #endif
1817 #ifdef DWARF2_DEBUGGING_INFO
1818   else if (write_symbols == DWARF2_DEBUG)
1819     debug_hooks = &dwarf2_debug_hooks;
1820 #endif
1821 #ifdef VMS_DEBUGGING_INFO
1822   else if (write_symbols == VMS_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
1823     debug_hooks = &vmsdbg_debug_hooks;
1824 #endif
1825   else
1826     error ("target system does not support the \"%s\" debug format",
1827            debug_type_names[write_symbols]);
1828
1829   /* Now we know which debug output will be used so we can set
1830      flag_var_tracking, flag_rename_registers and flag_web if the user has
1831      not specified them.  */
1832   if (debug_info_level < DINFO_LEVEL_NORMAL
1833       || debug_hooks->var_location == do_nothing_debug_hooks.var_location)
1834     {
1835       if (flag_var_tracking == 1)
1836         {
1837           if (debug_info_level < DINFO_LEVEL_NORMAL)
1838             warning ("variable tracking requested, but useless unless "
1839                      "producing debug info");
1840           else
1841             warning ("variable tracking requested, but not supported "
1842                      "by this debug format");
1843         }
1844       flag_var_tracking = 0;
1845     }
1846
1847   if (flag_rename_registers == AUTODETECT_FLAG_VAR_TRACKING)
1848     flag_rename_registers = default_debug_hooks->var_location
1849                             != do_nothing_debug_hooks.var_location;
1850
1851   if (flag_web == AUTODETECT_FLAG_VAR_TRACKING)
1852     flag_web = optimize >= 2 && (default_debug_hooks->var_location
1853                                  != do_nothing_debug_hooks.var_location);
1854
1855   if (flag_var_tracking == AUTODETECT_FLAG_VAR_TRACKING)
1856     flag_var_tracking = optimize >= 1;
1857
1858   /* If auxiliary info generation is desired, open the output file.
1859      This goes in the same directory as the source file--unlike
1860      all the other output files.  */
1861   if (flag_gen_aux_info)
1862     {
1863       aux_info_file = fopen (aux_info_file_name, "w");
1864       if (aux_info_file == 0)
1865         fatal_error ("can%'t open %s: %m", aux_info_file_name);
1866     }
1867
1868   if (! targetm.have_named_sections)
1869     {
1870       if (flag_function_sections)
1871         {
1872           warning ("-ffunction-sections not supported for this target");
1873           flag_function_sections = 0;
1874         }
1875       if (flag_data_sections)
1876         {
1877           warning ("-fdata-sections not supported for this target");
1878           flag_data_sections = 0;
1879         }
1880     }
1881
1882   if (flag_function_sections && profile_flag)
1883     {
1884       warning ("-ffunction-sections disabled; it makes profiling impossible");
1885       flag_function_sections = 0;
1886     }
1887
1888 #ifndef HAVE_prefetch
1889   if (flag_prefetch_loop_arrays)
1890     {
1891       warning ("-fprefetch-loop-arrays not supported for this target");
1892       flag_prefetch_loop_arrays = 0;
1893     }
1894   if (flag_speculative_prefetching)
1895     {
1896       if (flag_speculative_prefetching_set)
1897         warning ("-fspeculative-prefetching not supported for this target");
1898       flag_speculative_prefetching = 0;
1899     }
1900 #else
1901   if (flag_prefetch_loop_arrays && !HAVE_prefetch)
1902     {
1903       warning ("-fprefetch-loop-arrays not supported for this target (try -march switches)");
1904       flag_prefetch_loop_arrays = 0;
1905     }
1906   if (flag_speculative_prefetching && !HAVE_prefetch)
1907     {
1908       if (flag_speculative_prefetching_set)
1909         warning ("-fspeculative-prefetching not supported for this target (try -march switches)");
1910       flag_speculative_prefetching = 0;
1911     }
1912 #endif
1913
1914   /* This combination of options isn't handled for i386 targets and doesn't
1915      make much sense anyway, so don't allow it.  */
1916   if (flag_prefetch_loop_arrays && optimize_size)
1917     {
1918       warning ("-fprefetch-loop-arrays is not supported with -Os");
1919       flag_prefetch_loop_arrays = 0;
1920     }
1921
1922 #ifndef OBJECT_FORMAT_ELF
1923   if (flag_function_sections && write_symbols != NO_DEBUG)
1924     warning ("-ffunction-sections may affect debugging on some targets");
1925 #endif
1926
1927   /* The presence of IEEE signaling NaNs, implies all math can trap.  */
1928   if (flag_signaling_nans)
1929     flag_trapping_math = 1;
1930 }
1931
1932 /* Initialize the compiler back end.  */
1933 static void
1934 backend_init (void)
1935 {
1936   init_adjust_machine_modes ();
1937
1938   init_emit_once (debug_info_level == DINFO_LEVEL_NORMAL
1939                   || debug_info_level == DINFO_LEVEL_VERBOSE
1940 #ifdef VMS_DEBUGGING_INFO
1941                     /* Enable line number info for traceback.  */
1942                     || debug_info_level > DINFO_LEVEL_NONE
1943 #endif
1944                     || flag_test_coverage);
1945
1946   init_regs ();
1947   init_fake_stack_mems ();
1948   init_alias_once ();
1949   init_loop ();
1950   init_reload ();
1951   init_function_once ();
1952   init_varasm_once ();
1953
1954   /* The following initialization functions need to generate rtl, so
1955      provide a dummy function context for them.  */
1956   init_dummy_function_start ();
1957   init_expmed ();
1958   if (flag_caller_saves)
1959     init_caller_save ();
1960   expand_dummy_function_end ();
1961 }
1962
1963 /* Language-dependent initialization.  Returns nonzero on success.  */
1964 static int
1965 lang_dependent_init (const char *name)
1966 {
1967   location_t save_loc = input_location;
1968   if (dump_base_name == 0)
1969     dump_base_name = name && name[0] ? name : "gccdump";
1970
1971   /* Other front-end initialization.  */
1972 #ifdef USE_MAPPED_LOCATION
1973   input_location = BUILTINS_LOCATION;
1974 #else
1975   input_filename = "<built-in>";
1976   input_line = 0;
1977 #endif
1978   if (lang_hooks.init () == 0)
1979     return 0;
1980   input_location = save_loc;
1981
1982   init_asm_output (name);
1983
1984   /* These create various _DECL nodes, so need to be called after the
1985      front end is initialized.  */
1986   init_eh ();
1987   init_optabs ();
1988
1989   /* The following initialization functions need to generate rtl, so
1990      provide a dummy function context for them.  */
1991   init_dummy_function_start ();
1992   init_expr_once ();
1993   expand_dummy_function_end ();
1994
1995   /* If dbx symbol table desired, initialize writing it and output the
1996      predefined types.  */
1997   timevar_push (TV_SYMOUT);
1998
1999 #ifdef DWARF2_UNWIND_INFO
2000   if (dwarf2out_do_frame ())
2001     dwarf2out_frame_init ();
2002 #endif
2003
2004   /* Now we have the correct original filename, we can initialize
2005      debug output.  */
2006   (*debug_hooks->init) (name);
2007
2008   timevar_pop (TV_SYMOUT);
2009
2010   return 1;
2011 }
2012
2013 /* Clean up: close opened files, etc.  */
2014
2015 static void
2016 finalize (void)
2017 {
2018   /* Close the dump files.  */
2019   if (flag_gen_aux_info)
2020     {
2021       fclose (aux_info_file);
2022       if (errorcount)
2023         unlink (aux_info_file_name);
2024     }
2025
2026   /* Close non-debugging input and output files.  Take special care to note
2027      whether fclose returns an error, since the pages might still be on the
2028      buffer chain while the file is open.  */
2029
2030   if (asm_out_file)
2031     {
2032       if (ferror (asm_out_file) != 0)
2033         fatal_error ("error writing to %s: %m", asm_file_name);
2034       if (fclose (asm_out_file) != 0)
2035         fatal_error ("error closing %s: %m", asm_file_name);
2036     }
2037
2038   finish_optimization_passes ();
2039
2040   if (mem_report)
2041     {
2042       ggc_print_statistics ();
2043       stringpool_statistics ();
2044       dump_tree_statistics ();
2045       dump_rtx_statistics ();
2046       dump_varray_statistics ();
2047       dump_alloc_pool_statistics ();
2048       dump_ggc_loc_statistics ();
2049     }
2050
2051   /* Free up memory for the benefit of leak detectors.  */
2052   free_reg_info ();
2053
2054   /* Language-specific end of compilation actions.  */
2055   lang_hooks.finish ();
2056 }
2057
2058 /* Initialize the compiler, and compile the input file.  */
2059 static void
2060 do_compile (void)
2061 {
2062   /* Initialize timing first.  The C front ends read the main file in
2063      the post_options hook, and C++ does file timings.  */
2064   if (time_report || !quiet_flag  || flag_detailed_statistics)
2065     timevar_init ();
2066   timevar_start (TV_TOTAL);
2067
2068   process_options ();
2069
2070   /* Don't do any more if an error has already occurred.  */
2071   if (!errorcount)
2072     {
2073       /* Set up the back-end if requested.  */
2074       if (!no_backend)
2075         backend_init ();
2076
2077       /* Language-dependent initialization.  Returns true on success.  */
2078       if (lang_dependent_init (main_input_filename))
2079         compile_file ();
2080
2081       finalize ();
2082     }
2083
2084   /* Stop timing and print the times.  */
2085   timevar_stop (TV_TOTAL);
2086   timevar_print (stderr);
2087 }
2088
2089 /* Entry point of cc1, cc1plus, jc1, f771, etc.
2090    Exit code is FATAL_EXIT_CODE if can't open files or if there were
2091    any errors, or SUCCESS_EXIT_CODE if compilation succeeded.
2092
2093    It is not safe to call this function more than once.  */
2094
2095 int
2096 toplev_main (unsigned int argc, const char **argv)
2097 {
2098   save_argv = argv;
2099
2100   /* Initialization of GCC's environment, and diagnostics.  */
2101   general_init (argv[0]);
2102
2103   /* Parse the options and do minimal processing; basically just
2104      enough to default flags appropriately.  */
2105   decode_options (argc, argv);
2106
2107   randomize ();
2108
2109   /* Exit early if we can (e.g. -help).  */
2110   if (!exit_after_options)
2111     do_compile ();
2112
2113   if (errorcount || sorrycount)
2114     return (FATAL_EXIT_CODE);
2115
2116   return (SUCCESS_EXIT_CODE);
2117 }