OSDN Git Service

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