OSDN Git Service

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