OSDN Git Service

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