summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2016-04-25 20:13:17 -0700
committerYamaArashi <shadow962@live.com>2016-04-25 20:13:17 -0700
commitcb63bcc6810ee28bc780b4f82a740368b4087d89 (patch)
treea453b534779d998491a571743d8abaca0d4dcdb7 /gcc
parent31cf69f88e968da5857ee39333d60bb81c021520 (diff)
format toplev.c
Diffstat (limited to 'gcc')
-rwxr-xr-xgcc/toplev.c5606
1 files changed, 2803 insertions, 2803 deletions
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 36db530..598874d 100755
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1,22 +1,22 @@
/* Top level of GNU C compiler
Copyright (C) 1987, 88, 89, 92-8, 1999 Free Software Foundation, Inc.
-This file is part of GNU CC.
+ This file is part of GNU CC.
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
+ GNU CC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+ You should have received a copy of the GNU General Public License
+ along with GNU CC; see the file COPYING. If not, write to
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
/* This is the top level of cc1/c++.
It parses command args, opens files, invokes the various passes
@@ -113,7 +113,7 @@ static void set_target_switch (char *);
static char *decl_name (tree, int);
static void vmessage (char *, char *, va_list);
static void v_message_with_file_and_line (char *, int, char *,
- char *, va_list);
+ char *, va_list);
static void v_message_with_decl (tree, char *, char *, va_list);
static void file_and_line_for_asm (rtx, char **, int *);
static void v_error_with_file_and_line (char *, int, char *, va_list);
@@ -133,17 +133,17 @@ static void v_really_sorry (char *, va_list) ATTRIBUTE_NORETURN;
static void float_signal (int) ATTRIBUTE_NORETURN;
static void pipe_closed (int) ATTRIBUTE_NORETURN;
static void open_dump_file (char *, char *);
-static void close_dump_file (void (*) (FILE *, rtx), rtx);
-static void dump_rtl (char *, tree, void (*) (FILE *, rtx), rtx);
+static void close_dump_file (void (*)(FILE *, rtx), rtx);
+static void dump_rtl (char *, tree, void (*)(FILE *, rtx), rtx);
static void clean_dump_file (char *);
static void compile_file (char *);
static void display_help (void);
static void print_version (FILE *, char *);
static int print_single_switch (FILE *, int, int, char *, char *, char *,
- char *, char *);
+ char *, char *);
static void print_switch_values (FILE *, int, int, char *, char *,
- char *);
+ char *);
void print_rtl_graph_with_bb (const char *, const char *, rtx);
void clean_graph_dump_file (const char *, const char *);
@@ -158,7 +158,7 @@ char *progname;
/* Copy of arguments to main. */
int save_argc;
char **save_argv;
-
+
/* Name of current original source file (what was input to cpp).
This comes from each #-command in the actual input. */
@@ -269,13 +269,13 @@ int sorrycount = 0;
2: and any other information that might be interesting, such as function
parameter types in C++. */
-char *(*decl_printable_name) (tree, int);
+char *(*decl_printable_name) (tree, int);
/* Pointer to function to compute rtl for a language-specific tree code. */
typedef rtx (*lang_expand_expr_t)
- (union tree_node *, rtx, enum machine_mode,
- enum expand_modifier modifier);
+ (union tree_node *, rtx, enum machine_mode,
+ enum expand_modifier modifier);
lang_expand_expr_t lang_expand_expr = 0;
@@ -303,7 +303,7 @@ int obey_regdecls = 0;
times taken by the various passes. -quiet. */
int quiet_flag = 0;
-
+
/* -f flags. */
/* Nonzero means give an enum type only as many bytes as it needs. */
@@ -424,7 +424,7 @@ int flag_omit_frame_pointer = 0;
int flag_function_sections = 0;
/* ... and similar for data. */
-
+
int flag_data_sections = 0;
/* Nonzero to inhibit use of define_optimization peephole opts. */
@@ -510,7 +510,7 @@ int flag_shared_data;
int flag_exceptions;
-/* Nonzero means use the new model for exception handling. Replaces
+/* Nonzero means use the new model for exception handling. Replaces
-DNEW_EH_MODEL as a compile option. */
int flag_new_exceptions = 0;
@@ -541,7 +541,7 @@ int flag_optimize_comparisons = 0;
/* END CYGNUS LOCAL meissner/nortel */
/* -finhibit-size-directive inhibits output of .size for ELF.
- This is used only for compiling crtstuff.c,
+ This is used only for compiling crtstuff.c,
and it may be extended to other effects
needed for crtstuff.c on other systems. */
int flag_inhibit_size_directive = 0;
@@ -619,27 +619,27 @@ int flag_instrument_function_entry_exit = 0;
/* Table of supported debugging formats. */
static struct
{
- char * arg;
- /* Since PREFERRED_DEBUGGING_TYPE isn't necessarily a
- constant expression, we use NO_DEBUG in its place. */
- enum debug_info_type debug_type;
- char * description;
+ char * arg;
+ /* Since PREFERRED_DEBUGGING_TYPE isn't necessarily a
+ constant expression, we use NO_DEBUG in its place. */
+ enum debug_info_type debug_type;
+ char * description;
} *da,
-debug_args[] =
+ debug_args[] =
{
- { "g", NO_DEBUG, "Generate default debug format output" },
+ { "g", NO_DEBUG, "Generate default debug format output" },
#ifdef DWARF2_DEBUGGING_INFO
- { "gdwarf-2", DWARF2_DEBUG, "Enable DWARF-2 debug output" },
+ { "gdwarf-2", DWARF2_DEBUG, "Enable DWARF-2 debug output" },
#endif
- { 0, 0, 0, 0 }
+ { 0, 0, 0, 0 }
};
typedef struct
{
- char * string;
- int * variable;
- int on_value;
- char * description;
+ char * string;
+ int * variable;
+ int on_value;
+ char * description;
}
lang_independent_options;
@@ -651,128 +651,128 @@ lang_independent_options;
lang_independent_options f_options[] =
{
- {"float-store", &flag_float_store, 1,
- "Do not store floats in registers" },
- {"volatile", &flag_volatile, 1,
- "Consider all mem refs through pointers as volatile"},
- {"volatile-global", &flag_volatile_global, 1,
- "Consider all mem refs to global data to be volatile" },
- {"defer-pop", &flag_defer_pop, 1,
- "Defer popping functions args from stack until later" },
- {"omit-frame-pointer", &flag_omit_frame_pointer, 1,
- "When possible do not generate stack frames"},
- {"cse-follow-jumps", &flag_cse_follow_jumps, 1,
- "When running CSE, follow jumps to their targets" },
- {"cse-skip-blocks", &flag_cse_skip_blocks, 1,
- "When running CSE, follow conditional jumps" },
- {"expensive-optimizations", &flag_expensive_optimizations, 1,
- "Perform a number of minor, expensive optimisations" },
- {"thread-jumps", &flag_thread_jumps, 1,
- "Perform jump threading optimisations"},
- {"strength-reduce", &flag_strength_reduce, 1,
- "Perform strength reduction optimisations" },
- {"unroll-loops", &flag_unroll_loops, 1,
- "Perform loop unrolling when interation count is known" },
- {"unroll-all-loops", &flag_unroll_all_loops, 1,
- "Perform loop unrolling for all loops" },
- {"move-all-movables", &flag_move_all_movables, 1,
- "Force all loop invariant computations out of loops" },
- {"reduce-all-givs", &flag_reduce_all_givs, 1,
- "Strength reduce all loop general induction variables" },
- {"writable-strings", &flag_writable_strings, 1,
- "Store strings in writable data section" },
- {"peephole", &flag_no_peephole, 0,
- "Enable machine specific peephole optimisations" },
- {"force-mem", &flag_force_mem, 1,
- "Copy memory operands into registers before using" },
- {"force-addr", &flag_force_addr, 1,
- "Copy memory address constants into regs before using" },
- {"function-cse", &flag_no_function_cse, 0,
- "Allow function addresses to be held in registers" },
- {"inline-functions", &flag_inline_functions, 1,
- "Integrate simple functions into their callers" },
- {"keep-inline-functions", &flag_keep_inline_functions, 1,
- "Generate code for funcs even if they are fully inlined" },
- {"inline", &flag_no_inline, 0,
- "Pay attention to the 'inline' keyword"},
- {"keep-static-consts", &flag_keep_static_consts, 1,
- "Emit static const variables even if they are not used" },
- {"syntax-only", &flag_syntax_only, 1,
- "Check for syntax errors, then stop" },
- {"shared-data", &flag_shared_data, 1,
- "Mark data as shared rather than private" },
- {"caller-saves", &flag_caller_saves, 1,
- "Enable saving registers around function calls" },
- {"pcc-struct-return", &flag_pcc_struct_return, 1,
- "Return 'short' aggregates in memory, not registers" },
- {"reg-struct-return", &flag_pcc_struct_return, 0,
- "Return 'short' aggregates in registers" },
- {"gcse", &flag_gcse, 1,
- "Perform the global common subexpression elimination" },
- {"rerun-cse-after-loop", &flag_rerun_cse_after_loop, 1,
- "Run CSE pass after loop optimisations"},
- {"rerun-loop-opt", &flag_rerun_loop_opt, 1,
- "Run the loop optimiser twice"},
- {"pretend-float", &flag_pretend_float, 1,
- "Pretend that host and target use the same FP format"},
- {"branch-count-reg",&flag_branch_on_count_reg, 1,
- "Replace add,compare,branch with branch on count reg"},
+ {"float-store", &flag_float_store, 1,
+ "Do not store floats in registers" },
+ {"volatile", &flag_volatile, 1,
+ "Consider all mem refs through pointers as volatile"},
+ {"volatile-global", &flag_volatile_global, 1,
+ "Consider all mem refs to global data to be volatile" },
+ {"defer-pop", &flag_defer_pop, 1,
+ "Defer popping functions args from stack until later" },
+ {"omit-frame-pointer", &flag_omit_frame_pointer, 1,
+ "When possible do not generate stack frames"},
+ {"cse-follow-jumps", &flag_cse_follow_jumps, 1,
+ "When running CSE, follow jumps to their targets" },
+ {"cse-skip-blocks", &flag_cse_skip_blocks, 1,
+ "When running CSE, follow conditional jumps" },
+ {"expensive-optimizations", &flag_expensive_optimizations, 1,
+ "Perform a number of minor, expensive optimisations" },
+ {"thread-jumps", &flag_thread_jumps, 1,
+ "Perform jump threading optimisations"},
+ {"strength-reduce", &flag_strength_reduce, 1,
+ "Perform strength reduction optimisations" },
+ {"unroll-loops", &flag_unroll_loops, 1,
+ "Perform loop unrolling when interation count is known" },
+ {"unroll-all-loops", &flag_unroll_all_loops, 1,
+ "Perform loop unrolling for all loops" },
+ {"move-all-movables", &flag_move_all_movables, 1,
+ "Force all loop invariant computations out of loops" },
+ {"reduce-all-givs", &flag_reduce_all_givs, 1,
+ "Strength reduce all loop general induction variables" },
+ {"writable-strings", &flag_writable_strings, 1,
+ "Store strings in writable data section" },
+ {"peephole", &flag_no_peephole, 0,
+ "Enable machine specific peephole optimisations" },
+ {"force-mem", &flag_force_mem, 1,
+ "Copy memory operands into registers before using" },
+ {"force-addr", &flag_force_addr, 1,
+ "Copy memory address constants into regs before using" },
+ {"function-cse", &flag_no_function_cse, 0,
+ "Allow function addresses to be held in registers" },
+ {"inline-functions", &flag_inline_functions, 1,
+ "Integrate simple functions into their callers" },
+ {"keep-inline-functions", &flag_keep_inline_functions, 1,
+ "Generate code for funcs even if they are fully inlined" },
+ {"inline", &flag_no_inline, 0,
+ "Pay attention to the 'inline' keyword"},
+ {"keep-static-consts", &flag_keep_static_consts, 1,
+ "Emit static const variables even if they are not used" },
+ {"syntax-only", &flag_syntax_only, 1,
+ "Check for syntax errors, then stop" },
+ {"shared-data", &flag_shared_data, 1,
+ "Mark data as shared rather than private" },
+ {"caller-saves", &flag_caller_saves, 1,
+ "Enable saving registers around function calls" },
+ {"pcc-struct-return", &flag_pcc_struct_return, 1,
+ "Return 'short' aggregates in memory, not registers" },
+ {"reg-struct-return", &flag_pcc_struct_return, 0,
+ "Return 'short' aggregates in registers" },
+ {"gcse", &flag_gcse, 1,
+ "Perform the global common subexpression elimination" },
+ {"rerun-cse-after-loop", &flag_rerun_cse_after_loop, 1,
+ "Run CSE pass after loop optimisations"},
+ {"rerun-loop-opt", &flag_rerun_loop_opt, 1,
+ "Run the loop optimiser twice"},
+ {"pretend-float", &flag_pretend_float, 1,
+ "Pretend that host and target use the same FP format"},
+ {"branch-count-reg",&flag_branch_on_count_reg, 1,
+ "Replace add,compare,branch with branch on count reg"},
/* END CYGNUS LOCAL meissner/nortel */
- {"optimize-comparisons", &flag_optimize_comparisons, 1,
- "Make some comparison operations sequence optimizations"},
+ {"optimize-comparisons", &flag_optimize_comparisons, 1,
+ "Make some comparison operations sequence optimizations"},
/* END CYGNUS LOCAL meissner/nortel */
- {"exceptions", &flag_exceptions, 1,
- "Enable exception handling" },
- {"new-exceptions", &flag_new_exceptions, 1,
- "Use the new model for exception handling" },
- {"sjlj-exceptions", &exceptions_via_longjmp, 1,
- "Use setjmp/longjmp to handle exceptions" },
- {"asynchronous-exceptions", &asynchronous_exceptions, 1,
- "Support asynchronous exceptions" },
- {"fast-math", &flag_fast_math, 1,
- "Improve FP speed by violating ANSI & IEEE rules" },
- {"common", &flag_no_common, 0,
- "Do not put unitialised globals in the common section" },
- {"inhibit-size-directive", &flag_inhibit_size_directive, 1,
- "Do not generate .size directives" },
- {"function-sections", &flag_function_sections, 1,
- "place each function into its own section" },
- {"data-sections", &flag_data_sections, 1,
- "place data items into their own section" },
- {"verbose-asm", &flag_verbose_asm, 1,
- "Add extra commentry to assembler output"},
- /* CYGNUS LOCAL unaligned-struct-hack */
- {"unaligned-struct-hack", &flag_unaligned_struct_hack, 1,
- "Assume structure fields may be unaligned" },
- /* END CYGNUS LOCAL */
- /* CYGNUS LOCAL unaligned-pointers */
- {"unaligned-pointers", &flag_unaligned_pointers, 1,
- "Assume all pointers might be unaligned"},
- /* END CYGNUS LOCAL */
- {"regmove", &flag_regmove, 1,
- "Enables a register move optimisation"},
- {"optimize-register-move", &flag_regmove, 1,
- "Do the full regmove optimization pass"},
- {"pack-struct", &flag_pack_struct, 1,
- "Pack structure members together without holes" },
- {"stack-check", &flag_stack_check, 1,
- "Insert stack checking code into the program" },
- {"argument-alias", &flag_argument_noalias, 0,
- "Specify that arguments may alias each other & globals"},
- {"argument-noalias", &flag_argument_noalias, 1,
- "Assume arguments may alias globals but not each other"},
- {"argument-noalias-global", &flag_argument_noalias, 2,
- "Assume arguments do not alias each other or globals" },
- {"strict-aliasing", &flag_strict_aliasing, 1,
- "Assume strict aliasing rules apply" },
- {"check-memory-usage", &flag_check_memory_usage, 1,
- "Generate code to check every memory access" },
- {"prefix-function-name", &flag_prefix_function_name, 1,
- "Add a prefix to all function names" },
- {"dump-unnumbered", &flag_dump_unnumbered, 1,
- "Suppress output of instruction numbers and line number notes in debugging dumps"},
- {"instrument-functions", &flag_instrument_function_entry_exit, 1,
- "Instrument function entry/exit with profiling calls"}
+ {"exceptions", &flag_exceptions, 1,
+ "Enable exception handling" },
+ {"new-exceptions", &flag_new_exceptions, 1,
+ "Use the new model for exception handling" },
+ {"sjlj-exceptions", &exceptions_via_longjmp, 1,
+ "Use setjmp/longjmp to handle exceptions" },
+ {"asynchronous-exceptions", &asynchronous_exceptions, 1,
+ "Support asynchronous exceptions" },
+ {"fast-math", &flag_fast_math, 1,
+ "Improve FP speed by violating ANSI & IEEE rules" },
+ {"common", &flag_no_common, 0,
+ "Do not put unitialised globals in the common section" },
+ {"inhibit-size-directive", &flag_inhibit_size_directive, 1,
+ "Do not generate .size directives" },
+ {"function-sections", &flag_function_sections, 1,
+ "place each function into its own section" },
+ {"data-sections", &flag_data_sections, 1,
+ "place data items into their own section" },
+ {"verbose-asm", &flag_verbose_asm, 1,
+ "Add extra commentry to assembler output"},
+ /* CYGNUS LOCAL unaligned-struct-hack */
+ {"unaligned-struct-hack", &flag_unaligned_struct_hack, 1,
+ "Assume structure fields may be unaligned" },
+ /* END CYGNUS LOCAL */
+ /* CYGNUS LOCAL unaligned-pointers */
+ {"unaligned-pointers", &flag_unaligned_pointers, 1,
+ "Assume all pointers might be unaligned"},
+ /* END CYGNUS LOCAL */
+ {"regmove", &flag_regmove, 1,
+ "Enables a register move optimisation"},
+ {"optimize-register-move", &flag_regmove, 1,
+ "Do the full regmove optimization pass"},
+ {"pack-struct", &flag_pack_struct, 1,
+ "Pack structure members together without holes" },
+ {"stack-check", &flag_stack_check, 1,
+ "Insert stack checking code into the program" },
+ {"argument-alias", &flag_argument_noalias, 0,
+ "Specify that arguments may alias each other & globals"},
+ {"argument-noalias", &flag_argument_noalias, 1,
+ "Assume arguments may alias globals but not each other"},
+ {"argument-noalias-global", &flag_argument_noalias, 2,
+ "Assume arguments do not alias each other or globals" },
+ {"strict-aliasing", &flag_strict_aliasing, 1,
+ "Assume strict aliasing rules apply" },
+ {"check-memory-usage", &flag_check_memory_usage, 1,
+ "Generate code to check every memory access" },
+ {"prefix-function-name", &flag_prefix_function_name, 1,
+ "Add a prefix to all function names" },
+ {"dump-unnumbered", &flag_dump_unnumbered, 1,
+ "Suppress output of instruction numbers and line number notes in debugging dumps"},
+ {"instrument-functions", &flag_instrument_function_entry_exit, 1,
+ "Instrument function entry/exit with profiling calls"}
};
#define NUM_ELEM(a) (sizeof (a) / sizeof ((a)[0]))
@@ -781,110 +781,110 @@ lang_independent_options f_options[] =
static struct lang_opt
{
- char *option;
- char *description;
+ char *option;
+ char *description;
}
documented_lang_options[] =
{
- /* In order not to overload the --help output, the convention
- used here is to only describe those options which are not
- enabled by default. */
-
- { "-ansi", "Compile just for ANSI C" },
- { "-fallow-single-precision",
- "Do not promote floats to double if using -traditional" },
- { "-std= ", "Determine language standard"},
-
- { "-fsigned-bitfields", "" },
- { "-funsigned-bitfields","Make bitfields by unsigned by default" },
- { "-fno-signed-bitfields", "" },
- { "-fno-unsigned-bitfields","" },
-
- { "-ftraditional", "" },
- { "-traditional", "Attempt to support traditional K&R style C"},
- { "-fnotraditional", "" },
- { "-fno-traditional", "" },
-
- { "-fasm", "" },
- { "-fno-asm", "Do not recognise the 'asm' keyword" },
- { "-fbuiltin", "" },
- { "-fno-builtin", "Do not recognise any built in functions" },
- { "-fhosted", "Assume normal C execution environment" },
- { "-fno-hosted", "" },
- { "-ffreestanding",
- "Assume that standard libraries & main might not exist" },
- { "-fno-freestanding", "" },
- { "-fcond-mismatch", "Allow different types as args of ? operator"},
- { "-fno-cond-mismatch", "" },
- { "-fident", "" },
- { "-fno-ident", "Ignore #ident directives" },
- { "-fshort-double", "Use the same size for double as for float" },
- { "-fno-short-double", "" },
- { "-fshort-enums", "Use the smallest fitting integer to hold enums"},
- { "-fno-short-enums", "" },
-
- { "-Wall", "Enable most warning messages" },
- { "-Wbad-function-cast",
- "Warn about casting functions to incompatible types" },
- { "-Wno-bad-function-cast", "" },
- { "-Wmissing-noreturn",
- "Warn about functions which might be candidates for attribute noreturn" },
- { "-Wno-missing-noreturn", "" },
- { "-Wcast-qual", "Warn about casts which discard qualifiers"},
- { "-Wno-cast-qual", "" },
- { "-Wchar-subscripts", "Warn about subscripts whose type is 'char'"},
- { "-Wno-char-subscripts", "" },
- { "-Wcomment", "Warn if nested comments are detected" },
- { "-Wno-comment", "" },
- { "-Wcomments", "Warn if nested comments are detected" },
- { "-Wno-comments", "" },
- { "-Wconversion", "Warn about possibly confusing type conversions" },
- { "-Wno-conversion", "" },
- { "-Wformat", "Warn about printf format anomalies" },
- { "-Wno-format", "" },
- { "-Wimplicit-function-declaration",
- "Warn about implicit function declarations" },
- { "-Wno-implicit-function-declaration", "" },
- { "-Werror-implicit-function-declaration", "" },
- { "-Wimplicit-int", "Warn when a declaration does not specify a type" },
- { "-Wno-implicit-int", "" },
- { "-Wimplicit", "" },
- { "-Wno-implicit", "" },
- { "-Wimport", "Warn about the use of the #import directive" },
- { "-Wno-import", "" },
- { "-Wlong-long","" },
- { "-Wno-long-long", "Do not warn about using 'long long' when -pedantic" },
- { "-Wmain", "Warn about suspicious declarations of main" },
- { "-Wno-main", "" },
- { "-Wmissing-braces",
- "Warn about possibly missing braces around initialisers" },
- { "-Wno-missing-braces", "" },
- { "-Wmissing-declarations",
- "Warn about global funcs without previous declarations"},
- { "-Wno-missing-declarations", "" },
- { "-Wmissing-prototypes", "Warn about global funcs without prototypes" },
- { "-Wno-missing-prototypes", "" },
- { "-Wmultichar", "Warn about use of multicharacter literals"},
- { "-Wno-multichar", "" },
- { "-Wnested-externs", "Warn about externs not at file scope level" },
- { "-Wno-nested-externs", "" },
- { "-Wparentheses", "Warn about possible missing parentheses" },
- { "-Wno-parentheses", "" },
- { "-Wpointer-arith", "Warn about function pointer arithmetic" },
- { "-Wno-pointer-arith", "" },
- { "-Wredundant-decls",
- "Warn about multiple declarations of the same object" },
- { "-Wno-redundant-decls", "" },
- { "-Wsign-compare", "Warn about signed/unsigned comparisons" },
- { "-Wno-sign-compare", "" },
- { "-Wstrict-prototypes", "Warn about non-prototyped function decls" },
- { "-Wno-strict-prototypes", "" },
- { "-Wtraditional", "Warn about constructs whose meaning change in ANSI C"},
- { "-Wno-traditional", "" },
- { "-Wundef", "" },
- { "-Wno-undef", "" },
- { "-Wwrite-strings", "Mark strings as 'const char *'"},
- { "-Wno-write-strings", "" },
+ /* In order not to overload the --help output, the convention
+ used here is to only describe those options which are not
+ enabled by default. */
+
+ { "-ansi", "Compile just for ANSI C" },
+ { "-fallow-single-precision",
+ "Do not promote floats to double if using -traditional" },
+ { "-std= ", "Determine language standard"},
+
+ { "-fsigned-bitfields", "" },
+ { "-funsigned-bitfields","Make bitfields by unsigned by default" },
+ { "-fno-signed-bitfields", "" },
+ { "-fno-unsigned-bitfields","" },
+
+ { "-ftraditional", "" },
+ { "-traditional", "Attempt to support traditional K&R style C"},
+ { "-fnotraditional", "" },
+ { "-fno-traditional", "" },
+
+ { "-fasm", "" },
+ { "-fno-asm", "Do not recognise the 'asm' keyword" },
+ { "-fbuiltin", "" },
+ { "-fno-builtin", "Do not recognise any built in functions" },
+ { "-fhosted", "Assume normal C execution environment" },
+ { "-fno-hosted", "" },
+ { "-ffreestanding",
+ "Assume that standard libraries & main might not exist" },
+ { "-fno-freestanding", "" },
+ { "-fcond-mismatch", "Allow different types as args of ? operator"},
+ { "-fno-cond-mismatch", "" },
+ { "-fident", "" },
+ { "-fno-ident", "Ignore #ident directives" },
+ { "-fshort-double", "Use the same size for double as for float" },
+ { "-fno-short-double", "" },
+ { "-fshort-enums", "Use the smallest fitting integer to hold enums"},
+ { "-fno-short-enums", "" },
+
+ { "-Wall", "Enable most warning messages" },
+ { "-Wbad-function-cast",
+ "Warn about casting functions to incompatible types" },
+ { "-Wno-bad-function-cast", "" },
+ { "-Wmissing-noreturn",
+ "Warn about functions which might be candidates for attribute noreturn" },
+ { "-Wno-missing-noreturn", "" },
+ { "-Wcast-qual", "Warn about casts which discard qualifiers"},
+ { "-Wno-cast-qual", "" },
+ { "-Wchar-subscripts", "Warn about subscripts whose type is 'char'"},
+ { "-Wno-char-subscripts", "" },
+ { "-Wcomment", "Warn if nested comments are detected" },
+ { "-Wno-comment", "" },
+ { "-Wcomments", "Warn if nested comments are detected" },
+ { "-Wno-comments", "" },
+ { "-Wconversion", "Warn about possibly confusing type conversions" },
+ { "-Wno-conversion", "" },
+ { "-Wformat", "Warn about printf format anomalies" },
+ { "-Wno-format", "" },
+ { "-Wimplicit-function-declaration",
+ "Warn about implicit function declarations" },
+ { "-Wno-implicit-function-declaration", "" },
+ { "-Werror-implicit-function-declaration", "" },
+ { "-Wimplicit-int", "Warn when a declaration does not specify a type" },
+ { "-Wno-implicit-int", "" },
+ { "-Wimplicit", "" },
+ { "-Wno-implicit", "" },
+ { "-Wimport", "Warn about the use of the #import directive" },
+ { "-Wno-import", "" },
+ { "-Wlong-long","" },
+ { "-Wno-long-long", "Do not warn about using 'long long' when -pedantic" },
+ { "-Wmain", "Warn about suspicious declarations of main" },
+ { "-Wno-main", "" },
+ { "-Wmissing-braces",
+ "Warn about possibly missing braces around initialisers" },
+ { "-Wno-missing-braces", "" },
+ { "-Wmissing-declarations",
+ "Warn about global funcs without previous declarations"},
+ { "-Wno-missing-declarations", "" },
+ { "-Wmissing-prototypes", "Warn about global funcs without prototypes" },
+ { "-Wno-missing-prototypes", "" },
+ { "-Wmultichar", "Warn about use of multicharacter literals"},
+ { "-Wno-multichar", "" },
+ { "-Wnested-externs", "Warn about externs not at file scope level" },
+ { "-Wno-nested-externs", "" },
+ { "-Wparentheses", "Warn about possible missing parentheses" },
+ { "-Wno-parentheses", "" },
+ { "-Wpointer-arith", "Warn about function pointer arithmetic" },
+ { "-Wno-pointer-arith", "" },
+ { "-Wredundant-decls",
+ "Warn about multiple declarations of the same object" },
+ { "-Wno-redundant-decls", "" },
+ { "-Wsign-compare", "Warn about signed/unsigned comparisons" },
+ { "-Wno-sign-compare", "" },
+ { "-Wstrict-prototypes", "Warn about non-prototyped function decls" },
+ { "-Wno-strict-prototypes", "" },
+ { "-Wtraditional", "Warn about constructs whose meaning change in ANSI C"},
+ { "-Wno-traditional", "" },
+ { "-Wundef", "" },
+ { "-Wno-undef", "" },
+ { "-Wwrite-strings", "Mark strings as 'const char *'"},
+ { "-Wno-write-strings", "" },
};
/* Here is a table, controlled by the tm.h file, listing each -m switch
@@ -895,9 +895,9 @@ documented_lang_options[] =
struct
{
- char * name;
- int value;
- char * description;
+ char * name;
+ int value;
+ char * description;
}
target_switches [] = TARGET_SWITCHES;
@@ -906,13 +906,13 @@ target_switches [] = TARGET_SWITCHES;
#ifdef TARGET_OPTIONS
struct
{
- char * prefix;
- char ** variable;
- char * description;
+ char * prefix;
+ char ** variable;
+ char * description;
}
target_options [] = TARGET_OPTIONS;
#endif
-
+
/* Options controlling warnings */
/* Don't print warning messages. -w. */
@@ -963,7 +963,7 @@ unsigned id_clash_len;
/* Nonzero means warn about any objects definitions whose size is larger
than N bytes. Also want about function definitions whose returned
values are larger than N bytes. The value N is in `larger_than_size'. */
-
+
int warn_larger_than;
unsigned larger_than_size;
@@ -980,21 +980,21 @@ int warn_aggregate_return;
lang_independent_options W_options[] =
{
- {"unused", &warn_unused, 1, "Warn when a variable is unused" },
- {"error", &warnings_are_errors, 1, ""},
- {"shadow", &warn_shadow, 1, "Warn when one local variable shadows another" },
- {"switch", &warn_switch, 1,
- "Warn about enumerated switches missing a specific case" },
- {"aggregate-return", &warn_aggregate_return, 1,
- "Warn about returning structures, unions or arrays" },
- {"cast-align", &warn_cast_align, 1,
- "Warn about pointer casts which increase alignment" },
- {"uninitialized", &warn_uninitialized, 1,
- "Warn about unitialized automatic variables"},
- {"inline", &warn_inline, 1,
- "Warn when an inlined function cannot be inlined"}
+ {"unused", &warn_unused, 1, "Warn when a variable is unused" },
+ {"error", &warnings_are_errors, 1, ""},
+ {"shadow", &warn_shadow, 1, "Warn when one local variable shadows another" },
+ {"switch", &warn_switch, 1,
+ "Warn about enumerated switches missing a specific case" },
+ {"aggregate-return", &warn_aggregate_return, 1,
+ "Warn about returning structures, unions or arrays" },
+ {"cast-align", &warn_cast_align, 1,
+ "Warn about pointer casts which increase alignment" },
+ {"uninitialized", &warn_uninitialized, 1,
+ "Warn about unitialized automatic variables"},
+ {"inline", &warn_inline, 1,
+ "Warn when an inlined function cannot be inlined"}
};
-
+
/* Output files for assembler code (real compiler output)
and debugging dumps. */
@@ -1046,42 +1046,42 @@ get_run_time()
}
#define TIMEVAR(VAR, BODY) \
-do { int otime = get_run_time (); BODY; VAR += get_run_time () - otime; } while (0)
+ do { int otime = get_run_time(); BODY; VAR += get_run_time() - otime; } while (0)
void
print_time (str, total)
- char *str;
- int total;
+char *str;
+int total;
{
- fprintf (stderr,
- "time in %s: %d.%06d\n",
- str, total / 1000000, total % 1000000);
+ fprintf(stderr,
+ "time in %s: %d.%06d\n",
+ str, total / 1000000, total % 1000000);
}
/* Count an error or warning. Return 1 if the message should be printed. */
int
count_error (warningp)
- int warningp;
+int warningp;
{
- if (warningp && inhibit_warnings)
- return 0;
+ if (warningp && inhibit_warnings)
+ return 0;
- if (warningp && !warnings_are_errors)
- warningcount++;
- else
+ if (warningp && !warnings_are_errors)
+ warningcount++;
+ else
{
- static int warning_message = 0;
-
- if (warningp && !warning_message)
- {
- fprintf (stderr, "%s: warnings being treated as errors\n", progname);
- warning_message = 1;
- }
- errorcount++;
+ static int warning_message = 0;
+
+ if (warningp && !warning_message)
+ {
+ fprintf(stderr, "%s: warnings being treated as errors\n", progname);
+ warning_message = 1;
+ }
+ errorcount++;
}
- return 1;
+ return 1;
}
/* Print a fatal error message. NAME is the text.
@@ -1089,19 +1089,19 @@ count_error (warningp)
void
pfatal_with_name (name)
- char *name;
+char *name;
{
- fprintf (stderr, "%s: ", progname);
- perror (name);
- exit (EXIT_FAILURE);
+ fprintf(stderr, "%s: ", progname);
+ perror(name);
+ exit(EXIT_FAILURE);
}
void
fatal_io_error (name)
- char *name;
+char *name;
{
- fprintf (stderr, "%s: %s: I/O error\n", progname, name);
- exit (EXIT_FAILURE);
+ fprintf(stderr, "%s: %s: I/O error\n", progname, name);
+ exit(EXIT_FAILURE);
}
/* Called to give a better error message for a bad insn rather than
@@ -1109,20 +1109,20 @@ fatal_io_error (name)
void
fatal_insn (message, insn)
- char *message;
- rtx insn;
+char *message;
+rtx insn;
{
- error (message);
- debug_rtx (insn);
- if (asm_out_file)
- fflush (asm_out_file);
- if (aux_info_file)
- fflush (aux_info_file);
- if (rtl_dump_file != NULL)
- fflush (rtl_dump_file);
- fflush (stdout);
- fflush (stderr);
- abort ();
+ error(message);
+ debug_rtx(insn);
+ if (asm_out_file)
+ fflush(asm_out_file);
+ if (aux_info_file)
+ fflush(aux_info_file);
+ if (rtl_dump_file != NULL)
+ fflush(rtl_dump_file);
+ fflush(stdout);
+ fflush(stderr);
+ abort();
}
/* Called to give a better error message when we don't have an insn to match
@@ -1131,24 +1131,24 @@ fatal_insn (message, insn)
void
fatal_insn_not_found (insn)
- rtx insn;
+rtx insn;
{
- if (INSN_CODE (insn) < 0)
- fatal_insn ("internal error--unrecognizable insn:", insn);
- else
- fatal_insn ("internal error--insn does not satisfy its constraints:", insn);
+ if (INSN_CODE(insn) < 0)
+ fatal_insn("internal error--unrecognizable insn:", insn);
+ else
+ fatal_insn("internal error--insn does not satisfy its constraints:", insn);
}
/* This is the default decl_printable_name function. */
static char *
decl_name (decl, verbosity)
- tree decl;
- int verbosity ATTRIBUTE_UNUSED;
+tree decl;
+int verbosity ATTRIBUTE_UNUSED;
{
- return IDENTIFIER_POINTER (DECL_NAME (decl));
+ return IDENTIFIER_POINTER(DECL_NAME(decl));
}
-
+
static int need_error_newline;
/* Function of last error message;
@@ -1164,17 +1164,17 @@ static int last_error_tick;
void
announce_function (decl)
- tree decl;
+tree decl;
{
- if (! quiet_flag)
+ if (!quiet_flag)
{
- if (rtl_dump_and_exit)
- fprintf (stderr, "%s ", IDENTIFIER_POINTER (DECL_NAME (decl)));
- else
- fprintf (stderr, " %s", (*decl_printable_name) (decl, 2));
- fflush (stderr);
- need_error_newline = 1;
- last_error_function = current_function_decl;
+ if (rtl_dump_and_exit)
+ fprintf(stderr, "%s ", IDENTIFIER_POINTER(DECL_NAME(decl)));
+ else
+ fprintf(stderr, " %s", (*decl_printable_name) (decl, 2));
+ fflush(stderr);
+ need_error_newline = 1;
+ last_error_function = current_function_decl;
}
}
@@ -1183,27 +1183,27 @@ announce_function (decl)
void
default_print_error_function (file)
- char *file;
+char *file;
{
- if (last_error_function != current_function_decl)
+ if (last_error_function != current_function_decl)
{
- char *kind = "function";
- if (current_function_decl != 0
- && TREE_CODE (TREE_TYPE (current_function_decl)) == METHOD_TYPE)
- kind = "method";
-
- if (file)
- fprintf (stderr, "%s: ", file);
-
- if (current_function_decl == NULL)
- fprintf (stderr, "At top level:\n");
- else
- {
- char *name = (*decl_printable_name) (current_function_decl, 2);
- fprintf (stderr, "In %s `%s':\n", kind, name);
- }
-
- last_error_function = current_function_decl;
+ char *kind = "function";
+ if (current_function_decl != 0
+ && TREE_CODE(TREE_TYPE(current_function_decl)) == METHOD_TYPE)
+ kind = "method";
+
+ if (file)
+ fprintf(stderr, "%s: ", file);
+
+ if (current_function_decl == NULL)
+ fprintf(stderr, "At top level:\n");
+ else
+ {
+ char *name = (*decl_printable_name) (current_function_decl, 2);
+ fprintf(stderr, "In %s `%s':\n", kind, name);
+ }
+
+ last_error_function = current_function_decl;
}
}
@@ -1213,167 +1213,167 @@ default_print_error_function (file)
void (*print_error_function) (char *) = default_print_error_function;
/* Prints out, if necessary, the name of the current function
- that caused an error. Called from all error and warning functions. */
+ that caused an error. Called from all error and warning functions. */
void
report_error_function (file)
- char *file;
+char *file;
{
- struct file_stack *p;
+ struct file_stack *p;
- if (need_error_newline)
+ if (need_error_newline)
{
- fprintf (stderr, "\n");
- need_error_newline = 0;
+ fprintf(stderr, "\n");
+ need_error_newline = 0;
}
- (*print_error_function) (file);
+ (*print_error_function) (file);
- if (input_file_stack && input_file_stack->next != 0
- && input_file_stack_tick != last_error_tick
- && file == input_filename)
+ if (input_file_stack && input_file_stack->next != 0
+ && input_file_stack_tick != last_error_tick
+ && file == input_filename)
{
- fprintf (stderr, "In file included");
- for (p = input_file_stack->next; p; p = p->next)
- {
- fprintf (stderr, " from %s:%d", p->name, p->line);
- if (p->next)
- fprintf (stderr, ",\n ");
- }
- fprintf (stderr, ":\n");
- last_error_tick = input_file_stack_tick;
+ fprintf(stderr, "In file included");
+ for (p = input_file_stack->next; p; p = p->next)
+ {
+ fprintf(stderr, " from %s:%d", p->name, p->line);
+ if (p->next)
+ fprintf(stderr, ",\n ");
+ }
+ fprintf(stderr, ":\n");
+ last_error_tick = input_file_stack_tick;
}
}
-
+
/* Print a message. */
static void
vmessage (prefix, s, ap)
- char *prefix;
- char *s;
- va_list ap;
+char *prefix;
+char *s;
+va_list ap;
{
- if (prefix)
- fprintf (stderr, "%s: ", prefix);
+ if (prefix)
+ fprintf(stderr, "%s: ", prefix);
- vfprintf (stderr, s, ap);
+ vfprintf(stderr, s, ap);
}
/* Print a message relevant to line LINE of file FILE. */
static void
v_message_with_file_and_line (file, line, prefix, s, ap)
- char *file;
- int line;
- char *prefix;
- char *s;
- va_list ap;
+char *file;
+int line;
+char *prefix;
+char *s;
+va_list ap;
{
- if (file)
- fprintf (stderr, "%s:%d: ", file, line);
- else
- fprintf (stderr, "%s: ", progname);
+ if (file)
+ fprintf(stderr, "%s:%d: ", file, line);
+ else
+ fprintf(stderr, "%s: ", progname);
- vmessage (prefix, s, ap);
- fputc ('\n', stderr);
+ vmessage(prefix, s, ap);
+ fputc('\n', stderr);
}
/* Print a message relevant to the given DECL. */
static void
v_message_with_decl (decl, prefix, s, ap)
- tree decl;
- char *prefix;
- char *s;
- va_list ap;
+tree decl;
+char *prefix;
+char *s;
+va_list ap;
{
- char *p;
+ char *p;
- fprintf (stderr, "%s:%d: ",
- DECL_SOURCE_FILE (decl), DECL_SOURCE_LINE (decl));
+ fprintf(stderr, "%s:%d: ",
+ DECL_SOURCE_FILE(decl), DECL_SOURCE_LINE(decl));
- if (prefix)
- fprintf (stderr, "%s: ", prefix);
+ if (prefix)
+ fprintf(stderr, "%s: ", prefix);
- /* Do magic to get around lack of varargs support for insertion
- of arguments into existing list. We know that the decl is first;
- we ass_u_me that it will be printed with "%s". */
+ /* Do magic to get around lack of varargs support for insertion
+ of arguments into existing list. We know that the decl is first;
+ we ass_u_me that it will be printed with "%s". */
- for (p = s; *p; ++p)
+ for (p = s; *p; ++p)
{
- if (*p == '%')
- {
- if (*(p + 1) == '%')
- ++p;
- else
- break;
- }
+ if (*p == '%')
+ {
+ if (*(p + 1) == '%')
+ ++p;
+ else
+ break;
+ }
}
- if (p > s) /* Print the left-hand substring. */
+ if (p > s) /* Print the left-hand substring. */
{
- char fmt[sizeof "%.255s"];
- long width = p - s;
-
- if (width > 255L) width = 255L; /* arbitrary */
- sprintf (fmt, "%%.%lds", width);
- fprintf (stderr, fmt, s);
+ char fmt[sizeof "%.255s"];
+ long width = p - s;
+
+ if (width > 255L) width = 255L; /* arbitrary */
+ sprintf(fmt, "%%.%lds", width);
+ fprintf(stderr, fmt, s);
}
- if (*p == '%') /* Print the name. */
+ if (*p == '%') /* Print the name. */
{
- char *n = (DECL_NAME (decl)
- ? (*decl_printable_name) (decl, 2)
- : "((anonymous))");
- fputs (n, stderr);
- while (*p)
- {
- ++p;
- if (ISALPHA (*(p - 1) & 0xFF))
- break;
- }
+ char *n = (DECL_NAME(decl)
+ ? (*decl_printable_name) (decl, 2)
+ : "((anonymous))");
+ fputs(n, stderr);
+ while (*p)
+ {
+ ++p;
+ if (ISALPHA(*(p - 1) & 0xFF))
+ break;
+ }
}
- if (*p) /* Print the rest of the message. */
- vmessage ((char *)NULL, p, ap);
+ if (*p) /* Print the rest of the message. */
+ vmessage((char *)NULL, p, ap);
- fputc ('\n', stderr);
+ fputc('\n', stderr);
}
/* Figure file and line of the given INSN. */
static void
file_and_line_for_asm (insn, pfile, pline)
- rtx insn;
- char **pfile;
- int *pline;
+rtx insn;
+char **pfile;
+int *pline;
{
- rtx body = PATTERN (insn);
- rtx asmop;
-
- /* Find the (or one of the) ASM_OPERANDS in the insn. */
- if (GET_CODE (body) == SET && GET_CODE (SET_SRC (body)) == ASM_OPERANDS)
- asmop = SET_SRC (body);
- else if (GET_CODE (body) == ASM_OPERANDS)
- asmop = body;
- else if (GET_CODE (body) == PARALLEL
- && GET_CODE (XVECEXP (body, 0, 0)) == SET)
- asmop = SET_SRC (XVECEXP (body, 0, 0));
- else if (GET_CODE (body) == PARALLEL
- && GET_CODE (XVECEXP (body, 0, 0)) == ASM_OPERANDS)
- asmop = XVECEXP (body, 0, 0);
- else
- asmop = NULL;
-
- if (asmop)
+ rtx body = PATTERN(insn);
+ rtx asmop;
+
+ /* Find the (or one of the) ASM_OPERANDS in the insn. */
+ if (GET_CODE(body) == SET && GET_CODE(SET_SRC(body)) == ASM_OPERANDS)
+ asmop = SET_SRC(body);
+ else if (GET_CODE(body) == ASM_OPERANDS)
+ asmop = body;
+ else if (GET_CODE(body) == PARALLEL
+ && GET_CODE(XVECEXP(body, 0, 0)) == SET)
+ asmop = SET_SRC(XVECEXP(body, 0, 0));
+ else if (GET_CODE(body) == PARALLEL
+ && GET_CODE(XVECEXP(body, 0, 0)) == ASM_OPERANDS)
+ asmop = XVECEXP(body, 0, 0);
+ else
+ asmop = NULL;
+
+ if (asmop)
{
- *pfile = ASM_OPERANDS_SOURCE_FILE (asmop);
- *pline = ASM_OPERANDS_SOURCE_LINE (asmop);
+ *pfile = ASM_OPERANDS_SOURCE_FILE(asmop);
+ *pline = ASM_OPERANDS_SOURCE_LINE(asmop);
}
- else
+ else
{
- *pfile = input_filename;
- *pline = lineno;
+ *pfile = input_filename;
+ *pline = lineno;
}
}
@@ -1381,26 +1381,26 @@ file_and_line_for_asm (insn, pfile, pline)
static void
v_error_with_file_and_line (file, line, s, ap)
- char *file;
- int line;
- char *s;
- va_list ap;
+char *file;
+int line;
+char *s;
+va_list ap;
{
- count_error (0);
- report_error_function (file);
- v_message_with_file_and_line (file, line, (char *)NULL, s, ap);
+ count_error(0);
+ report_error_function(file);
+ v_message_with_file_and_line(file, line, (char *)NULL, s, ap);
}
void
-error_with_file_and_line (char *file, int line, char *s, ...)
+error_with_file_and_line(char *file, int line, char *s, ...)
{
- va_list ap;
+ va_list ap;
- va_start (ap, s);
+ va_start(ap, s);
- v_error_with_file_and_line (file, line, s, ap);
- va_end (ap);
+ v_error_with_file_and_line(file, line, s, ap);
+ va_end(ap);
}
/* Report an error at the declaration DECL.
@@ -1409,25 +1409,25 @@ error_with_file_and_line (char *file, int line, char *s, ...)
static void
v_error_with_decl (decl, s, ap)
- tree decl;
- char *s;
- va_list ap;
+tree decl;
+char *s;
+va_list ap;
{
- count_error (0);
- report_error_function (DECL_SOURCE_FILE (decl));
- v_message_with_decl (decl, (char *)NULL, s, ap);
+ count_error(0);
+ report_error_function(DECL_SOURCE_FILE(decl));
+ v_message_with_decl(decl, (char *)NULL, s, ap);
}
void
-error_with_decl (tree decl, char *s, ...)
+error_with_decl(tree decl, char *s, ...)
{
- va_list ap;
+ va_list ap;
- va_start (ap, s);
+ va_start(ap, s);
- v_error_with_decl (decl, s, ap);
- va_end (ap);
+ v_error_with_decl(decl, s, ap);
+ va_end(ap);
}
/* Report an error at the line number of the insn INSN.
@@ -1436,102 +1436,102 @@ error_with_decl (tree decl, char *s, ...)
static void
v_error_for_asm (insn, s, ap)
- rtx insn;
- char *s;
- va_list ap;
+rtx insn;
+char *s;
+va_list ap;
{
- char *file;
- int line;
+ char *file;
+ int line;
- count_error (0);
- file_and_line_for_asm (insn, &file, &line);
- report_error_function (file);
- v_message_with_file_and_line (file, line, (char *)NULL, s, ap);
+ count_error(0);
+ file_and_line_for_asm(insn, &file, &line);
+ report_error_function(file);
+ v_message_with_file_and_line(file, line, (char *)NULL, s, ap);
}
void
-error_for_asm (rtx insn, char *s, ...)
+error_for_asm(rtx insn, char *s, ...)
{
- va_list ap;
+ va_list ap;
- va_start (ap, s);
+ va_start(ap, s);
- v_error_for_asm (insn, s, ap);
- va_end (ap);
+ v_error_for_asm(insn, s, ap);
+ va_end(ap);
}
/* Report an error at the current line number. */
static void
verror (s, ap)
- char *s;
- va_list ap;
+char *s;
+va_list ap;
{
- v_error_with_file_and_line (input_filename, lineno, s, ap);
+ v_error_with_file_and_line(input_filename, lineno, s, ap);
}
void
-error (char *s, ...)
+error(char *s, ...)
{
- va_list ap;
+ va_list ap;
- va_start (ap, s);
+ va_start(ap, s);
- verror (s, ap);
- va_end (ap);
+ verror(s, ap);
+ va_end(ap);
}
/* Report a fatal error at the current line number. */
static void
vfatal (s, ap)
- char *s;
- va_list ap;
+char *s;
+va_list ap;
{
- verror (s, ap);
- exit (EXIT_FAILURE);
+ verror(s, ap);
+ exit(EXIT_FAILURE);
}
void
-fatal (char *s, ...)
+fatal(char *s, ...)
{
- va_list ap;
+ va_list ap;
- va_start (ap, s);
+ va_start(ap, s);
- vfatal (s, ap);
- va_end (ap);
+ vfatal(s, ap);
+ va_end(ap);
}
/* Report a warning at line LINE of file FILE. */
static void
v_warning_with_file_and_line (file, line, s, ap)
- char *file;
- int line;
- char *s;
- va_list ap;
+char *file;
+int line;
+char *s;
+va_list ap;
{
- if (count_error (1))
+ if (count_error(1))
{
- report_error_function (file);
- v_message_with_file_and_line (file, line, "warning", s, ap);
+ report_error_function(file);
+ v_message_with_file_and_line(file, line, "warning", s, ap);
}
}
void
-warning_with_file_and_line (char *file, int line, char *s, ...)
+warning_with_file_and_line(char *file, int line, char *s, ...)
{
- va_list ap;
+ va_list ap;
- va_start (ap, s);
+ va_start(ap, s);
- v_warning_with_file_and_line (file, line, s, ap);
- va_end (ap);
+ v_warning_with_file_and_line(file, line, s, ap);
+ va_end(ap);
}
/* Report a warning at the declaration DECL.
@@ -1540,27 +1540,27 @@ warning_with_file_and_line (char *file, int line, char *s, ...)
static void
v_warning_with_decl (decl, s, ap)
- tree decl;
- char *s;
- va_list ap;
+tree decl;
+char *s;
+va_list ap;
{
- if (count_error (1))
+ if (count_error(1))
{
- report_error_function (DECL_SOURCE_FILE (decl));
- v_message_with_decl (decl, "warning", s, ap);
+ report_error_function(DECL_SOURCE_FILE(decl));
+ v_message_with_decl(decl, "warning", s, ap);
}
}
void
-warning_with_decl (tree decl, char *s, ...)
+warning_with_decl(tree decl, char *s, ...)
{
- va_list ap;
+ va_list ap;
- va_start (ap, s);
+ va_start(ap, s);
- v_warning_with_decl (decl, s, ap);
- va_end (ap);
+ v_warning_with_decl(decl, s, ap);
+ va_end(ap);
}
/* Report a warning at the line number of the insn INSN.
@@ -1569,53 +1569,53 @@ warning_with_decl (tree decl, char *s, ...)
static void
v_warning_for_asm (insn, s, ap)
- rtx insn;
- char *s;
- va_list ap;
+rtx insn;
+char *s;
+va_list ap;
{
- if (count_error (1))
+ if (count_error(1))
{
- char *file;
- int line;
+ char *file;
+ int line;
- file_and_line_for_asm (insn, &file, &line);
- report_error_function (file);
- v_message_with_file_and_line (file, line, "warning", s, ap);
+ file_and_line_for_asm(insn, &file, &line);
+ report_error_function(file);
+ v_message_with_file_and_line(file, line, "warning", s, ap);
}
}
void
-warning_for_asm (rtx insn, char *s, ...)
+warning_for_asm(rtx insn, char *s, ...)
{
- va_list ap;
+ va_list ap;
- va_start (ap, s);
+ va_start(ap, s);
- v_warning_for_asm (insn, s, ap);
- va_end (ap);
+ v_warning_for_asm(insn, s, ap);
+ va_end(ap);
}
/* Report a warning at the current line number. */
static void
vwarning (s, ap)
- char *s;
- va_list ap;
+char *s;
+va_list ap;
{
- v_warning_with_file_and_line (input_filename, lineno, s, ap);
+ v_warning_with_file_and_line(input_filename, lineno, s, ap);
}
void
-warning (char *s, ...)
+warning(char *s, ...)
{
- va_list ap;
+ va_list ap;
- va_start (ap, s);
+ va_start(ap, s);
- vwarning (s, ap);
- va_end (ap);
+ vwarning(s, ap);
+ va_end(ap);
}
/* These functions issue either warnings or errors depending on
@@ -1623,142 +1623,142 @@ warning (char *s, ...)
static void
vpedwarn (s, ap)
- char *s;
- va_list ap;
+char *s;
+va_list ap;
{
- if (flag_pedantic_errors)
- verror (s, ap);
- else
- vwarning (s, ap);
+ if (flag_pedantic_errors)
+ verror(s, ap);
+ else
+ vwarning(s, ap);
}
void
-pedwarn (char *s, ...)
+pedwarn(char *s, ...)
{
- va_list ap;
+ va_list ap;
- va_start (ap, s);
+ va_start(ap, s);
- vpedwarn (s, ap);
- va_end (ap);
+ vpedwarn(s, ap);
+ va_end(ap);
}
static void
v_pedwarn_with_decl (decl, s, ap)
- tree decl;
- char *s;
- va_list ap;
+tree decl;
+char *s;
+va_list ap;
{
- /* We don't want -pedantic-errors to cause the compilation to fail from
- "errors" in system header files. Sometimes fixincludes can't fix what's
- broken (eg: unsigned char bitfields - fixing it may change the alignment
- which will cause programs to mysteriously fail because the C library
- or kernel uses the original layout). There's no point in issuing a
- warning either, it's just unnecessary noise. */
-
- if (! DECL_IN_SYSTEM_HEADER (decl))
+ /* We don't want -pedantic-errors to cause the compilation to fail from
+ "errors" in system header files. Sometimes fixincludes can't fix what's
+ broken (eg: unsigned char bitfields - fixing it may change the alignment
+ which will cause programs to mysteriously fail because the C library
+ or kernel uses the original layout). There's no point in issuing a
+ warning either, it's just unnecessary noise. */
+
+ if (!DECL_IN_SYSTEM_HEADER(decl))
{
- if (flag_pedantic_errors)
- v_error_with_decl (decl, s, ap);
- else
- v_warning_with_decl (decl, s, ap);
+ if (flag_pedantic_errors)
+ v_error_with_decl(decl, s, ap);
+ else
+ v_warning_with_decl(decl, s, ap);
}
}
void
-pedwarn_with_decl (tree decl, char *s, ...)
+pedwarn_with_decl(tree decl, char *s, ...)
{
- va_list ap;
+ va_list ap;
- va_start (ap, s);
+ va_start(ap, s);
- v_pedwarn_with_decl (decl, s, ap);
- va_end (ap);
+ v_pedwarn_with_decl(decl, s, ap);
+ va_end(ap);
}
static void
v_pedwarn_with_file_and_line (file, line, s, ap)
- char *file;
- int line;
- char *s;
- va_list ap;
+char *file;
+int line;
+char *s;
+va_list ap;
{
- if (flag_pedantic_errors)
- v_error_with_file_and_line (file, line, s, ap);
- else
- v_warning_with_file_and_line (file, line, s, ap);
+ if (flag_pedantic_errors)
+ v_error_with_file_and_line(file, line, s, ap);
+ else
+ v_warning_with_file_and_line(file, line, s, ap);
}
void
-pedwarn_with_file_and_line (char *file, int line, char *s, ...)
+pedwarn_with_file_and_line(char *file, int line, char *s, ...)
{
- va_list ap;
+ va_list ap;
- va_start (ap, s);
+ va_start(ap, s);
- v_pedwarn_with_file_and_line (file, line, s, ap);
- va_end (ap);
+ v_pedwarn_with_file_and_line(file, line, s, ap);
+ va_end(ap);
}
/* Apologize for not implementing some feature. */
static void
vsorry (s, ap)
- char *s;
- va_list ap;
+char *s;
+va_list ap;
{
- sorrycount++;
- if (input_filename)
- fprintf (stderr, "%s:%d: ", input_filename, lineno);
- else
- fprintf (stderr, "%s: ", progname);
- vmessage ("sorry, not implemented", s, ap);
- fputc ('\n', stderr);
+ sorrycount++;
+ if (input_filename)
+ fprintf(stderr, "%s:%d: ", input_filename, lineno);
+ else
+ fprintf(stderr, "%s: ", progname);
+ vmessage("sorry, not implemented", s, ap);
+ fputc('\n', stderr);
}
void
-sorry (char *s, ...)
+sorry(char *s, ...)
{
- va_list ap;
+ va_list ap;
- va_start (ap, s);
+ va_start(ap, s);
- vsorry (s, ap);
- va_end (ap);
+ vsorry(s, ap);
+ va_end(ap);
}
/* Apologize for not implementing some feature, then quit. */
static void
v_really_sorry (s, ap)
- char *s;
- va_list ap;
+char *s;
+va_list ap;
{
- sorrycount++;
- if (input_filename)
- fprintf (stderr, "%s:%d: ", input_filename, lineno);
- else
- fprintf (stderr, "%s: ", progname);
- vmessage ("sorry, not implemented", s, ap);
- fatal (" (fatal)\n");
+ sorrycount++;
+ if (input_filename)
+ fprintf(stderr, "%s:%d: ", input_filename, lineno);
+ else
+ fprintf(stderr, "%s: ", progname);
+ vmessage("sorry, not implemented", s, ap);
+ fatal(" (fatal)\n");
}
void
-really_sorry (char *s, ...)
+really_sorry(char *s, ...)
{
- va_list ap;
+ va_list ap;
- va_start (ap, s);
+ va_start(ap, s);
- v_really_sorry (s, ap);
- va_end (ap);
+ v_really_sorry(s, ap);
+ va_end(ap);
}
-
+
/* More 'friendly' abort that prints the line and file.
config.h can #define abort fancy_abort if you like that sort of thing.
@@ -1768,18 +1768,18 @@ really_sorry (char *s, ...)
-- RMS */
void
-fancy_abort ()
+fancy_abort()
{
- fatal ("internal gcc abort");
+ fatal("internal gcc abort");
}
/* This calls abort and is used to avoid problems when abort if a macro.
It is used when we need to pass the address of abort. */
void
-do_abort ()
+do_abort()
{
- abort ();
+ abort();
}
/* When `malloc.c' is compiled with `rcheck' defined,
@@ -1787,81 +1787,81 @@ do_abort ()
void
botch (s)
- char * s ATTRIBUTE_UNUSED;
+char * s ATTRIBUTE_UNUSED;
{
- abort ();
+ abort();
}
/* Same as `malloc' but report error if no memory available. */
void *
xmalloc (size)
- size_t size;
+size_t size;
{
- register void *value;
+ register void *value;
- if (size == 0)
- size = 1;
+ if (size == 0)
+ size = 1;
- value = malloc (size);
- if (value == 0)
- fatal ("virtual memory exhausted");
- return value;
+ value = malloc(size);
+ if (value == 0)
+ fatal("virtual memory exhausted");
+ return value;
}
/* Same as `calloc' but report error if no memory available. */
void *
xcalloc (size1, size2)
- size_t size1, size2;
+size_t size1, size2;
{
- register void *value;
+ register void *value;
- if (size1 == 0 || size2 == 0)
- size1 = size2 = 1;
+ if (size1 == 0 || size2 == 0)
+ size1 = size2 = 1;
- value = calloc (size1, size2);
- if (value == 0)
- fatal ("virtual memory exhausted");
- return value;
+ value = calloc(size1, size2);
+ if (value == 0)
+ fatal("virtual memory exhausted");
+ return value;
}
-/* Same as `realloc' but report error if no memory available.
+/* Same as `realloc' but report error if no memory available.
Also handle null PTR even if the vendor realloc gets it wrong. */
void *
xrealloc (ptr, size)
- void *ptr;
- size_t size;
+void *ptr;
+size_t size;
{
- register void *result;
+ register void *result;
- if (size == 0)
- size = 1;
+ if (size == 0)
+ size = 1;
- result = (ptr ? realloc (ptr, size) : malloc (size));
+ result = (ptr ? realloc(ptr, size) : malloc(size));
- if (!result)
- fatal ("virtual memory exhausted");
+ if (!result)
+ fatal("virtual memory exhausted");
- return result;
+ return result;
}
/* Same as `strdup' but report error if no memory available. */
char *
xstrdup (s)
- register const char *s;
+register const char *s;
{
- register char *result = (char *) malloc (strlen (s) + 1);
+ register char *result = (char *) malloc(strlen(s) + 1);
- if (! result)
- fatal ("virtual memory exhausted");
- strcpy (result, s);
- return result;
+ if (!result)
+ fatal("virtual memory exhausted");
+ strcpy(result, s);
+ return result;
}
-
+
/* Return the logarithm of X, base 2, considering X unsigned,
if X is a power of 2. Otherwise, returns -1.
@@ -1869,15 +1869,15 @@ xstrdup (s)
int
exact_log2_wide (x)
- register HOST_WIDE_UINT x;
+register HOST_WIDE_UINT x;
{
- register int log = 0;
- /* Test for 0 or a power of 2. */
- if (x == 0 || x != (x & -x))
- return -1;
- while ((x >>= 1) != 0)
- log++;
- return log;
+ register int log = 0;
+ /* Test for 0 or a power of 2. */
+ if (x == 0 || x != (x & -x))
+ return -1;
+ while ((x >>= 1) != 0)
+ log++;
+ return log;
}
/* Given X, an unsigned number, return the largest int Y such that 2**Y <= X.
@@ -1887,13 +1887,13 @@ exact_log2_wide (x)
int
floor_log2_wide (x)
- register HOST_WIDE_UINT x;
+register HOST_WIDE_UINT x;
{
- register int log = -1;
- while (x != 0)
- log++,
- x >>= 1;
- return log;
+ register int log = -1;
+ while (x != 0)
+ log++,
+ x >>= 1;
+ return log;
}
static int float_handler_set;
@@ -1904,17 +1904,17 @@ jmp_buf float_handler;
static void
float_signal (signo)
- /* If this is missing, some compilers complain. */
- int signo ATTRIBUTE_UNUSED;
+/* If this is missing, some compilers complain. */
+int signo ATTRIBUTE_UNUSED;
{
- if (float_handled == 0)
- abort ();
+ if (float_handled == 0)
+ abort();
#if defined (USG) || defined (hpux)
- signal (SIGFPE, float_signal); /* re-enable the signal catcher */
+ signal(SIGFPE, float_signal); /* re-enable the signal catcher */
#endif
- float_handled = 0;
- signal (SIGFPE, float_signal);
- longjmp (float_handler, 1);
+ float_handled = 0;
+ signal(SIGFPE, float_signal);
+ longjmp(float_handler, 1);
}
/* Specify where to longjmp to when a floating arithmetic error happens.
@@ -1922,16 +1922,16 @@ float_signal (signo)
void
set_float_handler (handler)
- jmp_buf handler;
+jmp_buf handler;
{
- float_handled = (handler != 0);
- if (handler)
- copy_memory ((char *) handler, (char *) float_handler, sizeof (float_handler));
+ float_handled = (handler != 0);
+ if (handler)
+ copy_memory((char *) handler, (char *) float_handler, sizeof (float_handler));
- if (float_handled && ! float_handler_set)
+ if (float_handled && !float_handler_set)
{
- signal (SIGFPE, float_signal);
- float_handler_set = 1;
+ signal(SIGFPE, float_signal);
+ float_handler_set = 1;
}
}
@@ -1941,17 +1941,17 @@ set_float_handler (handler)
int
push_float_handler (handler, old_handler)
- jmp_buf handler, old_handler;
+jmp_buf handler, old_handler;
{
- int was_handled = float_handled;
+ int was_handled = float_handled;
- float_handled = 1;
- if (was_handled)
- memcpy ((char *) old_handler, (char *) float_handler,
- sizeof (float_handler));
+ float_handled = 1;
+ if (was_handled)
+ memcpy((char *) old_handler, (char *) float_handler,
+ sizeof (float_handler));
- memcpy ((char *) float_handler, (char *) handler, sizeof (float_handler));
- return was_handled;
+ memcpy((char *) float_handler, (char *) handler, sizeof (float_handler));
+ return was_handled;
}
/* Restore the previous specification of whether and where to longjmp to
@@ -1959,22 +1959,22 @@ push_float_handler (handler, old_handler)
void
pop_float_handler (handled, handler)
- int handled;
- jmp_buf handler;
+int handled;
+jmp_buf handler;
{
- float_handled = handled;
- if (handled)
- copy_memory ((char *) handler, (char *) float_handler, sizeof (float_handler));
+ float_handled = handled;
+ if (handled)
+ copy_memory((char *) handler, (char *) float_handler, sizeof (float_handler));
}
/* Handler for SIGPIPE. */
static void
pipe_closed (signo)
- /* If this is missing, some compilers complain. */
- int signo ATTRIBUTE_UNUSED;
+/* If this is missing, some compilers complain. */
+int signo ATTRIBUTE_UNUSED;
{
- fatal ("output pipe has been closed");
+ fatal("output pipe has been closed");
}
/* Strip off a legitimate source ending from the input string NAME of
@@ -1984,17 +1984,17 @@ pipe_closed (signo)
void
strip_off_ending (name, len)
- char *name;
- int len;
+char *name;
+int len;
{
- int i;
- for (i = 2; i < 6 && len > i; i++)
+ int i;
+ for (i = 2; i < 6 && len > i; i++)
{
- if (name[len - i] == '.')
- {
- name[len - i] = '\0';
- break;
- }
+ if (name[len - i] == '.')
+ {
+ name[len - i] = '\0';
+ break;
+ }
}
}
@@ -2002,22 +2002,22 @@ strip_off_ending (name, len)
void
output_quoted_string (asm_file, string)
- FILE *asm_file;
- char *string;
+FILE *asm_file;
+char *string;
{
#ifdef OUTPUT_QUOTED_STRING
- OUTPUT_QUOTED_STRING (asm_file, string);
+ OUTPUT_QUOTED_STRING(asm_file, string);
#else
- char c;
+ char c;
- putc ('\"', asm_file);
- while ((c = *string++) != 0)
+ putc('\"', asm_file);
+ while ((c = *string++) != 0)
{
- if (c == '\"' || c == '\\')
- putc ('\\', asm_file);
- putc (c, asm_file);
+ if (c == '\"' || c == '\\')
+ putc('\\', asm_file);
+ putc(c, asm_file);
}
- putc ('\"', asm_file);
+ putc('\"', asm_file);
#endif
}
@@ -2025,33 +2025,33 @@ output_quoted_string (asm_file, string)
void
output_file_directive (asm_file, input_name)
- FILE *asm_file;
- char *input_name;
+FILE *asm_file;
+char *input_name;
{
- int len = strlen (input_name);
- char *na = input_name + len;
+ int len = strlen(input_name);
+ char *na = input_name + len;
- /* NA gets INPUT_NAME sans directory names. */
- while (na > input_name)
+ /* NA gets INPUT_NAME sans directory names. */
+ while (na > input_name)
{
- if (na[-1] == '/')
- break;
+ if (na[-1] == '/')
+ break;
#ifdef DIR_SEPARATOR
- if (na[-1] == DIR_SEPARATOR)
- break;
+ if (na[-1] == DIR_SEPARATOR)
+ break;
#endif
- na--;
+ na--;
}
#ifdef ASM_OUTPUT_MAIN_SOURCE_FILENAME
- ASM_OUTPUT_MAIN_SOURCE_FILENAME (asm_file, na);
+ ASM_OUTPUT_MAIN_SOURCE_FILENAME(asm_file, na);
#else
#ifdef ASM_OUTPUT_SOURCE_FILENAME
- ASM_OUTPUT_SOURCE_FILENAME (asm_file, na);
+ ASM_OUTPUT_SOURCE_FILENAME(asm_file, na);
#else
- fprintf (asm_file, "\t.file\t");
- output_quoted_string (asm_file, na);
- fputc ('\n', asm_file);
+ fprintf(asm_file, "\t.file\t");
+ output_quoted_string(asm_file, na);
+ fputc('\n', asm_file);
#endif
#endif
}
@@ -2059,92 +2059,92 @@ output_file_directive (asm_file, input_name)
/* Routine to open a dump file. */
static void
open_dump_file (suffix, function_name)
- char *suffix;
- char *function_name;
+char *suffix;
+char *function_name;
{
- char *dumpname;
-
- TIMEVAR
- (dump_time,
- {
- dumpname = (char *) xmalloc (strlen (dump_base_name) + strlen (suffix) + 1);
-
- if (rtl_dump_file != NULL)
- fclose (rtl_dump_file);
-
- strcpy (dumpname, dump_base_name);
- strcat (dumpname, suffix);
-
- rtl_dump_file = fopen (dumpname, "a");
-
- if (rtl_dump_file == NULL)
- pfatal_with_name (dumpname);
-
- free (dumpname);
-
- if (function_name)
- fprintf (rtl_dump_file, "\n;; Function %s\n\n", function_name);
- });
-
- return;
+ char *dumpname;
+
+ TIMEVAR
+ (dump_time,
+ {
+ dumpname = (char *) xmalloc(strlen(dump_base_name) + strlen(suffix) + 1);
+
+ if (rtl_dump_file != NULL)
+ fclose(rtl_dump_file);
+
+ strcpy(dumpname, dump_base_name);
+ strcat(dumpname, suffix);
+
+ rtl_dump_file = fopen(dumpname, "a");
+
+ if (rtl_dump_file == NULL)
+ pfatal_with_name(dumpname);
+
+ free(dumpname);
+
+ if (function_name)
+ fprintf(rtl_dump_file, "\n;; Function %s\n\n", function_name);
+ });
+
+ return;
}
/* Routine to close a dump file. */
static void
close_dump_file (func, insns)
- void (*func) (FILE *, rtx);
- rtx insns;
+void (*func) (FILE *, rtx);
+rtx insns;
{
- TIMEVAR
- (dump_time,
- {
- if (func)
- func (rtl_dump_file, insns);
-
- fflush (rtl_dump_file);
- fclose (rtl_dump_file);
-
- rtl_dump_file = NULL;
- });
-
- return;
+ TIMEVAR
+ (dump_time,
+ {
+ if (func)
+ func(rtl_dump_file, insns);
+
+ fflush(rtl_dump_file);
+ fclose(rtl_dump_file);
+
+ rtl_dump_file = NULL;
+ });
+
+ return;
}
/* Routine to dump rtl into a file. */
static void
dump_rtl (suffix, decl, func, insns)
- char *suffix;
- tree decl;
- void (*func) (FILE *, rtx);
- rtx insns;
+char *suffix;
+tree decl;
+void (*func) (FILE *, rtx);
+rtx insns;
{
- open_dump_file (suffix, decl_printable_name (decl, 2));
- close_dump_file (func, insns);
+ open_dump_file(suffix, decl_printable_name(decl, 2));
+ close_dump_file(func, insns);
}
/* Routine to empty a dump file. */
static void
clean_dump_file (suffix)
- char *suffix;
+char *suffix;
{
- char *dumpname;
+ char *dumpname;
+
+ dumpname = (char *) xmalloc(strlen(dump_base_name) + strlen(suffix) + 1);
+
+ strcpy(dumpname, dump_base_name);
+ strcat(dumpname, suffix);
- dumpname = (char *) xmalloc (strlen (dump_base_name) + strlen (suffix) + 1);
+ rtl_dump_file = fopen(dumpname, "w");
- strcpy (dumpname, dump_base_name);
- strcat (dumpname, suffix);
-
- rtl_dump_file = fopen (dumpname, "w");
+ if (rtl_dump_file == NULL)
+ pfatal_with_name(dumpname);
- if (rtl_dump_file == NULL)
- pfatal_with_name (dumpname);
+ free(dumpname);
- free (dumpname);
+ fclose(rtl_dump_file);
+ rtl_dump_file = NULL;
- fclose (rtl_dump_file);
- rtl_dump_file = NULL;
-
- return;
+ return;
}
@@ -2153,622 +2153,622 @@ clean_dump_file (suffix)
static void
compile_file (name)
- char *name;
+char *name;
{
- tree globals;
- int start_time;
-
- int name_specified = name != 0;
-
- if (dump_base_name == 0)
- dump_base_name = name ? name : "gccdump";
-
- parse_time = 0;
- varconst_time = 0;
- integration_time = 0;
- jump_time = 0;
- cse_time = 0;
- gcse_time = 0;
- loop_time = 0;
- cse2_time = 0;
- flow_time = 0;
- combine_time = 0;
- regmove_time = 0;
- sched_time = 0;
- local_alloc_time = 0;
- global_alloc_time = 0;
- sched2_time = 0;
- shorten_branch_time = 0;
- stack_reg_time = 0;
- final_time = 0;
- symout_time = 0;
- dump_time = 0;
-
- /* Initialize data in various passes. */
-
- init_obstacks ();
- init_tree_codes ();
- name = init_parse (name);
- init_rtl ();
- init_emit_once (debug_info_level == DINFO_LEVEL_NORMAL
- || debug_info_level == DINFO_LEVEL_VERBOSE);
- init_regs ();
- init_decl_processing ();
- init_optabs ();
- init_stmt ();
- init_expmed ();
- init_expr_once ();
- init_loop ();
- init_reload ();
- init_alias_once ();
-
- if (flag_caller_saves)
- init_caller_save ();
-
- /* If auxiliary info generation is desired, open the output file.
- This goes in the same directory as the source file--unlike
- all the other output files. */
- if (flag_gen_aux_info)
+ tree globals;
+ int start_time;
+
+ int name_specified = name != 0;
+
+ if (dump_base_name == 0)
+ dump_base_name = name ? name : "gccdump";
+
+ parse_time = 0;
+ varconst_time = 0;
+ integration_time = 0;
+ jump_time = 0;
+ cse_time = 0;
+ gcse_time = 0;
+ loop_time = 0;
+ cse2_time = 0;
+ flow_time = 0;
+ combine_time = 0;
+ regmove_time = 0;
+ sched_time = 0;
+ local_alloc_time = 0;
+ global_alloc_time = 0;
+ sched2_time = 0;
+ shorten_branch_time = 0;
+ stack_reg_time = 0;
+ final_time = 0;
+ symout_time = 0;
+ dump_time = 0;
+
+ /* Initialize data in various passes. */
+
+ init_obstacks();
+ init_tree_codes();
+ name = init_parse(name);
+ init_rtl();
+ init_emit_once(debug_info_level == DINFO_LEVEL_NORMAL
+ || debug_info_level == DINFO_LEVEL_VERBOSE);
+ init_regs();
+ init_decl_processing();
+ init_optabs();
+ init_stmt();
+ init_expmed();
+ init_expr_once();
+ init_loop();
+ init_reload();
+ init_alias_once();
+
+ if (flag_caller_saves)
+ init_caller_save();
+
+ /* If auxiliary info generation is desired, open the output file.
+ This goes in the same directory as the source file--unlike
+ all the other output files. */
+ if (flag_gen_aux_info)
{
- aux_info_file = fopen (aux_info_file_name, "w");
- if (aux_info_file == 0)
- pfatal_with_name (aux_info_file_name);
+ aux_info_file = fopen(aux_info_file_name, "w");
+ if (aux_info_file == 0)
+ pfatal_with_name(aux_info_file_name);
}
- /* CYGNUS LOCAL v850/law */
- if (flag_gen_offset_info)
+ /* CYGNUS LOCAL v850/law */
+ if (flag_gen_offset_info)
{
- offset_info_file = fopen (offset_info_file_name, "w");
- if (offset_info_file == 0)
- pfatal_with_name (offset_info_file_name);
+ offset_info_file = fopen(offset_info_file_name, "w");
+ if (offset_info_file == 0)
+ pfatal_with_name(offset_info_file_name);
}
- /* END CYGNUS LOCAL */
+ /* END CYGNUS LOCAL */
- /* Clear the dump files. */
- if (rtl_dump)
- clean_dump_file (".rtl");
- if (jump_opt_dump)
+ /* Clear the dump files. */
+ if (rtl_dump)
+ clean_dump_file(".rtl");
+ if (jump_opt_dump)
{
- clean_dump_file (".jump");
- if (graph_dump_format != no_graph)
- clean_graph_dump_file (dump_base_name, ".jump");
+ clean_dump_file(".jump");
+ if (graph_dump_format != no_graph)
+ clean_graph_dump_file(dump_base_name, ".jump");
}
- if (addressof_dump)
+ if (addressof_dump)
{
- clean_dump_file (".addressof");
- if (graph_dump_format != no_graph)
- clean_graph_dump_file (dump_base_name, ".addressof");
+ clean_dump_file(".addressof");
+ if (graph_dump_format != no_graph)
+ clean_graph_dump_file(dump_base_name, ".addressof");
}
- if (cse_dump)
+ if (cse_dump)
{
- clean_dump_file (".cse");
- if (graph_dump_format != no_graph)
- clean_graph_dump_file (dump_base_name, ".cse");
+ clean_dump_file(".cse");
+ if (graph_dump_format != no_graph)
+ clean_graph_dump_file(dump_base_name, ".cse");
}
- if (loop_dump)
+ if (loop_dump)
{
- clean_dump_file (".loop");
- if (graph_dump_format != no_graph)
- clean_graph_dump_file (dump_base_name, ".loop");
+ clean_dump_file(".loop");
+ if (graph_dump_format != no_graph)
+ clean_graph_dump_file(dump_base_name, ".loop");
}
- if (cse2_dump)
+ if (cse2_dump)
{
- clean_dump_file (".cse2");
- if (graph_dump_format != no_graph)
- clean_graph_dump_file (dump_base_name, ".cse2");
+ clean_dump_file(".cse2");
+ if (graph_dump_format != no_graph)
+ clean_graph_dump_file(dump_base_name, ".cse2");
}
- if (flow_dump)
+ if (flow_dump)
{
- clean_dump_file (".flow");
- if (graph_dump_format != no_graph)
- clean_graph_dump_file (dump_base_name, ".flow");
+ clean_dump_file(".flow");
+ if (graph_dump_format != no_graph)
+ clean_graph_dump_file(dump_base_name, ".flow");
}
- if (combine_dump)
+ if (combine_dump)
{
- clean_dump_file (".combine");
- if (graph_dump_format != no_graph)
- clean_graph_dump_file (dump_base_name, ".combine");
+ clean_dump_file(".combine");
+ if (graph_dump_format != no_graph)
+ clean_graph_dump_file(dump_base_name, ".combine");
}
- if (regmove_dump)
+ if (regmove_dump)
{
- clean_dump_file (".regmove");
- if (graph_dump_format != no_graph)
- clean_graph_dump_file (dump_base_name, ".regmove");
+ clean_dump_file(".regmove");
+ if (graph_dump_format != no_graph)
+ clean_graph_dump_file(dump_base_name, ".regmove");
}
- if (sched_dump)
+ if (sched_dump)
{
- clean_dump_file (".sched");
- if (graph_dump_format != no_graph)
- clean_graph_dump_file (dump_base_name, ".sched");
+ clean_dump_file(".sched");
+ if (graph_dump_format != no_graph)
+ clean_graph_dump_file(dump_base_name, ".sched");
}
- if (local_reg_dump)
+ if (local_reg_dump)
{
- clean_dump_file (".lreg");
- if (graph_dump_format != no_graph)
- clean_graph_dump_file (dump_base_name, ".lreg");
+ clean_dump_file(".lreg");
+ if (graph_dump_format != no_graph)
+ clean_graph_dump_file(dump_base_name, ".lreg");
}
- if (global_reg_dump)
+ if (global_reg_dump)
{
- clean_dump_file (".greg");
- if (graph_dump_format != no_graph)
- clean_graph_dump_file (dump_base_name, ".greg");
+ clean_dump_file(".greg");
+ if (graph_dump_format != no_graph)
+ clean_graph_dump_file(dump_base_name, ".greg");
}
- if (sched2_dump)
+ if (sched2_dump)
{
- clean_dump_file (".sched2");
- if (graph_dump_format != no_graph)
- clean_graph_dump_file (dump_base_name, ".sched2");
+ clean_dump_file(".sched2");
+ if (graph_dump_format != no_graph)
+ clean_graph_dump_file(dump_base_name, ".sched2");
}
- if (jump2_opt_dump)
+ if (jump2_opt_dump)
{
- clean_dump_file (".jump2");
- if (graph_dump_format != no_graph)
- clean_graph_dump_file (dump_base_name, ".jump2");
+ clean_dump_file(".jump2");
+ if (graph_dump_format != no_graph)
+ clean_graph_dump_file(dump_base_name, ".jump2");
}
- if (gcse_dump)
+ if (gcse_dump)
{
- clean_dump_file (".gcse");
- if (graph_dump_format != no_graph)
- clean_graph_dump_file (dump_base_name, ".gcse");
+ clean_dump_file(".gcse");
+ if (graph_dump_format != no_graph)
+ clean_graph_dump_file(dump_base_name, ".gcse");
}
#ifdef MACHINE_DEPENDENT_REORG
- if (mach_dep_reorg_dump)
+ if (mach_dep_reorg_dump)
{
- clean_dump_file (".mach");
- if (graph_dump_format != no_graph)
- clean_graph_dump_file (dump_base_name, ".mach");
+ clean_dump_file(".mach");
+ if (graph_dump_format != no_graph)
+ clean_graph_dump_file(dump_base_name, ".mach");
}
#endif
- /* Open assembler code output file. */
+ /* Open assembler code output file. */
- if (flag_syntax_only)
- asm_out_file = NULL;
- else
+ if (flag_syntax_only)
+ asm_out_file = NULL;
+ else
{
- if (! name_specified && asm_file_name == 0)
- asm_out_file = stdout;
- else
- {
- int len = strlen (dump_base_name);
- register char *dumpname = (char *) xmalloc (len + 6);
- strcpy (dumpname, dump_base_name);
- strip_off_ending (dumpname, len);
- strcat (dumpname, ".s");
- if (asm_file_name == 0)
- {
- asm_file_name = (char *) xmalloc (strlen (dumpname) + 1);
- strcpy (asm_file_name, dumpname);
- }
- if (!strcmp (asm_file_name, "-"))
- asm_out_file = stdout;
- else
- asm_out_file = fopen (asm_file_name, "w");
- if (asm_out_file == 0)
- pfatal_with_name (asm_file_name);
- }
+ if (!name_specified && asm_file_name == 0)
+ asm_out_file = stdout;
+ else
+ {
+ int len = strlen(dump_base_name);
+ register char *dumpname = (char *) xmalloc(len + 6);
+ strcpy(dumpname, dump_base_name);
+ strip_off_ending(dumpname, len);
+ strcat(dumpname, ".s");
+ if (asm_file_name == 0)
+ {
+ asm_file_name = (char *) xmalloc(strlen(dumpname) + 1);
+ strcpy(asm_file_name, dumpname);
+ }
+ if (!strcmp(asm_file_name, "-"))
+ asm_out_file = stdout;
+ else
+ asm_out_file = fopen(asm_file_name, "w");
+ if (asm_out_file == 0)
+ pfatal_with_name(asm_file_name);
+ }
#ifdef IO_BUFFER_SIZE
- setvbuf (asm_out_file, (char *) xmalloc (IO_BUFFER_SIZE),
- _IOFBF, IO_BUFFER_SIZE);
+ setvbuf(asm_out_file, (char *) xmalloc(IO_BUFFER_SIZE),
+ _IOFBF, IO_BUFFER_SIZE);
#endif
}
- input_filename = name;
+ input_filename = name;
- /* Put an entry on the input file stack for the main input file. */
- input_file_stack
- = (struct file_stack *) xmalloc (sizeof (struct file_stack));
- input_file_stack->next = 0;
- input_file_stack->name = input_filename;
+ /* Put an entry on the input file stack for the main input file. */
+ input_file_stack
+ = (struct file_stack *) xmalloc(sizeof (struct file_stack));
+ input_file_stack->next = 0;
+ input_file_stack->name = input_filename;
- /* This may set main_input_filename. */
- check_line_directive();
+ /* This may set main_input_filename. */
+ check_line_directive();
- /* If the input doesn't start with a #line, use the input name
- as the official input file name. */
- if (main_input_filename == 0)
- main_input_filename = name;
+ /* If the input doesn't start with a #line, use the input name
+ as the official input file name. */
+ if (main_input_filename == 0)
+ main_input_filename = name;
- if (flag_syntax_only)
+ if (flag_syntax_only)
{
- write_symbols = NO_DEBUG;
+ write_symbols = NO_DEBUG;
}
- else
+ else
{
- ASM_FILE_START (asm_out_file);
+ ASM_FILE_START(asm_out_file);
#ifdef ASM_COMMENT_START
- if (flag_verbose_asm)
- {
- /* Print the list of options in effect. */
- print_version (asm_out_file, ASM_COMMENT_START);
- print_switch_values (asm_out_file, 0, MAX_LINE,
- ASM_COMMENT_START, " ", "\n");
- /* Add a blank line here so it appears in assembler output but not
- screen output. */
- fprintf (asm_out_file, "\n");
- }
+ if (flag_verbose_asm)
+ {
+ /* Print the list of options in effect. */
+ print_version(asm_out_file, ASM_COMMENT_START);
+ print_switch_values(asm_out_file, 0, MAX_LINE,
+ ASM_COMMENT_START, " ", "\n");
+ /* Add a blank line here so it appears in assembler output but not
+ screen output. */
+ fprintf(asm_out_file, "\n");
+ }
#endif
- /* Output something to inform GDB that this compilation was by GCC. */
+ /* Output something to inform GDB that this compilation was by GCC. */
#ifndef ASM_IDENTIFY_GCC
- fprintf (asm_out_file, "gcc2_compiled.:\n");
+ fprintf(asm_out_file, "gcc2_compiled.:\n");
#else
- ASM_IDENTIFY_GCC (asm_out_file);
+ ASM_IDENTIFY_GCC(asm_out_file);
#endif
- /* Output something to identify which front-end produced this file. */
+ /* Output something to identify which front-end produced this file. */
#ifdef ASM_IDENTIFY_LANGUAGE
- ASM_IDENTIFY_LANGUAGE (asm_out_file);
+ ASM_IDENTIFY_LANGUAGE(asm_out_file);
#endif
} /* ! flag_syntax_only */
#ifndef ASM_OUTPUT_SECTION_NAME
- if (flag_function_sections)
+ if (flag_function_sections)
{
- warning ("-ffunction-sections not supported for this target.");
- flag_function_sections = 0;
+ warning("-ffunction-sections not supported for this target.");
+ flag_function_sections = 0;
}
- if (flag_data_sections)
+ if (flag_data_sections)
{
- warning ("-fdata-sections not supported for this target.");
- flag_data_sections = 0;
+ warning("-fdata-sections not supported for this target.");
+ flag_data_sections = 0;
}
#endif
#ifndef OBJECT_FORMAT_ELF
- if (flag_function_sections && write_symbols != NO_DEBUG)
- warning ("-ffunction-sections may affect debugging on some targets.");
+ if (flag_function_sections && write_symbols != NO_DEBUG)
+ warning("-ffunction-sections may affect debugging on some targets.");
#endif
- /* ??? Note: There used to be a conditional here
- to call assemble_zeros without fail if DBX_DEBUGGING_INFO is defined.
- This was to guarantee separation between gcc_compiled. and
- the first function, for the sake of dbx on Suns.
- However, having the extra zero here confused the Emacs
- code for unexec, and might confuse other programs too.
- Therefore, I took out that change.
- In future versions we should find another way to solve
- that dbx problem. -- rms, 23 May 93. */
-
- /* If dbx symbol table desired, initialize writing it
- and output the predefined types. */
+ /* ??? Note: There used to be a conditional here
+ to call assemble_zeros without fail if DBX_DEBUGGING_INFO is defined.
+ This was to guarantee separation between gcc_compiled. and
+ the first function, for the sake of dbx on Suns.
+ However, having the extra zero here confused the Emacs
+ code for unexec, and might confuse other programs too.
+ Therefore, I took out that change.
+ In future versions we should find another way to solve
+ that dbx problem. -- rms, 23 May 93. */
+
+ /* If dbx symbol table desired, initialize writing it
+ and output the predefined types. */
#ifdef DWARF2_UNWIND_INFO
- if (dwarf2out_do_frame ())
- dwarf2out_frame_init ();
+ if (dwarf2out_do_frame())
+ dwarf2out_frame_init();
#endif
#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG)
- TIMEVAR (symout_time, dwarf2out_init (asm_out_file, main_input_filename));
+ if (write_symbols == DWARF2_DEBUG)
+ TIMEVAR(symout_time, dwarf2out_init(asm_out_file, main_input_filename));
#endif
- /* Initialize yet another pass. */
+ /* Initialize yet another pass. */
- init_final (main_input_filename);
+ init_final(main_input_filename);
- start_time = get_run_time ();
+ start_time = get_run_time();
- /* Call the parser, which parses the entire file
- (calling rest_of_compilation for each function). */
+ /* Call the parser, which parses the entire file
+ (calling rest_of_compilation for each function). */
- if (yyparse () != 0)
+ if (yyparse() != 0)
{
- if (errorcount == 0)
- fprintf (stderr, "Errors detected in input file (your bison.simple is out of date)");
+ if (errorcount == 0)
+ fprintf(stderr, "Errors detected in input file (your bison.simple is out of date)");
- /* In case there were missing closebraces,
- get us back to the global binding level. */
- while (! global_bindings_p ())
- poplevel (0, 0, 0);
+ /* In case there were missing closebraces,
+ get us back to the global binding level. */
+ while (!global_bindings_p())
+ poplevel(0, 0, 0);
}
- /* Compilation is now finished except for writing
- what's left of the symbol table output. */
+ /* Compilation is now finished except for writing
+ what's left of the symbol table output. */
- parse_time += get_run_time () - start_time;
+ parse_time += get_run_time() - start_time;
- parse_time -= integration_time;
- parse_time -= varconst_time;
+ parse_time -= integration_time;
+ parse_time -= varconst_time;
- if (flag_syntax_only)
- goto finish_syntax;
+ if (flag_syntax_only)
+ goto finish_syntax;
- globals = getdecls ();
+ globals = getdecls();
- /* Really define vars that have had only a tentative definition.
- Really output inline functions that must actually be callable
- and have not been output so far. */
+ /* Really define vars that have had only a tentative definition.
+ Really output inline functions that must actually be callable
+ and have not been output so far. */
- {
- int len = list_length (globals);
- tree *vec = (tree *) alloca (sizeof (tree) * len);
- int i;
- tree decl;
- int reconsider = 1;
-
- /* Process the decls in reverse order--earliest first.
- Put them into VEC from back to front, then take out from front. */
-
- for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
- vec[len - i - 1] = decl;
-
- for (i = 0; i < len; i++)
- {
- decl = vec[i];
-
- /* We're not deferring this any longer. */
- DECL_DEFER_OUTPUT (decl) = 0;
-
- if (TREE_CODE (decl) == VAR_DECL && DECL_SIZE (decl) == 0
- && incomplete_decl_finalize_hook != 0)
- (*incomplete_decl_finalize_hook) (decl);
- }
-
- /* Now emit any global variables or functions that we have been putting
- off. We need to loop in case one of the things emitted here
- references another one which comes earlier in the list. */
- while (reconsider)
- {
- reconsider = 0;
- for (i = 0; i < len; i++)
- {
- decl = vec[i];
-
- if (TREE_ASM_WRITTEN (decl) || DECL_EXTERNAL (decl))
- continue;
-
- /* Don't write out static consts, unless we still need them.
-
- We also keep static consts if not optimizing (for debugging),
- unless the user specified -fno-keep-static-consts.
- ??? They might be better written into the debug information.
- This is possible when using DWARF.
-
- A language processor that wants static constants to be always
- written out (even if it is not used) is responsible for
- calling rest_of_decl_compilation itself. E.g. the C front-end
- calls rest_of_decl_compilation from finish_decl.
- One motivation for this is that is conventional in some
- environments to write things like:
- static const char rcsid[] = "... version string ...";
- intending to force the string to be in the executable.
-
- A language processor that would prefer to have unneeded
- static constants "optimized away" would just defer writing
- them out until here. E.g. C++ does this, because static
- constants are often defined in header files.
-
- ??? A tempting alternative (for both C and C++) would be
- to force a constant to be written if and only if it is
- defined in a main file, as opposed to an include file. */
-
- if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)
- && (! TREE_READONLY (decl)
- || TREE_PUBLIC (decl)
- || (!optimize && flag_keep_static_consts)
- || TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
- {
- reconsider = 1;
- rest_of_decl_compilation (decl, NULL, 1, 1);
- }
-
- if (TREE_CODE (decl) == FUNCTION_DECL
- && DECL_INITIAL (decl) != 0
- && DECL_SAVED_INSNS (decl) != 0
- && (flag_keep_inline_functions
- || TREE_PUBLIC (decl)
- || TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
- {
- reconsider = 1;
- temporary_allocation ();
- output_inline_function (decl);
- permanent_allocation (1);
- }
- }
- }
-
- /* Now that all possible functions have been output, we can dump
- the exception table. */
-
- output_exception_table ();
-
- for (i = 0; i < len; i++)
- {
- decl = vec[i];
-
- if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl)
- && ! TREE_ASM_WRITTEN (decl))
- /* Cancel the RTL for this decl so that, if debugging info
- output for global variables is still to come,
- this one will be omitted. */
- DECL_RTL (decl) = NULL;
-
- /* Warn about any function
- declared static but not defined.
- We don't warn about variables,
- because many programs have static variables
- that exist only to get some text into the object file. */
- if (TREE_CODE (decl) == FUNCTION_DECL
- && (warn_unused
- || TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
- && DECL_INITIAL (decl) == 0
- && DECL_EXTERNAL (decl)
- && ! DECL_ARTIFICIAL (decl)
- && ! TREE_PUBLIC (decl))
- {
- if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
- pedwarn_with_decl (decl,
- "`%s' used but never defined");
- else
- warning_with_decl (decl,
- "`%s' declared `static' but never defined");
- /* This symbol is effectively an "extern" declaration now. */
- TREE_PUBLIC (decl) = 1;
- assemble_external (decl);
- }
-
- /* Warn about static fns or vars defined but not used,
- but not about inline functions or static consts
- since defining those in header files is normal practice. */
- if (warn_unused
- && ((TREE_CODE (decl) == FUNCTION_DECL && ! DECL_INLINE (decl))
- || (TREE_CODE (decl) == VAR_DECL && ! TREE_READONLY (decl)))
- && ! DECL_IN_SYSTEM_HEADER (decl)
- && ! DECL_EXTERNAL (decl)
- && ! TREE_PUBLIC (decl)
- && ! TREE_USED (decl)
- && (TREE_CODE (decl) == FUNCTION_DECL || ! DECL_REGISTER (decl))
- /* The TREE_USED bit for file-scope decls
- is kept in the identifier, to handle multiple
- external decls in different scopes. */
- && ! TREE_USED (DECL_NAME (decl)))
- warning_with_decl (decl, "`%s' defined but not used");
+ {
+ int len = list_length(globals);
+ tree *vec = (tree *) alloca(sizeof (tree) * len);
+ int i;
+ tree decl;
+ int reconsider = 1;
+
+ /* Process the decls in reverse order--earliest first.
+ Put them into VEC from back to front, then take out from front. */
+
+ for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN(decl))
+ vec[len - i - 1] = decl;
+
+ for (i = 0; i < len; i++)
+ {
+ decl = vec[i];
+
+ /* We're not deferring this any longer. */
+ DECL_DEFER_OUTPUT(decl) = 0;
+
+ if (TREE_CODE(decl) == VAR_DECL && DECL_SIZE(decl) == 0
+ && incomplete_decl_finalize_hook != 0)
+ (*incomplete_decl_finalize_hook) (decl);
+ }
+
+ /* Now emit any global variables or functions that we have been putting
+ off. We need to loop in case one of the things emitted here
+ references another one which comes earlier in the list. */
+ while (reconsider)
+ {
+ reconsider = 0;
+ for (i = 0; i < len; i++)
+ {
+ decl = vec[i];
+
+ if (TREE_ASM_WRITTEN(decl) || DECL_EXTERNAL(decl))
+ continue;
+
+ /* Don't write out static consts, unless we still need them.
+
+ We also keep static consts if not optimizing (for debugging),
+ unless the user specified -fno-keep-static-consts.
+ ??? They might be better written into the debug information.
+ This is possible when using DWARF.
+
+ A language processor that wants static constants to be always
+ written out (even if it is not used) is responsible for
+ calling rest_of_decl_compilation itself. E.g. the C front-end
+ calls rest_of_decl_compilation from finish_decl.
+ One motivation for this is that is conventional in some
+ environments to write things like:
+ static const char rcsid[] = "... version string ...";
+ intending to force the string to be in the executable.
+
+ A language processor that would prefer to have unneeded
+ static constants "optimized away" would just defer writing
+ them out until here. E.g. C++ does this, because static
+ constants are often defined in header files.
+
+ ??? A tempting alternative (for both C and C++) would be
+ to force a constant to be written if and only if it is
+ defined in a main file, as opposed to an include file. */
+
+ if (TREE_CODE(decl) == VAR_DECL && TREE_STATIC(decl)
+ && (!TREE_READONLY(decl)
+ || TREE_PUBLIC(decl)
+ || (!optimize && flag_keep_static_consts)
+ || TREE_SYMBOL_REFERENCED(DECL_ASSEMBLER_NAME(decl))))
+ {
+ reconsider = 1;
+ rest_of_decl_compilation(decl, NULL, 1, 1);
+ }
+
+ if (TREE_CODE(decl) == FUNCTION_DECL
+ && DECL_INITIAL(decl) != 0
+ && DECL_SAVED_INSNS(decl) != 0
+ && (flag_keep_inline_functions
+ || TREE_PUBLIC(decl)
+ || TREE_SYMBOL_REFERENCED(DECL_ASSEMBLER_NAME(decl))))
+ {
+ reconsider = 1;
+ temporary_allocation();
+ output_inline_function(decl);
+ permanent_allocation(1);
+ }
+ }
+ }
+
+ /* Now that all possible functions have been output, we can dump
+ the exception table. */
+
+ output_exception_table();
+
+ for (i = 0; i < len; i++)
+ {
+ decl = vec[i];
+
+ if (TREE_CODE(decl) == VAR_DECL && TREE_STATIC(decl)
+ && !TREE_ASM_WRITTEN(decl))
+ /* Cancel the RTL for this decl so that, if debugging info
+ output for global variables is still to come,
+ this one will be omitted. */
+ DECL_RTL(decl) = NULL;
+
+ /* Warn about any function
+ declared static but not defined.
+ We don't warn about variables,
+ because many programs have static variables
+ that exist only to get some text into the object file. */
+ if (TREE_CODE(decl) == FUNCTION_DECL
+ && (warn_unused
+ || TREE_SYMBOL_REFERENCED(DECL_ASSEMBLER_NAME(decl)))
+ && DECL_INITIAL(decl) == 0
+ && DECL_EXTERNAL(decl)
+ && !DECL_ARTIFICIAL(decl)
+ && !TREE_PUBLIC(decl))
+ {
+ if (TREE_SYMBOL_REFERENCED(DECL_ASSEMBLER_NAME(decl)))
+ pedwarn_with_decl(decl,
+ "`%s' used but never defined");
+ else
+ warning_with_decl(decl,
+ "`%s' declared `static' but never defined");
+ /* This symbol is effectively an "extern" declaration now. */
+ TREE_PUBLIC(decl) = 1;
+ assemble_external(decl);
+ }
+
+ /* Warn about static fns or vars defined but not used,
+ but not about inline functions or static consts
+ since defining those in header files is normal practice. */
+ if (warn_unused
+ && ((TREE_CODE(decl) == FUNCTION_DECL && !DECL_INLINE(decl))
+ || (TREE_CODE(decl) == VAR_DECL && !TREE_READONLY(decl)))
+ && !DECL_IN_SYSTEM_HEADER(decl)
+ && !DECL_EXTERNAL(decl)
+ && !TREE_PUBLIC(decl)
+ && !TREE_USED(decl)
+ && (TREE_CODE(decl) == FUNCTION_DECL || !DECL_REGISTER(decl))
+ /* The TREE_USED bit for file-scope decls
+ is kept in the identifier, to handle multiple
+ external decls in different scopes. */
+ && !TREE_USED(DECL_NAME(decl)))
+ warning_with_decl(decl, "`%s' defined but not used");
#ifdef DWARF2_DEBUGGING_INFO
- /* Output DWARF2 information for file-scope tentative data object
- declarations, file-scope (extern) function declarations (which
- had no corresponding body) and file-scope tagged type declarations
- and definitions which have not yet been forced out. */
-
- if (write_symbols == DWARF2_DEBUG
- && (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl)))
- TIMEVAR (symout_time, dwarf2out_decl (decl));
+ /* Output DWARF2 information for file-scope tentative data object
+ declarations, file-scope (extern) function declarations (which
+ had no corresponding body) and file-scope tagged type declarations
+ and definitions which have not yet been forced out. */
+
+ if (write_symbols == DWARF2_DEBUG
+ && (TREE_CODE(decl) != FUNCTION_DECL || !DECL_INITIAL(decl)))
+ TIMEVAR(symout_time, dwarf2out_decl(decl));
#endif
- }
- }
+ }
+ }
- /* Write out any pending weak symbol declarations. */
+ /* Write out any pending weak symbol declarations. */
- weak_finish ();
+ weak_finish();
#ifdef DWARF2_UNWIND_INFO
- if (dwarf2out_do_frame ())
- dwarf2out_frame_finish ();
+ if (dwarf2out_do_frame())
+ dwarf2out_frame_finish();
#endif
#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG)
- TIMEVAR (symout_time,
- {
- dwarf2out_finish ();
- });
+ if (write_symbols == DWARF2_DEBUG)
+ TIMEVAR(symout_time,
+ {
+ dwarf2out_finish();
+ });
#endif
- /* Output some stuff at end of file if nec. */
+ /* Output some stuff at end of file if nec. */
+
+ end_final(dump_base_name);
- end_final (dump_base_name);
-
#ifdef ASM_FILE_END
- ASM_FILE_END (asm_out_file);
+ ASM_FILE_END(asm_out_file);
#endif
- finish_syntax:
+finish_syntax:
- /* Close the dump files. */
+ /* Close the dump files. */
- if (flag_gen_aux_info)
+ if (flag_gen_aux_info)
{
- fclose (aux_info_file);
- if (errorcount)
- unlink (aux_info_file_name);
+ fclose(aux_info_file);
+ if (errorcount)
+ unlink(aux_info_file_name);
}
- /* CYGNUS LOCAL v850/law */
- if (flag_gen_offset_info)
+ /* CYGNUS LOCAL v850/law */
+ if (flag_gen_offset_info)
{
- fclose (offset_info_file);
- if (errorcount)
- unlink (offset_info_file_name);
+ fclose(offset_info_file);
+ if (errorcount)
+ unlink(offset_info_file_name);
}
- /* END CYGNUS LOCAL */
+ /* END CYGNUS LOCAL */
- if (combine_dump)
+ if (combine_dump)
{
- open_dump_file (".combine", NULL);
- TIMEVAR (dump_time, dump_combine_total_stats (rtl_dump_file));
- close_dump_file (NULL, NULL_RTX);
+ open_dump_file(".combine", NULL);
+ TIMEVAR(dump_time, dump_combine_total_stats(rtl_dump_file));
+ close_dump_file(NULL, NULL_RTX);
}
- /* Close non-debugging input and output files. Take special care to note
- whether fclose returns an error, since the pages might still be on the
- buffer chain while the file is open. */
+ /* Close non-debugging input and output files. Take special care to note
+ whether fclose returns an error, since the pages might still be on the
+ buffer chain while the file is open. */
- finish_parse ();
+ finish_parse();
- if (! flag_syntax_only
- && (ferror (asm_out_file) != 0 || fclose (asm_out_file) != 0))
- fatal_io_error (asm_file_name);
+ if (!flag_syntax_only
+ && (ferror(asm_out_file) != 0 || fclose(asm_out_file) != 0))
+ fatal_io_error(asm_file_name);
- /* Do whatever is necessary to finish printing the graphs. */
- if (graph_dump_format != no_graph)
+ /* Do whatever is necessary to finish printing the graphs. */
+ if (graph_dump_format != no_graph)
{
- if (jump_opt_dump)
- finish_graph_dump_file (dump_base_name, ".jump");
- if (addressof_dump)
- finish_graph_dump_file (dump_base_name, ".addressof");
- if (cse_dump)
- finish_graph_dump_file (dump_base_name, ".cse");
- if (loop_dump)
- finish_graph_dump_file (dump_base_name, ".loop");
- if (cse2_dump)
- finish_graph_dump_file (dump_base_name, ".cse2");
- if (flow_dump)
- finish_graph_dump_file (dump_base_name, ".flow");
- if (combine_dump)
- finish_graph_dump_file (dump_base_name, ".combine");
- if (regmove_dump)
- finish_graph_dump_file (dump_base_name, ".regmove");
- if (sched_dump)
- finish_graph_dump_file (dump_base_name, ".sched");
- if (local_reg_dump)
- finish_graph_dump_file (dump_base_name, ".lreg");
- if (global_reg_dump)
- finish_graph_dump_file (dump_base_name, ".greg");
- if (sched2_dump)
- finish_graph_dump_file (dump_base_name, ".sched2");
- if (jump2_opt_dump)
- finish_graph_dump_file (dump_base_name, ".jump2");
- if (gcse_dump)
- finish_graph_dump_file (dump_base_name, ".gcse");
+ if (jump_opt_dump)
+ finish_graph_dump_file(dump_base_name, ".jump");
+ if (addressof_dump)
+ finish_graph_dump_file(dump_base_name, ".addressof");
+ if (cse_dump)
+ finish_graph_dump_file(dump_base_name, ".cse");
+ if (loop_dump)
+ finish_graph_dump_file(dump_base_name, ".loop");
+ if (cse2_dump)
+ finish_graph_dump_file(dump_base_name, ".cse2");
+ if (flow_dump)
+ finish_graph_dump_file(dump_base_name, ".flow");
+ if (combine_dump)
+ finish_graph_dump_file(dump_base_name, ".combine");
+ if (regmove_dump)
+ finish_graph_dump_file(dump_base_name, ".regmove");
+ if (sched_dump)
+ finish_graph_dump_file(dump_base_name, ".sched");
+ if (local_reg_dump)
+ finish_graph_dump_file(dump_base_name, ".lreg");
+ if (global_reg_dump)
+ finish_graph_dump_file(dump_base_name, ".greg");
+ if (sched2_dump)
+ finish_graph_dump_file(dump_base_name, ".sched2");
+ if (jump2_opt_dump)
+ finish_graph_dump_file(dump_base_name, ".jump2");
+ if (gcse_dump)
+ finish_graph_dump_file(dump_base_name, ".gcse");
#ifdef MACHINE_DEPENDENT_REORG
- if (mach_dep_reorg_dump)
- finish_graph_dump_file (dump_base_name, ".mach");
+ if (mach_dep_reorg_dump)
+ finish_graph_dump_file(dump_base_name, ".mach");
#endif
}
- /* Free up memory for the benefit of leak detectors. */
- free_reg_info ();
+ /* Free up memory for the benefit of leak detectors. */
+ free_reg_info();
- /* Print the times. */
+ /* Print the times. */
- if (! quiet_flag)
+ if (!quiet_flag)
{
- fprintf (stderr,"\n");
- print_time ("parse", parse_time);
-
- print_time ("integration", integration_time);
- print_time ("jump", jump_time);
- print_time ("cse", cse_time);
- print_time ("gcse", gcse_time);
- print_time ("loop", loop_time);
- print_time ("cse2", cse2_time);
- print_time ("flow", flow_time);
- print_time ("combine", combine_time);
- print_time ("regmove", regmove_time);
- print_time ("sched", sched_time);
- print_time ("local-alloc", local_alloc_time);
- print_time ("global-alloc", global_alloc_time);
- print_time ("sched2", sched2_time);
- print_time ("shorten-branch", shorten_branch_time);
- print_time ("stack-reg", stack_reg_time);
- print_time ("final", final_time);
- print_time ("varconst", varconst_time);
- print_time ("symout", symout_time);
- print_time ("dump", dump_time);
+ fprintf(stderr,"\n");
+ print_time("parse", parse_time);
+
+ print_time("integration", integration_time);
+ print_time("jump", jump_time);
+ print_time("cse", cse_time);
+ print_time("gcse", gcse_time);
+ print_time("loop", loop_time);
+ print_time("cse2", cse2_time);
+ print_time("flow", flow_time);
+ print_time("combine", combine_time);
+ print_time("regmove", regmove_time);
+ print_time("sched", sched_time);
+ print_time("local-alloc", local_alloc_time);
+ print_time("global-alloc", global_alloc_time);
+ print_time("sched2", sched2_time);
+ print_time("shorten-branch", shorten_branch_time);
+ print_time("stack-reg", stack_reg_time);
+ print_time("final", final_time);
+ print_time("varconst", varconst_time);
+ print_time("symout", symout_time);
+ print_time("dump", dump_time);
}
}
-
+
/* This is called from various places for FUNCTION_DECL, VAR_DECL,
and TYPE_DECL nodes.
@@ -2782,12 +2782,12 @@ compile_file (name)
void
rest_of_decl_compilation (decl, asmspec, top_level, at_end)
- tree decl;
- char *asmspec;
- int top_level;
- int at_end;
+tree decl;
+char *asmspec;
+int top_level;
+int at_end;
{
- /* Declarations of variables, and of functions defined elsewhere. */
+ /* Declarations of variables, and of functions defined elsewhere. */
/* The most obvious approach, to put an #ifndef around where
this macro is used, doesn't work since it's inside a macro call. */
@@ -2795,42 +2795,42 @@ rest_of_decl_compilation (decl, asmspec, top_level, at_end)
#define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP, END)
#endif
- /* Forward declarations for nested functions are not "external",
- but we need to treat them as if they were. */
- if (TREE_STATIC (decl) || DECL_EXTERNAL (decl)
- || TREE_CODE (decl) == FUNCTION_DECL)
- TIMEVAR (varconst_time,
- {
- make_decl_rtl (decl, asmspec, top_level);
- /* Initialized extern variable exists to be replaced
- with its value, or represents something that will be
- output in another file. */
- if (! (TREE_CODE (decl) == VAR_DECL
- && DECL_EXTERNAL (decl) && TREE_READONLY (decl)
- && DECL_INITIAL (decl) != 0
- && DECL_INITIAL (decl) != error_mark_node))
- /* Don't output anything
- when a tentative file-scope definition is seen.
- But at end of compilation, do output code for them. */
- if (! (! at_end && top_level
- && (DECL_INITIAL (decl) == 0
- || DECL_INITIAL (decl) == error_mark_node)))
- assemble_variable (decl, top_level, at_end, 0);
- if (decl == last_assemble_variable_decl)
- {
- ASM_FINISH_DECLARE_OBJECT (asm_out_file, decl,
- top_level, at_end);
- }
- });
- else if (DECL_REGISTER (decl) && asmspec != 0)
+ /* Forward declarations for nested functions are not "external",
+ but we need to treat them as if they were. */
+ if (TREE_STATIC(decl) || DECL_EXTERNAL(decl)
+ || TREE_CODE(decl) == FUNCTION_DECL)
+ TIMEVAR(varconst_time,
+ {
+ make_decl_rtl(decl, asmspec, top_level);
+ /* Initialized extern variable exists to be replaced
+ with its value, or represents something that will be
+ output in another file. */
+ if (!(TREE_CODE(decl) == VAR_DECL
+ && DECL_EXTERNAL(decl) && TREE_READONLY(decl)
+ && DECL_INITIAL(decl) != 0
+ && DECL_INITIAL(decl) != error_mark_node))
+ /* Don't output anything
+ when a tentative file-scope definition is seen.
+ But at end of compilation, do output code for them. */
+ if (!(!at_end && top_level
+ && (DECL_INITIAL(decl) == 0
+ || DECL_INITIAL(decl) == error_mark_node)))
+ assemble_variable(decl, top_level, at_end, 0);
+ if (decl == last_assemble_variable_decl)
+ {
+ ASM_FINISH_DECLARE_OBJECT(asm_out_file, decl,
+ top_level, at_end);
+ }
+ });
+ else if (DECL_REGISTER(decl) && asmspec != 0)
{
- if (decode_reg_name (asmspec) >= 0)
- {
- DECL_RTL (decl) = 0;
- make_decl_rtl (decl, asmspec, top_level);
- }
- else
- error ("invalid register name `%s' for register variable", asmspec);
+ if (decode_reg_name(asmspec) >= 0)
+ {
+ DECL_RTL(decl) = 0;
+ make_decl_rtl(decl, asmspec, top_level);
+ }
+ else
+ error("invalid register name `%s' for register variable", asmspec);
}
}
@@ -2838,8 +2838,8 @@ rest_of_decl_compilation (decl, asmspec, top_level, at_end)
void
rest_of_type_compilation (type, toplev)
- tree type ATTRIBUTE_UNUSED;
- int toplev ATTRIBUTE_UNUSED;
+tree type ATTRIBUTE_UNUSED;
+int toplev ATTRIBUTE_UNUSED;
{
}
@@ -2851,897 +2851,897 @@ rest_of_type_compilation (type, toplev)
void
rest_of_compilation (decl)
- tree decl;
+tree decl;
{
- register rtx insns;
- int start_time = get_run_time ();
- int tem;
- /* Nonzero if we have saved the original DECL_INITIAL of the function,
- to be restored after we finish compiling the function
- (for use when compiling inline calls to this function). */
- tree saved_block_tree = 0;
- /* Likewise, for DECL_ARGUMENTS. */
- tree saved_arguments = 0;
- int failure = 0;
-
- /* If we are reconsidering an inline function
- at the end of compilation, skip the stuff for making it inline. */
-
- if (DECL_SAVED_INSNS (decl) == 0)
+ register rtx insns;
+ int start_time = get_run_time();
+ int tem;
+ /* Nonzero if we have saved the original DECL_INITIAL of the function,
+ to be restored after we finish compiling the function
+ (for use when compiling inline calls to this function). */
+ tree saved_block_tree = 0;
+ /* Likewise, for DECL_ARGUMENTS. */
+ tree saved_arguments = 0;
+ int failure = 0;
+
+ /* If we are reconsidering an inline function
+ at the end of compilation, skip the stuff for making it inline. */
+
+ if (DECL_SAVED_INSNS(decl) == 0)
{
- int inlinable = 0;
- char *lose;
-
- /* If requested, consider whether to make this function inline. */
- if (DECL_INLINE (decl) || flag_inline_functions)
- TIMEVAR (integration_time,
- {
- lose = function_cannot_inline_p (decl);
- if (lose || ! optimize)
- {
- if (warn_inline && DECL_INLINE (decl))
- warning_with_decl (decl, lose);
- DECL_ABSTRACT_ORIGIN (decl) = 0;
- /* Don't really compile an extern inline function.
- If we can't make it inline, pretend
- it was only declared. */
- if (DECL_EXTERNAL (decl))
- {
- DECL_INITIAL (decl) = 0;
- goto exit_rest_of_compilation;
- }
- }
- else
- /* ??? Note that this has the effect of making it look
- like "inline" was specified for a function if we choose
- to inline it. This isn't quite right, but it's
- probably not worth the trouble to fix. */
- inlinable = DECL_INLINE (decl) = 1;
- });
-
- insns = get_insns ();
-
- /* Dump the rtl code if we are dumping rtl. */
- if (rtl_dump)
- {
- open_dump_file (".rtl", decl_printable_name (decl, 2));
-
- if (DECL_SAVED_INSNS (decl))
- fprintf (rtl_dump_file, ";; (integrable)\n\n");
-
- close_dump_file (print_rtl, insns);
- }
-
- /* If we can, defer compiling inlines until EOF.
- save_for_inline_copying can be extremely expensive. */
- if (inlinable && ! decl_function_context (decl))
- DECL_DEFER_OUTPUT (decl) = 1;
-
- /* If function is inline, and we don't yet know whether to
- compile it by itself, defer decision till end of compilation.
- finish_compilation will call rest_of_compilation again
- for those functions that need to be output. Also defer those
- functions that we are supposed to defer. We cannot defer
- functions containing nested functions since the nested function
- data is in our non-saved obstack. We cannot defer nested
- functions for the same reason. */
-
- /* If this is a nested inline, remove ADDRESSOF now so we can
- finish compiling ourselves. Otherwise, wait until EOF.
- We have to do this because the purge_addressof transformation
- changes the DECL_RTL for many variables, which confuses integrate. */
- if (inlinable)
- {
- if (decl_function_context (decl))
- purge_addressof (insns);
- else
- DECL_DEFER_OUTPUT (decl) = 1;
- }
-
- if (! current_function_contains_functions
- && (DECL_DEFER_OUTPUT (decl)
- || (DECL_INLINE (decl)
- && ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl)
- && ! flag_keep_inline_functions)
- || DECL_EXTERNAL (decl)))))
- {
- DECL_DEFER_OUTPUT (decl) = 1;
-
- /* If -Wreturn-type, we have to do a bit of compilation.
- However, if we just fall through we will call
- save_for_inline_copying() which results in excessive
- memory use. Instead, we just want to call
- jump_optimize() to figure out whether or not we can fall
- off the end of the function; we do the minimum amount of
- work necessary to make that safe. And, we set optimize
- to zero to keep jump_optimize from working too hard. */
- if (warn_return_type)
- {
- int saved_optimize = optimize;
- optimize = 0;
- find_exception_handler_labels ();
- jump_optimize (get_insns(), !JUMP_CROSS_JUMP, !JUMP_NOOP_MOVES,
- !JUMP_AFTER_REGSCAN);
- optimize = saved_optimize;
- }
+ int inlinable = 0;
+ char *lose;
+
+ /* If requested, consider whether to make this function inline. */
+ if (DECL_INLINE(decl) || flag_inline_functions)
+ TIMEVAR(integration_time,
+ {
+ lose = function_cannot_inline_p(decl);
+ if (lose || !optimize)
+ {
+ if (warn_inline && DECL_INLINE(decl))
+ warning_with_decl(decl, lose);
+ DECL_ABSTRACT_ORIGIN(decl) = 0;
+ /* Don't really compile an extern inline function.
+ If we can't make it inline, pretend
+ it was only declared. */
+ if (DECL_EXTERNAL(decl))
+ {
+ DECL_INITIAL(decl) = 0;
+ goto exit_rest_of_compilation;
+ }
+ }
+ else
+ /* ??? Note that this has the effect of making it look
+ like "inline" was specified for a function if we choose
+ to inline it. This isn't quite right, but it's
+ probably not worth the trouble to fix. */
+ inlinable = DECL_INLINE(decl) = 1;
+ });
+
+ insns = get_insns();
+
+ /* Dump the rtl code if we are dumping rtl. */
+ if (rtl_dump)
+ {
+ open_dump_file(".rtl", decl_printable_name(decl, 2));
+
+ if (DECL_SAVED_INSNS(decl))
+ fprintf(rtl_dump_file, ";; (integrable)\n\n");
+
+ close_dump_file(print_rtl, insns);
+ }
+
+ /* If we can, defer compiling inlines until EOF.
+ save_for_inline_copying can be extremely expensive. */
+ if (inlinable && !decl_function_context(decl))
+ DECL_DEFER_OUTPUT(decl) = 1;
+
+ /* If function is inline, and we don't yet know whether to
+ compile it by itself, defer decision till end of compilation.
+ finish_compilation will call rest_of_compilation again
+ for those functions that need to be output. Also defer those
+ functions that we are supposed to defer. We cannot defer
+ functions containing nested functions since the nested function
+ data is in our non-saved obstack. We cannot defer nested
+ functions for the same reason. */
+
+ /* If this is a nested inline, remove ADDRESSOF now so we can
+ finish compiling ourselves. Otherwise, wait until EOF.
+ We have to do this because the purge_addressof transformation
+ changes the DECL_RTL for many variables, which confuses integrate. */
+ if (inlinable)
+ {
+ if (decl_function_context(decl))
+ purge_addressof(insns);
+ else
+ DECL_DEFER_OUTPUT(decl) = 1;
+ }
+
+ if (!current_function_contains_functions
+ && (DECL_DEFER_OUTPUT(decl)
+ || (DECL_INLINE(decl)
+ && ((!TREE_PUBLIC(decl) && !TREE_ADDRESSABLE(decl)
+ && !flag_keep_inline_functions)
+ || DECL_EXTERNAL(decl)))))
+ {
+ DECL_DEFER_OUTPUT(decl) = 1;
+
+ /* If -Wreturn-type, we have to do a bit of compilation.
+ However, if we just fall through we will call
+ save_for_inline_copying() which results in excessive
+ memory use. Instead, we just want to call
+ jump_optimize() to figure out whether or not we can fall
+ off the end of the function; we do the minimum amount of
+ work necessary to make that safe. And, we set optimize
+ to zero to keep jump_optimize from working too hard. */
+ if (warn_return_type)
+ {
+ int saved_optimize = optimize;
+ optimize = 0;
+ find_exception_handler_labels();
+ jump_optimize(get_insns(), !JUMP_CROSS_JUMP, !JUMP_NOOP_MOVES,
+ !JUMP_AFTER_REGSCAN);
+ optimize = saved_optimize;
+ }
#ifdef DWARF2_DEBUGGING_INFO
- /* Generate the DWARF2 info for the "abstract" instance
- of a function which we may later generate inlined and/or
- out-of-line instances of. */
- if (write_symbols == DWARF2_DEBUG)
- {
- set_decl_abstract_flags (decl, 1);
- TIMEVAR (symout_time, dwarf2out_decl (decl));
- set_decl_abstract_flags (decl, 0);
- }
+ /* Generate the DWARF2 info for the "abstract" instance
+ of a function which we may later generate inlined and/or
+ out-of-line instances of. */
+ if (write_symbols == DWARF2_DEBUG)
+ {
+ set_decl_abstract_flags(decl, 1);
+ TIMEVAR(symout_time, dwarf2out_decl(decl));
+ set_decl_abstract_flags(decl, 0);
+ }
#endif
- TIMEVAR (integration_time, save_for_inline_nocopy (decl));
- RTX_INTEGRATED_P (DECL_SAVED_INSNS (decl)) = inlinable;
- goto exit_rest_of_compilation;
- }
-
- /* If we have to compile the function now, save its rtl and subdecls
- so that its compilation will not affect what others get. */
- if (inlinable || DECL_DEFER_OUTPUT (decl))
- {
+ TIMEVAR(integration_time, save_for_inline_nocopy(decl));
+ RTX_INTEGRATED_P(DECL_SAVED_INSNS(decl)) = inlinable;
+ goto exit_rest_of_compilation;
+ }
+
+ /* If we have to compile the function now, save its rtl and subdecls
+ so that its compilation will not affect what others get. */
+ if (inlinable || DECL_DEFER_OUTPUT(decl))
+ {
#ifdef DWARF2_DEBUGGING_INFO
- /* Generate the DWARF2 info for the "abstract" instance of
- a function which we will generate an out-of-line instance
- of almost immediately (and which we may also later generate
- various inlined instances of). */
- if (write_symbols == DWARF2_DEBUG)
- {
- set_decl_abstract_flags (decl, 1);
- TIMEVAR (symout_time, dwarf2out_decl (decl));
- set_decl_abstract_flags (decl, 0);
- }
+ /* Generate the DWARF2 info for the "abstract" instance of
+ a function which we will generate an out-of-line instance
+ of almost immediately (and which we may also later generate
+ various inlined instances of). */
+ if (write_symbols == DWARF2_DEBUG)
+ {
+ set_decl_abstract_flags(decl, 1);
+ TIMEVAR(symout_time, dwarf2out_decl(decl));
+ set_decl_abstract_flags(decl, 0);
+ }
#endif
- saved_block_tree = DECL_INITIAL (decl);
- saved_arguments = DECL_ARGUMENTS (decl);
- TIMEVAR (integration_time, save_for_inline_copying (decl));
- RTX_INTEGRATED_P (DECL_SAVED_INSNS (decl)) = inlinable;
- }
-
- /* If specified extern inline but we aren't inlining it, we are
- done. This goes for anything that gets here with DECL_EXTERNAL
- set, not just things with DECL_INLINE. */
- if (DECL_EXTERNAL (decl))
- goto exit_rest_of_compilation;
+ saved_block_tree = DECL_INITIAL(decl);
+ saved_arguments = DECL_ARGUMENTS(decl);
+ TIMEVAR(integration_time, save_for_inline_copying(decl));
+ RTX_INTEGRATED_P(DECL_SAVED_INSNS(decl)) = inlinable;
+ }
+
+ /* If specified extern inline but we aren't inlining it, we are
+ done. This goes for anything that gets here with DECL_EXTERNAL
+ set, not just things with DECL_INLINE. */
+ if (DECL_EXTERNAL(decl))
+ goto exit_rest_of_compilation;
}
- if (! DECL_DEFER_OUTPUT (decl))
- TREE_ASM_WRITTEN (decl) = 1;
+ if (!DECL_DEFER_OUTPUT(decl))
+ TREE_ASM_WRITTEN(decl) = 1;
- /* Now that integrate will no longer see our rtl, we need not distinguish
- between the return value of this function and the return value of called
- functions. */
- rtx_equal_function_value_matters = 0;
+ /* Now that integrate will no longer see our rtl, we need not distinguish
+ between the return value of this function and the return value of called
+ functions. */
+ rtx_equal_function_value_matters = 0;
- /* Don't return yet if -Wreturn-type; we need to do jump_optimize. */
- if ((rtl_dump_and_exit || flag_syntax_only) && !warn_return_type)
+ /* Don't return yet if -Wreturn-type; we need to do jump_optimize. */
+ if ((rtl_dump_and_exit || flag_syntax_only) && !warn_return_type)
{
- goto exit_rest_of_compilation;
+ goto exit_rest_of_compilation;
}
- /* Emit code to get eh context, if needed. */
- emit_eh_context ();
+ /* Emit code to get eh context, if needed. */
+ emit_eh_context();
- /* From now on, allocate rtl in current_obstack, not in saveable_obstack.
- Note that that may have been done above, in save_for_inline_copying.
- The call to resume_temporary_allocation near the end of this function
- goes back to the usual state of affairs. This must be done after
- we've built up any unwinders for exception handling, and done
- the FINALIZE_PIC work, if necessary. */
+ /* From now on, allocate rtl in current_obstack, not in saveable_obstack.
+ Note that that may have been done above, in save_for_inline_copying.
+ The call to resume_temporary_allocation near the end of this function
+ goes back to the usual state of affairs. This must be done after
+ we've built up any unwinders for exception handling, and done
+ the FINALIZE_PIC work, if necessary. */
- rtl_in_current_obstack ();
+ rtl_in_current_obstack();
- insns = get_insns ();
+ insns = get_insns();
- /* Copy any shared structure that should not be shared. */
+ /* Copy any shared structure that should not be shared. */
- unshare_all_rtl (insns);
+ unshare_all_rtl(insns);
#ifdef SETJMP_VIA_SAVE_AREA
- /* This must be performed before virutal register instantiation. */
- if (current_function_calls_alloca)
- optimize_save_area_alloca (insns);
+ /* This must be performed before virutal register instantiation. */
+ if (current_function_calls_alloca)
+ optimize_save_area_alloca(insns);
#endif
- /* Instantiate all virtual registers. */
+ /* Instantiate all virtual registers. */
- instantiate_virtual_regs (current_function_decl, get_insns ());
+ instantiate_virtual_regs(current_function_decl, get_insns());
- /* See if we have allocated stack slots that are not directly addressable.
- If so, scan all the insns and create explicit address computation
- for all references to such slots. */
+ /* See if we have allocated stack slots that are not directly addressable.
+ If so, scan all the insns and create explicit address computation
+ for all references to such slots. */
/* fixup_stack_slots (); */
- /* Find all the EH handlers. */
- find_exception_handler_labels ();
+ /* Find all the EH handlers. */
+ find_exception_handler_labels();
- /* Always do one jump optimization pass to ensure that JUMP_LABEL fields
- are initialized and to compute whether control can drop off the end
- of the function. */
- TIMEVAR (jump_time, reg_scan (insns, max_reg_num (), 0));
- TIMEVAR (jump_time, jump_optimize (insns, !JUMP_CROSS_JUMP, !JUMP_NOOP_MOVES,
- JUMP_AFTER_REGSCAN));
+ /* Always do one jump optimization pass to ensure that JUMP_LABEL fields
+ are initialized and to compute whether control can drop off the end
+ of the function. */
+ TIMEVAR(jump_time, reg_scan(insns, max_reg_num(), 0));
+ TIMEVAR(jump_time, jump_optimize(insns, !JUMP_CROSS_JUMP, !JUMP_NOOP_MOVES,
+ JUMP_AFTER_REGSCAN));
- /* CYGNUS LOCAL law */
- if (optimize > 1)
+ /* CYGNUS LOCAL law */
+ if (optimize > 1)
{
- TIMEVAR (jump_time, delete_null_pointer_checks (get_insns ()));
- TIMEVAR (jump_time, merge_blocks (insns));
+ TIMEVAR(jump_time, delete_null_pointer_checks(get_insns()));
+ TIMEVAR(jump_time, merge_blocks(insns));
}
- /* END CYGNUS LOCAL */
+ /* END CYGNUS LOCAL */
- /* Now is when we stop if -fsyntax-only and -Wreturn-type. */
- if (rtl_dump_and_exit || flag_syntax_only || DECL_DEFER_OUTPUT (decl))
- goto exit_rest_of_compilation;
+ /* Now is when we stop if -fsyntax-only and -Wreturn-type. */
+ if (rtl_dump_and_exit || flag_syntax_only || DECL_DEFER_OUTPUT(decl))
+ goto exit_rest_of_compilation;
- /* Dump rtl code after jump, if we are doing that. */
+ /* Dump rtl code after jump, if we are doing that. */
if (jump_opt_dump)
- dump_rtl (".jump", decl, print_rtl, insns);
+ dump_rtl(".jump", decl, print_rtl, insns);
- /* Perform common subexpression elimination.
- Nonzero value from `cse_main' means that jumps were simplified
- and some code may now be unreachable, so do
- jump optimization again. */
+ /* Perform common subexpression elimination.
+ Nonzero value from `cse_main' means that jumps were simplified
+ and some code may now be unreachable, so do
+ jump optimization again. */
- if (optimize > 0)
+ if (optimize > 0)
{
- if (cse_dump)
- open_dump_file (".cse", decl_printable_name (decl, 2));
-
- TIMEVAR (cse_time, reg_scan (insns, max_reg_num (), 1));
-
- if (flag_thread_jumps)
- /* Hacks by tiemann & kenner. */
- TIMEVAR (jump_time, thread_jumps (insns, max_reg_num (), 1));
-
- TIMEVAR (cse_time, tem = cse_main (insns, max_reg_num (),
- 0, rtl_dump_file));
- TIMEVAR (cse_time, delete_trivially_dead_insns (insns, max_reg_num ()));
-
- /* CYGNUS LOCAL law */
- if (tem || optimize > 1)
- {
- TIMEVAR (jump_time, jump_optimize (insns, !JUMP_CROSS_JUMP,
- !JUMP_NOOP_MOVES,
- !JUMP_AFTER_REGSCAN));
- if (optimize > 1)
- {
- TIMEVAR (jump_time, delete_null_pointer_checks (get_insns ()));
- TIMEVAR (jump_time, merge_blocks (insns));
- }
- }
- /* END CYGNUS LOCAL */
-
- /* Dump rtl code after cse, if we are doing that. */
-
- if (cse_dump)
- {
- close_dump_file (print_rtl, insns);
- if (graph_dump_format != no_graph)
- print_rtl_graph_with_bb (dump_base_name, ".cse", insns);
- }
+ if (cse_dump)
+ open_dump_file(".cse", decl_printable_name(decl, 2));
+
+ TIMEVAR(cse_time, reg_scan(insns, max_reg_num(), 1));
+
+ if (flag_thread_jumps)
+ /* Hacks by tiemann & kenner. */
+ TIMEVAR(jump_time, thread_jumps(insns, max_reg_num(), 1));
+
+ TIMEVAR(cse_time, tem = cse_main(insns, max_reg_num(),
+ 0, rtl_dump_file));
+ TIMEVAR(cse_time, delete_trivially_dead_insns(insns, max_reg_num()));
+
+ /* CYGNUS LOCAL law */
+ if (tem || optimize > 1)
+ {
+ TIMEVAR(jump_time, jump_optimize(insns, !JUMP_CROSS_JUMP,
+ !JUMP_NOOP_MOVES,
+ !JUMP_AFTER_REGSCAN));
+ if (optimize > 1)
+ {
+ TIMEVAR(jump_time, delete_null_pointer_checks(get_insns()));
+ TIMEVAR(jump_time, merge_blocks(insns));
+ }
+ }
+ /* END CYGNUS LOCAL */
+
+ /* Dump rtl code after cse, if we are doing that. */
+
+ if (cse_dump)
+ {
+ close_dump_file(print_rtl, insns);
+ if (graph_dump_format != no_graph)
+ print_rtl_graph_with_bb(dump_base_name, ".cse", insns);
+ }
}
- purge_addressof (insns);
- reg_scan (insns, max_reg_num (), 1);
+ purge_addressof(insns);
+ reg_scan(insns, max_reg_num(), 1);
- if (addressof_dump)
+ if (addressof_dump)
{
- dump_rtl (".addressof", decl, print_rtl, insns);
- if (graph_dump_format != no_graph)
- print_rtl_graph_with_bb (dump_base_name, ".addressof", insns);
+ dump_rtl(".addressof", decl, print_rtl, insns);
+ if (graph_dump_format != no_graph)
+ print_rtl_graph_with_bb(dump_base_name, ".addressof", insns);
}
-
- /* Perform global cse. */
- if (optimize > 0 && flag_gcse)
+ /* Perform global cse. */
+
+ if (optimize > 0 && flag_gcse)
{
- if (gcse_dump)
- open_dump_file (".gcse", IDENTIFIER_POINTER (DECL_NAME (decl)));
-
- /* CYGNUS LOCAL edge splitting/law */
- TIMEVAR (gcse_time, tem = gcse_main (insns, rtl_dump_file));
-
- /* If gcse altered any jumps, rerun jump optimizations to clean
- things up. */
- if (tem)
- {
- TIMEVAR (jump_time, jump_optimize (insns, !JUMP_CROSS_JUMP,
- !JUMP_NOOP_MOVES,
- !JUMP_AFTER_REGSCAN));
- if (optimize > 1)
- TIMEVAR (jump_time, merge_blocks (insns));
- }
- /* END CYGNUS LOCAL */
-
-
- if (gcse_dump)
- {
- close_dump_file (print_rtl, insns);
- if (graph_dump_format != no_graph)
- print_rtl_graph_with_bb (dump_base_name, ".gcse", insns);
- }
+ if (gcse_dump)
+ open_dump_file(".gcse", IDENTIFIER_POINTER(DECL_NAME(decl)));
+
+ /* CYGNUS LOCAL edge splitting/law */
+ TIMEVAR(gcse_time, tem = gcse_main(insns, rtl_dump_file));
+
+ /* If gcse altered any jumps, rerun jump optimizations to clean
+ things up. */
+ if (tem)
+ {
+ TIMEVAR(jump_time, jump_optimize(insns, !JUMP_CROSS_JUMP,
+ !JUMP_NOOP_MOVES,
+ !JUMP_AFTER_REGSCAN));
+ if (optimize > 1)
+ TIMEVAR(jump_time, merge_blocks(insns));
+ }
+ /* END CYGNUS LOCAL */
+
+
+ if (gcse_dump)
+ {
+ close_dump_file(print_rtl, insns);
+ if (graph_dump_format != no_graph)
+ print_rtl_graph_with_bb(dump_base_name, ".gcse", insns);
+ }
}
- /* Move constant computations out of loops. */
+ /* Move constant computations out of loops. */
- if (optimize > 0)
+ if (optimize > 0)
{
- if (loop_dump)
- open_dump_file (".loop", decl_printable_name (decl, 2));
-
- TIMEVAR
- (loop_time,
- {
- if (flag_rerun_loop_opt)
- {
- /* We only want to perform unrolling once. */
-
- loop_optimize (insns, rtl_dump_file, 0, 0);
-
-
- /* The first call to loop_optimize makes some instructions
- trivially dead. We delete those instructions now in the
- hope that doing so will make the heuristics in loop work
- better and possibly speed up compilation. */
- delete_trivially_dead_insns (insns, max_reg_num ());
-
- /* The regscan pass is currently necessary as the alias
- analysis code depends on this information. */
- reg_scan (insns, max_reg_num (), 1);
- }
- loop_optimize (insns, rtl_dump_file, flag_unroll_loops, 1);
- });
-
- /* Dump rtl code after loop opt, if we are doing that. */
-
- if (loop_dump)
- {
- close_dump_file (print_rtl, insns);
- if (graph_dump_format != no_graph)
- print_rtl_graph_with_bb (dump_base_name, ".loop", insns);
- }
+ if (loop_dump)
+ open_dump_file(".loop", decl_printable_name(decl, 2));
+
+ TIMEVAR
+ (loop_time,
+ {
+ if (flag_rerun_loop_opt)
+ {
+ /* We only want to perform unrolling once. */
+
+ loop_optimize(insns, rtl_dump_file, 0, 0);
+
+
+ /* The first call to loop_optimize makes some instructions
+ trivially dead. We delete those instructions now in the
+ hope that doing so will make the heuristics in loop work
+ better and possibly speed up compilation. */
+ delete_trivially_dead_insns(insns, max_reg_num());
+
+ /* The regscan pass is currently necessary as the alias
+ analysis code depends on this information. */
+ reg_scan(insns, max_reg_num(), 1);
+ }
+ loop_optimize(insns, rtl_dump_file, flag_unroll_loops, 1);
+ });
+
+ /* Dump rtl code after loop opt, if we are doing that. */
+
+ if (loop_dump)
+ {
+ close_dump_file(print_rtl, insns);
+ if (graph_dump_format != no_graph)
+ print_rtl_graph_with_bb(dump_base_name, ".loop", insns);
+ }
}
- if (optimize > 0)
+ if (optimize > 0)
{
- if (cse2_dump)
- open_dump_file (".cse2", decl_printable_name (decl, 2));
-
- if (flag_rerun_cse_after_loop)
- {
- /* Running another jump optimization pass before the second
- cse pass sometimes simplifies the RTL enough to allow
- the second CSE pass to do a better job. Jump_optimize can change
- max_reg_num so we must rerun reg_scan afterwards.
- ??? Rework to not call reg_scan so often. */
- TIMEVAR (jump_time, reg_scan (insns, max_reg_num (), 0));
- TIMEVAR (jump_time, jump_optimize (insns, !JUMP_CROSS_JUMP,
- !JUMP_NOOP_MOVES,
- JUMP_AFTER_REGSCAN));
-
- TIMEVAR (cse2_time, reg_scan (insns, max_reg_num (), 0));
- TIMEVAR (cse2_time, tem = cse_main (insns, max_reg_num (),
- 1, rtl_dump_file));
- /* CYGNUS LOCAL law */
- if (tem)
- {
- TIMEVAR (jump_time, jump_optimize (insns, !JUMP_CROSS_JUMP,
- !JUMP_NOOP_MOVES,
- !JUMP_AFTER_REGSCAN));
- if (optimize > 1)
- TIMEVAR (jump_time, merge_blocks (insns));
- }
- /* END CYGNUS LOCAL */
- }
-
- if (flag_thread_jumps)
- {
- /* This pass of jump threading straightens out code
- that was kinked by loop optimization. */
- TIMEVAR (jump_time, reg_scan (insns, max_reg_num (), 0));
- TIMEVAR (jump_time, thread_jumps (insns, max_reg_num (), 0));
- }
-
- /* Dump rtl code after cse, if we are doing that. */
-
- if (cse2_dump)
- {
- close_dump_file (print_rtl, insns);
- if (graph_dump_format != no_graph)
- print_rtl_graph_with_bb (dump_base_name, ".cse2", insns);
- }
+ if (cse2_dump)
+ open_dump_file(".cse2", decl_printable_name(decl, 2));
+
+ if (flag_rerun_cse_after_loop)
+ {
+ /* Running another jump optimization pass before the second
+ cse pass sometimes simplifies the RTL enough to allow
+ the second CSE pass to do a better job. Jump_optimize can change
+ max_reg_num so we must rerun reg_scan afterwards.
+ ??? Rework to not call reg_scan so often. */
+ TIMEVAR(jump_time, reg_scan(insns, max_reg_num(), 0));
+ TIMEVAR(jump_time, jump_optimize(insns, !JUMP_CROSS_JUMP,
+ !JUMP_NOOP_MOVES,
+ JUMP_AFTER_REGSCAN));
+
+ TIMEVAR(cse2_time, reg_scan(insns, max_reg_num(), 0));
+ TIMEVAR(cse2_time, tem = cse_main(insns, max_reg_num(),
+ 1, rtl_dump_file));
+ /* CYGNUS LOCAL law */
+ if (tem)
+ {
+ TIMEVAR(jump_time, jump_optimize(insns, !JUMP_CROSS_JUMP,
+ !JUMP_NOOP_MOVES,
+ !JUMP_AFTER_REGSCAN));
+ if (optimize > 1)
+ TIMEVAR(jump_time, merge_blocks(insns));
+ }
+ /* END CYGNUS LOCAL */
+ }
+
+ if (flag_thread_jumps)
+ {
+ /* This pass of jump threading straightens out code
+ that was kinked by loop optimization. */
+ TIMEVAR(jump_time, reg_scan(insns, max_reg_num(), 0));
+ TIMEVAR(jump_time, thread_jumps(insns, max_reg_num(), 0));
+ }
+
+ /* Dump rtl code after cse, if we are doing that. */
+
+ if (cse2_dump)
+ {
+ close_dump_file(print_rtl, insns);
+ if (graph_dump_format != no_graph)
+ print_rtl_graph_with_bb(dump_base_name, ".cse2", insns);
+ }
}
- /* We are no longer anticipating cse in this function, at least. */
+ /* We are no longer anticipating cse in this function, at least. */
- cse_not_expected = 1;
+ cse_not_expected = 1;
- /* Now we choose between stupid (pcc-like) register allocation
- (if we got the -noreg switch and not -opt)
- and smart register allocation. */
+ /* Now we choose between stupid (pcc-like) register allocation
+ (if we got the -noreg switch and not -opt)
+ and smart register allocation. */
- if (optimize > 0) /* Stupid allocation probably won't work */
- obey_regdecls = 0; /* if optimizations being done. */
+ if (optimize > 0) /* Stupid allocation probably won't work */
+ obey_regdecls = 0; /* if optimizations being done. */
- regclass_init ();
+ regclass_init();
- /* Print function header into flow dump now
- because doing the flow analysis makes some of the dump. */
- if (flow_dump)
- open_dump_file (".flow", decl_printable_name (decl, 2));
-
- if (obey_regdecls)
+ /* Print function header into flow dump now
+ because doing the flow analysis makes some of the dump. */
+ if (flow_dump)
+ open_dump_file(".flow", decl_printable_name(decl, 2));
+
+ if (obey_regdecls)
{
- TIMEVAR (flow_time,
- {
- regclass (insns, max_reg_num ());
- stupid_life_analysis (insns, max_reg_num (),
- rtl_dump_file);
- });
+ TIMEVAR(flow_time,
+ {
+ regclass(insns, max_reg_num());
+ stupid_life_analysis(insns, max_reg_num(),
+ rtl_dump_file);
+ });
}
- else
+ else
{
- /* Do control and data flow analysis,
- and write some of the results to dump file. */
-
- TIMEVAR
- (flow_time,
- {
- find_basic_blocks (insns, max_reg_num (), rtl_dump_file);
- life_analysis (insns, max_reg_num (), rtl_dump_file);
- });
-
- if (warn_uninitialized)
- {
- uninitialized_vars_warning (DECL_INITIAL (decl));
- setjmp_args_warning ();
- }
+ /* Do control and data flow analysis,
+ and write some of the results to dump file. */
+
+ TIMEVAR
+ (flow_time,
+ {
+ find_basic_blocks(insns, max_reg_num(), rtl_dump_file);
+ life_analysis(insns, max_reg_num(), rtl_dump_file);
+ });
+
+ if (warn_uninitialized)
+ {
+ uninitialized_vars_warning(DECL_INITIAL(decl));
+ setjmp_args_warning();
+ }
}
- /* Dump rtl after flow analysis. */
- if (flow_dump)
+ /* Dump rtl after flow analysis. */
+ if (flow_dump)
{
- close_dump_file (print_rtl_with_bb, insns);
- if (graph_dump_format != no_graph)
- print_rtl_graph_with_bb (dump_base_name, ".flow", insns);
+ close_dump_file(print_rtl_with_bb, insns);
+ if (graph_dump_format != no_graph)
+ print_rtl_graph_with_bb(dump_base_name, ".flow", insns);
}
- /* The first life analysis pass has finished. From now on we can not
- generate any new pseudos. */
- no_new_pseudos = 1;
+ /* The first life analysis pass has finished. From now on we can not
+ generate any new pseudos. */
+ no_new_pseudos = 1;
- /* If -opt, try combining insns through substitution. */
+ /* If -opt, try combining insns through substitution. */
- if (optimize > 0)
+ if (optimize > 0)
{
- TIMEVAR (combine_time, combine_instructions (insns, max_reg_num ()));
+ TIMEVAR(combine_time, combine_instructions(insns, max_reg_num()));
- /* Dump rtl code after insn combination. */
+ /* Dump rtl code after insn combination. */
- if (combine_dump)
- {
- dump_rtl (".combine", decl, print_rtl_with_bb, insns);
- if (graph_dump_format != no_graph)
- print_rtl_graph_with_bb (dump_base_name, ".combine", insns);
- }
+ if (combine_dump)
+ {
+ dump_rtl(".combine", decl, print_rtl_with_bb, insns);
+ if (graph_dump_format != no_graph)
+ print_rtl_graph_with_bb(dump_base_name, ".combine", insns);
+ }
}
- /* Register allocation pre-pass, to reduce number of moves
- necessary for two-address machines. */
- if (optimize > 0 && (flag_regmove || flag_expensive_optimizations))
+ /* Register allocation pre-pass, to reduce number of moves
+ necessary for two-address machines. */
+ if (optimize > 0 && (flag_regmove || flag_expensive_optimizations))
{
- if (regmove_dump)
- open_dump_file (".regmove", decl_printable_name (decl, 2));
-
- TIMEVAR (regmove_time, regmove_optimize (insns, max_reg_num (),
- rtl_dump_file));
-
- if (regmove_dump)
- {
- close_dump_file (print_rtl_with_bb, insns);
- if (graph_dump_format != no_graph)
- print_rtl_graph_with_bb (dump_base_name, ".regmove", insns);
- }
+ if (regmove_dump)
+ open_dump_file(".regmove", decl_printable_name(decl, 2));
+
+ TIMEVAR(regmove_time, regmove_optimize(insns, max_reg_num(),
+ rtl_dump_file));
+
+ if (regmove_dump)
+ {
+ close_dump_file(print_rtl_with_bb, insns);
+ if (graph_dump_format != no_graph)
+ print_rtl_graph_with_bb(dump_base_name, ".regmove", insns);
+ }
}
- /* Unless we did stupid register allocation,
- allocate pseudo-regs that are used only within 1 basic block. */
+ /* Unless we did stupid register allocation,
+ allocate pseudo-regs that are used only within 1 basic block. */
- if (!obey_regdecls)
- TIMEVAR (local_alloc_time,
- {
- recompute_reg_usage (insns, !optimize_size);
- regclass (insns, max_reg_num ());
- local_alloc ();
- });
+ if (!obey_regdecls)
+ TIMEVAR(local_alloc_time,
+ {
+ recompute_reg_usage(insns, !optimize_size);
+ regclass(insns, max_reg_num());
+ local_alloc();
+ });
- /* Dump rtl code after allocating regs within basic blocks. */
+ /* Dump rtl code after allocating regs within basic blocks. */
- if (local_reg_dump)
+ if (local_reg_dump)
{
- open_dump_file (".lreg", decl_printable_name (decl, 2));
+ open_dump_file(".lreg", decl_printable_name(decl, 2));
- TIMEVAR (dump_time, dump_flow_info (rtl_dump_file));
- TIMEVAR (dump_time, dump_local_alloc (rtl_dump_file));
+ TIMEVAR(dump_time, dump_flow_info(rtl_dump_file));
+ TIMEVAR(dump_time, dump_local_alloc(rtl_dump_file));
- close_dump_file (print_rtl_with_bb, insns);
- if (graph_dump_format != no_graph)
- print_rtl_graph_with_bb (dump_base_name, ".lreg", insns);
+ close_dump_file(print_rtl_with_bb, insns);
+ if (graph_dump_format != no_graph)
+ print_rtl_graph_with_bb(dump_base_name, ".lreg", insns);
}
- if (global_reg_dump)
- open_dump_file (".greg", decl_printable_name (decl, 2));
+ if (global_reg_dump)
+ open_dump_file(".greg", decl_printable_name(decl, 2));
- /* Unless we did stupid register allocation,
- allocate remaining pseudo-regs, then do the reload pass
- fixing up any insns that are invalid. */
+ /* Unless we did stupid register allocation,
+ allocate remaining pseudo-regs, then do the reload pass
+ fixing up any insns that are invalid. */
- TIMEVAR (global_alloc_time,
- {
- if (!obey_regdecls)
- failure = global_alloc (rtl_dump_file);
- else
- failure = reload (insns, 0, rtl_dump_file);
- });
+ TIMEVAR(global_alloc_time,
+ {
+ if (!obey_regdecls)
+ failure = global_alloc(rtl_dump_file);
+ else
+ failure = reload(insns, 0, rtl_dump_file);
+ });
- if (failure)
- goto exit_rest_of_compilation;
+ if (failure)
+ goto exit_rest_of_compilation;
- /* Do a very simple CSE pass over just the hard registers. */
- if (optimize > 0)
- reload_cse_regs (insns);
+ /* Do a very simple CSE pass over just the hard registers. */
+ if (optimize > 0)
+ reload_cse_regs(insns);
- /* Re-create the death notes which were deleted during reload. */
- if (optimize)
- TIMEVAR
- (flow_time,
- {
- find_basic_blocks (insns, max_reg_num (), rtl_dump_file);
- life_analysis (insns, max_reg_num (), rtl_dump_file);
- });
+ /* Re-create the death notes which were deleted during reload. */
+ if (optimize)
+ TIMEVAR
+ (flow_time,
+ {
+ find_basic_blocks(insns, max_reg_num(), rtl_dump_file);
+ life_analysis(insns, max_reg_num(), rtl_dump_file);
+ });
- flow2_completed = 1;
+ flow2_completed = 1;
- /* On some machines, the prologue and epilogue code, or parts thereof,
- can be represented as RTL. Doing so lets us schedule insns between
- it and the rest of the code and also allows delayed branch
- scheduling to operate in the epilogue. */
+ /* On some machines, the prologue and epilogue code, or parts thereof,
+ can be represented as RTL. Doing so lets us schedule insns between
+ it and the rest of the code and also allows delayed branch
+ scheduling to operate in the epilogue. */
- thread_prologue_and_epilogue_insns (insns);
+ thread_prologue_and_epilogue_insns(insns);
- if (global_reg_dump)
+ if (global_reg_dump)
{
- TIMEVAR (dump_time, dump_global_regs (rtl_dump_file));
- close_dump_file (print_rtl_with_bb, insns);
- if (graph_dump_format != no_graph)
- print_rtl_graph_with_bb (dump_base_name, ".greg", insns);
+ TIMEVAR(dump_time, dump_global_regs(rtl_dump_file));
+ close_dump_file(print_rtl_with_bb, insns);
+ if (graph_dump_format != no_graph)
+ print_rtl_graph_with_bb(dump_base_name, ".greg", insns);
}
- /* One more attempt to remove jumps to .+1
- left by dead-store-elimination.
- Also do cross-jumping this time
- and delete no-op move insns. */
+ /* One more attempt to remove jumps to .+1
+ left by dead-store-elimination.
+ Also do cross-jumping this time
+ and delete no-op move insns. */
- if (optimize > 0)
+ if (optimize > 0)
{
- TIMEVAR (jump_time, jump_optimize (insns, JUMP_CROSS_JUMP,
- JUMP_NOOP_MOVES,
- !JUMP_AFTER_REGSCAN));
-
- /* Dump rtl code after jump, if we are doing that. */
-
- if (jump2_opt_dump)
- {
- dump_rtl (".jump2", decl, print_rtl_with_bb, insns);
- if (graph_dump_format != no_graph)
- print_rtl_graph_with_bb (dump_base_name, ".jump2", insns);
- }
+ TIMEVAR(jump_time, jump_optimize(insns, JUMP_CROSS_JUMP,
+ JUMP_NOOP_MOVES,
+ !JUMP_AFTER_REGSCAN));
+
+ /* Dump rtl code after jump, if we are doing that. */
+
+ if (jump2_opt_dump)
+ {
+ dump_rtl(".jump2", decl, print_rtl_with_bb, insns);
+ if (graph_dump_format != no_graph)
+ print_rtl_graph_with_bb(dump_base_name, ".jump2", insns);
+ }
}
- /* If a machine dependent reorganization is needed, call it. */
+ /* If a machine dependent reorganization is needed, call it. */
#ifdef MACHINE_DEPENDENT_REORG
- MACHINE_DEPENDENT_REORG (insns);
-
- if (mach_dep_reorg_dump)
- {
- dump_rtl (".mach", decl, print_rtl_with_bb, insns);
- if (graph_dump_format != no_graph)
- print_rtl_graph_with_bb (dump_base_name, ".mach", insns);
- }
+ MACHINE_DEPENDENT_REORG(insns);
+
+ if (mach_dep_reorg_dump)
+ {
+ dump_rtl(".mach", decl, print_rtl_with_bb, insns);
+ if (graph_dump_format != no_graph)
+ print_rtl_graph_with_bb(dump_base_name, ".mach", insns);
+ }
#endif
- /* Shorten branches. */
- TIMEVAR (shorten_branch_time,
- {
- shorten_branches (get_insns ());
- });
+ /* Shorten branches. */
+ TIMEVAR(shorten_branch_time,
+ {
+ shorten_branches(get_insns());
+ });
- /* Now turn the rtl into assembler code. */
+ /* Now turn the rtl into assembler code. */
- TIMEVAR (final_time,
- {
- rtx x;
- char *fnname;
+ TIMEVAR(final_time,
+ {
+ rtx x;
+ char *fnname;
- /* Get the function's name, as described by its RTL.
- This may be different from the DECL_NAME name used
- in the source file. */
+ /* Get the function's name, as described by its RTL.
+ This may be different from the DECL_NAME name used
+ in the source file. */
- x = DECL_RTL (decl);
- if (GET_CODE (x) != MEM)
- abort ();
- x = XEXP (x, 0);
- if (GET_CODE (x) != SYMBOL_REF)
- abort ();
- fnname = XSTR (x, 0);
+ x = DECL_RTL(decl);
+ if (GET_CODE(x) != MEM)
+ abort();
+ x = XEXP(x, 0);
+ if (GET_CODE(x) != SYMBOL_REF)
+ abort();
+ fnname = XSTR(x, 0);
- assemble_start_function (decl, fnname);
- final_start_function (insns, asm_out_file, optimize);
- final (insns, asm_out_file, optimize, 0);
- final_end_function (insns, asm_out_file, optimize);
- assemble_end_function (decl, fnname);
- if (! quiet_flag)
- fflush (asm_out_file);
+ assemble_start_function(decl, fnname);
+ final_start_function(insns, asm_out_file, optimize);
+ final(insns, asm_out_file, optimize, 0);
+ final_end_function(insns, asm_out_file, optimize);
+ assemble_end_function(decl, fnname);
+ if (!quiet_flag)
+ fflush(asm_out_file);
- /* Release all memory held by regsets now */
- regset_release_memory ();
- });
+ /* Release all memory held by regsets now */
+ regset_release_memory();
+ });
- /* Write DBX symbols if requested */
+ /* Write DBX symbols if requested */
- /* Note that for those inline functions where we don't initially
- know for certain that we will be generating an out-of-line copy,
- the first invocation of this routine (rest_of_compilation) will
- skip over this code by doing a `goto exit_rest_of_compilation;'.
- Later on, finish_compilation will call rest_of_compilation again
- for those inline functions that need to have out-of-line copies
- generated. During that call, we *will* be routed past here. */
+ /* Note that for those inline functions where we don't initially
+ know for certain that we will be generating an out-of-line copy,
+ the first invocation of this routine (rest_of_compilation) will
+ skip over this code by doing a `goto exit_rest_of_compilation;'.
+ Later on, finish_compilation will call rest_of_compilation again
+ for those inline functions that need to have out-of-line copies
+ generated. During that call, we *will* be routed past here. */
#ifdef DWARF2_DEBUGGING_INFO
- if (write_symbols == DWARF2_DEBUG)
- TIMEVAR (symout_time, dwarf2out_decl (decl));
+ if (write_symbols == DWARF2_DEBUG)
+ TIMEVAR(symout_time, dwarf2out_decl(decl));
#endif
- exit_rest_of_compilation:
+exit_rest_of_compilation:
- free_bb_memory ();
+ free_bb_memory();
- /* In case the function was not output,
- don't leave any temporary anonymous types
- queued up for sdb output. */
+ /* In case the function was not output,
+ don't leave any temporary anonymous types
+ queued up for sdb output. */
- /* Put back the tree of subblocks and list of arguments
- from before we copied them.
- Code generation and the output of debugging info may have modified
- the copy, but the original is unchanged. */
+ /* Put back the tree of subblocks and list of arguments
+ from before we copied them.
+ Code generation and the output of debugging info may have modified
+ the copy, but the original is unchanged. */
- if (saved_block_tree != 0)
+ if (saved_block_tree != 0)
{
- DECL_INITIAL (decl) = saved_block_tree;
- DECL_ARGUMENTS (decl) = saved_arguments;
- DECL_ABSTRACT_ORIGIN (decl) = NULL_TREE;
+ DECL_INITIAL(decl) = saved_block_tree;
+ DECL_ARGUMENTS(decl) = saved_arguments;
+ DECL_ABSTRACT_ORIGIN(decl) = NULL_TREE;
}
- reload_completed = 0;
- flow2_completed = 0;
- no_new_pseudos = 0;
+ reload_completed = 0;
+ flow2_completed = 0;
+ no_new_pseudos = 0;
- TIMEVAR (final_time,
- {
- /* CYGNUS LOCAL LRS */
- /* Free storage allocated by find_basic_blocks. */
- free_basic_block_vars (0);
- /* END CYGNUS LOCAL */
+ TIMEVAR(final_time,
+ {
+ /* CYGNUS LOCAL LRS */
+ /* Free storage allocated by find_basic_blocks. */
+ free_basic_block_vars(0);
+ /* END CYGNUS LOCAL */
- /* Clear out the insn_length contents now that they are no
- longer valid. */
- init_insn_lengths ();
+ /* Clear out the insn_length contents now that they are no
+ longer valid. */
+ init_insn_lengths();
- /* Clear out the real_constant_chain before some of the rtx's
- it runs through become garbage. */
- clear_const_double_mem ();
+ /* Clear out the real_constant_chain before some of the rtx's
+ it runs through become garbage. */
+ clear_const_double_mem();
- /* Cancel the effect of rtl_in_current_obstack. */
- resume_temporary_allocation ();
+ /* Cancel the effect of rtl_in_current_obstack. */
+ resume_temporary_allocation();
- /* Show no temporary slots allocated. */
- init_temp_slots ();
+ /* Show no temporary slots allocated. */
+ init_temp_slots();
- /* Release all memory held by regsets. */
- regset_release_memory ();
- /* END CYGNUS LOCAL */
- });
+ /* Release all memory held by regsets. */
+ regset_release_memory();
+ /* END CYGNUS LOCAL */
+ });
- /* Make sure volatile mem refs aren't considered valid operands for
- arithmetic insns. We must call this here if this is a nested inline
- function, since the above code leaves us in the init_recog state
- (from final.c), and the function context push/pop code does not
- save/restore volatile_ok.
+ /* Make sure volatile mem refs aren't considered valid operands for
+ arithmetic insns. We must call this here if this is a nested inline
+ function, since the above code leaves us in the init_recog state
+ (from final.c), and the function context push/pop code does not
+ save/restore volatile_ok.
- ??? Maybe it isn't necessary for expand_start_function to call this
- anymore if we do it here? */
+ ??? Maybe it isn't necessary for expand_start_function to call this
+ anymore if we do it here? */
- init_recog_no_volatile ();
+ init_recog_no_volatile();
- /* The parsing time is all the time spent in yyparse
- *except* what is spent in this function. */
+ /* The parsing time is all the time spent in yyparse
+ * except* what is spent in this function. */
- parse_time -= get_run_time () - start_time;
+ parse_time -= get_run_time() - start_time;
- /* Reset global variables. */
- free_basic_block_vars (0);
+ /* Reset global variables. */
+ free_basic_block_vars(0);
}
-
+
static void
-display_help ()
+display_help()
{
- int undoc;
- unsigned long i;
- char * lang;
-
- printf ("Usage: %s input [switches]\n", progname);
- printf ("Switches:\n");
- printf (" -ffixed-<register> Mark <register> as being unavailable to the compiler\n");
- printf (" -fcall-used-<register> Mark <register> as being corrupted by function calls\n");
- printf (" -fcall-saved-<register> Mark <register> as being preserved across functions\n");
-
- for (i = NUM_ELEM (f_options); i--;)
+ int undoc;
+ unsigned long i;
+ char * lang;
+
+ printf("Usage: %s input [switches]\n", progname);
+ printf("Switches:\n");
+ printf(" -ffixed-<register> Mark <register> as being unavailable to the compiler\n");
+ printf(" -fcall-used-<register> Mark <register> as being corrupted by function calls\n");
+ printf(" -fcall-saved-<register> Mark <register> as being preserved across functions\n");
+
+ for (i = NUM_ELEM(f_options); i--; )
{
- char * description = f_options[i].description;
-
- if (description != NULL && * description != 0)
- printf (" -f%-21s %s\n",
- f_options[i].string, description);
+ char * description = f_options[i].description;
+
+ if (description != NULL && *description != 0)
+ printf(" -f%-21s %s\n",
+ f_options[i].string, description);
}
-
- printf (" -O[number] Set optimisation level to [number]\n");
- printf (" -Os Optimise for space rather than speed\n");
- printf (" -pedantic Issue warnings needed by strict compliance to ANSI C\n");
- printf (" -pedantic-errors Like -pedantic except that errors are produced\n");
- printf (" -w Suppress warnings\n");
- printf (" -W Enable extra warnings\n");
-
- for (i = NUM_ELEM (W_options); i--;)
+
+ printf(" -O[number] Set optimisation level to [number]\n");
+ printf(" -Os Optimise for space rather than speed\n");
+ printf(" -pedantic Issue warnings needed by strict compliance to ANSI C\n");
+ printf(" -pedantic-errors Like -pedantic except that errors are produced\n");
+ printf(" -w Suppress warnings\n");
+ printf(" -W Enable extra warnings\n");
+
+ for (i = NUM_ELEM(W_options); i--; )
{
- char * description = W_options[i].description;
-
- if (description != NULL && * description != 0)
- printf (" -W%-21s %s\n",
- W_options[i].string, description);
+ char * description = W_options[i].description;
+
+ if (description != NULL && *description != 0)
+ printf(" -W%-21s %s\n",
+ W_options[i].string, description);
}
-
- printf (" -Wid-clash-<num> Warn if 2 identifiers have the same first <num> chars\n");
- printf (" -Wlarger-than-<number> Warn if an object is larger than <number> bytes\n");
- printf (" -o <file> Place output into <file> \n");
- printf (" -G <number> Put global and static data smaller than <number>\n");
- printf (" bytes into a special section (on some targets)\n");
- printf (" -g Enable debug output\n");
- printf (" -aux-info <file> Emit declaration info into <file>.X\n");
- /* CYGNUS LOCAL v850/law */
- printf (" -offset-info <file> Emit structure member offsets into <file>.s\n");
- /* CYGNUS LOCAL v850/law */
- printf (" -quiet Do not display functions compiled or elapsed time\n");
- printf (" -version Display the compiler's version\n");
- printf (" -d[letters] Enable dumps from specific passes of the compiler\n");
- printf (" -dumpbase <file> Base name to be used for dumps from specific passes\n");
- printf (" --help Display this information\n");
-
- undoc = 0;
- lang = "language";
-
- /* Display descriptions of language specific options.
- If there is no description, note that there is an undocumented option.
- If the description is empty, do not display anything. (This allows
- options to be deliberately undocumented, for whatever reason).
- If the option string is missing, then this is a marker, indicating
- that the description string is in fact the name of a language, whose
- language specific options are to follow. */
-
- if (NUM_ELEM (documented_lang_options) > 1)
+
+ printf(" -Wid-clash-<num> Warn if 2 identifiers have the same first <num> chars\n");
+ printf(" -Wlarger-than-<number> Warn if an object is larger than <number> bytes\n");
+ printf(" -o <file> Place output into <file> \n");
+ printf(" -G <number> Put global and static data smaller than <number>\n");
+ printf(" bytes into a special section (on some targets)\n");
+ printf(" -g Enable debug output\n");
+ printf(" -aux-info <file> Emit declaration info into <file>.X\n");
+ /* CYGNUS LOCAL v850/law */
+ printf(" -offset-info <file> Emit structure member offsets into <file>.s\n");
+ /* CYGNUS LOCAL v850/law */
+ printf(" -quiet Do not display functions compiled or elapsed time\n");
+ printf(" -version Display the compiler's version\n");
+ printf(" -d[letters] Enable dumps from specific passes of the compiler\n");
+ printf(" -dumpbase <file> Base name to be used for dumps from specific passes\n");
+ printf(" --help Display this information\n");
+
+ undoc = 0;
+ lang = "language";
+
+ /* Display descriptions of language specific options.
+ If there is no description, note that there is an undocumented option.
+ If the description is empty, do not display anything. (This allows
+ options to be deliberately undocumented, for whatever reason).
+ If the option string is missing, then this is a marker, indicating
+ that the description string is in fact the name of a language, whose
+ language specific options are to follow. */
+
+ if (NUM_ELEM(documented_lang_options) > 1)
{
- printf ("\nLanguage specific options:\n");
-
- for (i = 0; i < NUM_ELEM (documented_lang_options); i++)
- {
- char * description = documented_lang_options[i].description;
- char * option = documented_lang_options[i].option;
-
- if (description == NULL)
- {
- undoc = 1;
-
- if (extra_warnings)
- printf (" %-23.23s [undocumented]\n", option);
- }
- else if (* description == 0)
- continue;
- else if (option == NULL)
- {
- if (undoc)
- printf
- ("\nThere are undocumented %s specific options as well.\n",
- lang);
- undoc = 0;
-
- printf ("\n Options for %s:\n", description);
-
- lang = description;
- }
- else
- printf (" %-23.23s %s\n", option, description);
- }
+ printf("\nLanguage specific options:\n");
+
+ for (i = 0; i < NUM_ELEM(documented_lang_options); i++)
+ {
+ char * description = documented_lang_options[i].description;
+ char * option = documented_lang_options[i].option;
+
+ if (description == NULL)
+ {
+ undoc = 1;
+
+ if (extra_warnings)
+ printf(" %-23.23s [undocumented]\n", option);
+ }
+ else if (*description == 0)
+ continue;
+ else if (option == NULL)
+ {
+ if (undoc)
+ printf
+ ("\nThere are undocumented %s specific options as well.\n",
+ lang);
+ undoc = 0;
+
+ printf("\n Options for %s:\n", description);
+
+ lang = description;
+ }
+ else
+ printf(" %-23.23s %s\n", option, description);
+ }
}
- if (undoc)
- printf ("\nThere are undocumented %s specific options as well.\n", lang);
+ if (undoc)
+ printf("\nThere are undocumented %s specific options as well.\n", lang);
- if (NUM_ELEM (target_switches) > 1
+ if (NUM_ELEM(target_switches) > 1
#ifdef TARGET_OPTIONS
- || NUM_ELEM (target_options) > 1
+ || NUM_ELEM(target_options) > 1
#endif
- )
+ )
{
- int doc = 0;
-
- undoc = 0;
-
- printf ("\nTarget specific options:\n");
-
- for (i = NUM_ELEM (target_switches); i--;)
- {
- char * option = target_switches[i].name;
- char * description = target_switches[i].description;
-
- if (option == NULL || * option == 0)
- continue;
- else if (description == NULL)
- {
- undoc = 1;
-
- if (extra_warnings)
- printf (" -m%-21.21s [undocumented]\n", option);
- }
- else if (* description != 0)
- doc += printf (" -m%-21.21s %s\n", option, description);
- }
-
-#ifdef TARGET_OPTIONS
- for (i = NUM_ELEM (target_options); i--;)
- {
- char * option = target_options[i].prefix;
- char * description = target_options[i].description;
-
- if (option == NULL || * option == 0)
- continue;
- else if (description == NULL)
- {
- undoc = 1;
-
- if (extra_warnings)
- printf (" -m%-21.21s [undocumented]\n", option);
- }
- else if (* description != 0)
- doc += printf (" -m%-21.21s %s\n", option, description);
- }
+ int doc = 0;
+
+ undoc = 0;
+
+ printf("\nTarget specific options:\n");
+
+ for (i = NUM_ELEM(target_switches); i--; )
+ {
+ char * option = target_switches[i].name;
+ char * description = target_switches[i].description;
+
+ if (option == NULL || *option == 0)
+ continue;
+ else if (description == NULL)
+ {
+ undoc = 1;
+
+ if (extra_warnings)
+ printf(" -m%-21.21s [undocumented]\n", option);
+ }
+ else if (*description != 0)
+ doc += printf(" -m%-21.21s %s\n", option, description);
+ }
+
+#ifdef TARGET_OPTIONS
+ for (i = NUM_ELEM(target_options); i--; )
+ {
+ char * option = target_options[i].prefix;
+ char * description = target_options[i].description;
+
+ if (option == NULL || *option == 0)
+ continue;
+ else if (description == NULL)
+ {
+ undoc = 1;
+
+ if (extra_warnings)
+ printf(" -m%-21.21s [undocumented]\n", option);
+ }
+ else if (*description != 0)
+ doc += printf(" -m%-21.21s %s\n", option, description);
+ }
#endif
- if (undoc)
- {
- if (doc)
- printf ("\nThere are undocumented target specific options as well.\n");
- else
- printf (" They exist, but they are not documented.\n");
- }
+ if (undoc)
+ {
+ if (doc)
+ printf("\nThere are undocumented target specific options as well.\n");
+ else
+ printf(" They exist, but they are not documented.\n");
+ }
}
}
@@ -3751,736 +3751,736 @@ display_help ()
static int
check_lang_option (option, lang_option)
- char * option;
- char * lang_option;
+char * option;
+char * lang_option;
{
- lang_independent_options * indep_options;
- int len;
- long k;
- char * space;
-
- /* Ignore NULL entries. */
- if (option == NULL || lang_option == NULL)
- return 0;
+ lang_independent_options * indep_options;
+ int len;
+ long k;
+ char * space;
- if ((space = strchr (lang_option, ' ')) != NULL)
- len = space - lang_option;
- else
- len = strlen (lang_option);
-
- /* If they do not match to the first n characters then fail. */
- if (strncmp (option, lang_option, len) != 0)
- return 0;
-
- /* Do not accept a lang option, if it matches a normal -f or -W
- option. Chill defines a -fpack, but we want to support
- -fpack-struct. */
-
- /* An exact match is OK */
- if ((int) strlen (option) == len)
- return 1;
-
- /* If it is not an -f or -W option allow the match */
- if (option[0] != '-')
- return 1;
-
- switch (option[1])
+ /* Ignore NULL entries. */
+ if (option == NULL || lang_option == NULL)
+ return 0;
+
+ if ((space = strchr(lang_option, ' ')) != NULL)
+ len = space - lang_option;
+ else
+ len = strlen(lang_option);
+
+ /* If they do not match to the first n characters then fail. */
+ if (strncmp(option, lang_option, len) != 0)
+ return 0;
+
+ /* Do not accept a lang option, if it matches a normal -f or -W
+ option. Chill defines a -fpack, but we want to support
+ -fpack-struct. */
+
+ /* An exact match is OK */
+ if ((int) strlen(option) == len)
+ return 1;
+
+ /* If it is not an -f or -W option allow the match */
+ if (option[0] != '-')
+ return 1;
+
+ switch (option[1])
{
case 'f': indep_options = f_options; break;
case 'W': indep_options = W_options; break;
default: return 1;
}
-
- /* The option is a -f or -W option.
- Skip past the prefix and search for the remainder in the
- appropriate table of options. */
- option += 2;
-
- if (option[0] == 'n' && option[1] == 'o' && option[2] == '-')
- option += 3;
-
- for (k = NUM_ELEM (indep_options); k--;)
+
+ /* The option is a -f or -W option.
+ Skip past the prefix and search for the remainder in the
+ appropriate table of options. */
+ option += 2;
+
+ if (option[0] == 'n' && option[1] == 'o' && option[2] == '-')
+ option += 3;
+
+ for (k = NUM_ELEM(indep_options); k--; )
{
- if (!strcmp (option, indep_options[k].string))
- {
- /* The option matched a language independent option,
- do not allow the language specific match. */
-
- return 0;
- }
+ if (!strcmp(option, indep_options[k].string))
+ {
+ /* The option matched a language independent option,
+ do not allow the language specific match. */
+
+ return 0;
+ }
}
-
- /* The option matches the start of the langauge specific option
- and it is not an exact match for a language independent option. */
- return 1;
+
+ /* The option matches the start of the langauge specific option
+ and it is not an exact match for a language independent option. */
+ return 1;
}
-
+
/* Entry point of cc1/c++. Decode command args, then call compile_file.
Exit code is 35 if can't open files, 34 if fatal error,
33 if had nonfatal errors, else success. */
int
main (argc, argv)
- int argc;
- char **argv;
+int argc;
+char **argv;
{
- register int i;
- char *filename = 0;
- int version_flag = 0;
- char *p;
+ register int i;
+ char *filename = 0;
+ int version_flag = 0;
+ char *p;
- /* save in case md file wants to emit args as a comment. */
- save_argc = argc;
- save_argv = argv;
+ /* save in case md file wants to emit args as a comment. */
+ save_argc = argc;
+ save_argv = argv;
- p = argv[0] + strlen (argv[0]);
- while (p != argv[0] && p[-1] != '/'
+ p = argv[0] + strlen(argv[0]);
+ while (p != argv[0] && p[-1] != '/'
#ifdef DIR_SEPARATOR
- && p[-1] != DIR_SEPARATOR
+ && p[-1] != DIR_SEPARATOR
#endif
- )
- --p;
- progname = p;
+ )
+ --p;
+ progname = p;
- signal (SIGFPE, float_signal);
+ signal(SIGFPE, float_signal);
#ifdef SIGPIPE
- signal (SIGPIPE, pipe_closed);
+ signal(SIGPIPE, pipe_closed);
#endif
- decl_printable_name = decl_name;
- lang_expand_expr = (lang_expand_expr_t) do_abort;
+ decl_printable_name = decl_name;
+ lang_expand_expr = (lang_expand_expr_t) do_abort;
#ifdef DEFAULT_SHORT_ENUMS
- /* Initialize how much space enums occupy, by default. */
- flag_short_enums = DEFAULT_SHORT_ENUMS;
+ /* Initialize how much space enums occupy, by default. */
+ flag_short_enums = DEFAULT_SHORT_ENUMS;
#endif
- /* Scan to see what optimization level has been specified. That will
- determine the default value of many flags. */
- for (i = 1; i < argc; i++)
+ /* Scan to see what optimization level has been specified. That will
+ determine the default value of many flags. */
+ for (i = 1; i < argc; i++)
{
- if (!strcmp (argv[i], "-O"))
- {
- optimize = 1;
- optimize_size = 0;
- }
- else if (argv[i][0] == '-' && argv[i][1] == 'O')
- {
- /* Handle -Os, -O2, -O3, -O69, ... */
- char *p = &argv[i][2];
- int c;
-
- if ((p[0] == 's') && (p[1] == 0))
- {
- optimize_size = 1;
-
- /* Optimizing for size forces optimize to be 2. */
- optimize = 2;
- }
- else
- {
- while ((c = *p++))
- if (! (c >= '0' && c <= '9'))
- break;
- if (c == 0)
- {
- optimize = atoi (&argv[i][2]);
- optimize_size = 0;
- }
- }
- }
+ if (!strcmp(argv[i], "-O"))
+ {
+ optimize = 1;
+ optimize_size = 0;
+ }
+ else if (argv[i][0] == '-' && argv[i][1] == 'O')
+ {
+ /* Handle -Os, -O2, -O3, -O69, ... */
+ char *p = &argv[i][2];
+ int c;
+
+ if ((p[0] == 's') && (p[1] == 0))
+ {
+ optimize_size = 1;
+
+ /* Optimizing for size forces optimize to be 2. */
+ optimize = 2;
+ }
+ else
+ {
+ while ((c = *p++))
+ if (!(c >= '0' && c <= '9'))
+ break;
+ if (c == 0)
+ {
+ optimize = atoi(&argv[i][2]);
+ optimize_size = 0;
+ }
+ }
+ }
}
- obey_regdecls = (optimize == 0);
+ obey_regdecls = (optimize == 0);
- if (optimize >= 1)
+ if (optimize >= 1)
{
- flag_defer_pop = 1;
- flag_thread_jumps = 1;
+ flag_defer_pop = 1;
+ flag_thread_jumps = 1;
#ifdef CAN_DEBUG_WITHOUT_FP
- flag_omit_frame_pointer = 1;
+ flag_omit_frame_pointer = 1;
#endif
}
- if (optimize >= 2)
+ if (optimize >= 2)
{
- flag_cse_follow_jumps = 1;
- flag_cse_skip_blocks = 1;
- flag_gcse = 1;
- flag_expensive_optimizations = 1;
- flag_strength_reduce = 1;
- flag_rerun_cse_after_loop = 1;
- flag_rerun_loop_opt = 1;
- flag_caller_saves = 1;
- flag_force_mem = 1;
- flag_regmove = 1;
- flag_strict_aliasing = 1;
+ flag_cse_follow_jumps = 1;
+ flag_cse_skip_blocks = 1;
+ flag_gcse = 1;
+ flag_expensive_optimizations = 1;
+ flag_strength_reduce = 1;
+ flag_rerun_cse_after_loop = 1;
+ flag_rerun_loop_opt = 1;
+ flag_caller_saves = 1;
+ flag_force_mem = 1;
+ flag_regmove = 1;
+ flag_strict_aliasing = 1;
}
- if (optimize >= 3)
+ if (optimize >= 3)
{
- flag_inline_functions = 1;
+ flag_inline_functions = 1;
}
- /* Initialize target_flags before OPTIMIZATION_OPTIONS so the latter can
- modify it. */
- target_flags = 0;
- set_target_switch ("");
+ /* Initialize target_flags before OPTIMIZATION_OPTIONS so the latter can
+ modify it. */
+ target_flags = 0;
+ set_target_switch("");
#ifdef OPTIMIZATION_OPTIONS
- /* Allow default optimizations to be specified on a per-machine basis. */
- OPTIMIZATION_OPTIONS (optimize, optimize_size);
+ /* Allow default optimizations to be specified on a per-machine basis. */
+ OPTIMIZATION_OPTIONS(optimize, optimize_size);
#endif
- /* Initialize register usage now so switches may override. */
- init_reg_sets ();
+ /* Initialize register usage now so switches may override. */
+ init_reg_sets();
- for (i = 1; i < argc; i++)
+ for (i = 1; i < argc; i++)
{
- if (!strcmp (argv[i], "--help"))
- {
- display_help ();
- exit (0);
- }
-
- size_t j;
-
- /* If this is a language-specific option,
- decode it in a language-specific way. */
- for (j = NUM_ELEM (documented_lang_options); j--;)
- if (check_lang_option (argv[i], documented_lang_options[j].option))
- break;
-
- if (j != (size_t)-1)
- {
- c_decode_option (argv[i]);
- }
- else if (argv[i][0] == '-' && argv[i][1] != 0)
- {
- register char *str = argv[i] + 1;
- if (str[0] == 'Y')
- str++;
-
- if (str[0] == 'm')
- set_target_switch (&str[1]);
- else if (!strcmp (str, "dumpbase"))
- {
- dump_base_name = argv[++i];
- }
- else if (str[0] == 'd')
- {
- register char *p = &str[1];
- while (*p)
- switch (*p++)
- {
- case 'a':
- combine_dump = 1;
- flow_dump = 1;
- global_reg_dump = 1;
- jump_opt_dump = 1;
- addressof_dump = 1;
- jump2_opt_dump = 1;
- local_reg_dump = 1;
- loop_dump = 1;
- regmove_dump = 1;
- rtl_dump = 1;
- cse_dump = 1, cse2_dump = 1;
- gcse_dump = 1;
- sched_dump = 1;
- sched2_dump = 1;
+ if (!strcmp(argv[i], "--help"))
+ {
+ display_help();
+ exit(0);
+ }
+
+ size_t j;
+
+ /* If this is a language-specific option,
+ decode it in a language-specific way. */
+ for (j = NUM_ELEM(documented_lang_options); j--; )
+ if (check_lang_option(argv[i], documented_lang_options[j].option))
+ break;
+
+ if (j != (size_t)-1)
+ {
+ c_decode_option(argv[i]);
+ }
+ else if (argv[i][0] == '-' && argv[i][1] != 0)
+ {
+ register char *str = argv[i] + 1;
+ if (str[0] == 'Y')
+ str++;
+
+ if (str[0] == 'm')
+ set_target_switch(&str[1]);
+ else if (!strcmp(str, "dumpbase"))
+ {
+ dump_base_name = argv[++i];
+ }
+ else if (str[0] == 'd')
+ {
+ register char *p = &str[1];
+ while (*p)
+ switch (*p++)
+ {
+ case 'a':
+ combine_dump = 1;
+ flow_dump = 1;
+ global_reg_dump = 1;
+ jump_opt_dump = 1;
+ addressof_dump = 1;
+ jump2_opt_dump = 1;
+ local_reg_dump = 1;
+ loop_dump = 1;
+ regmove_dump = 1;
+ rtl_dump = 1;
+ cse_dump = 1, cse2_dump = 1;
+ gcse_dump = 1;
+ sched_dump = 1;
+ sched2_dump = 1;
#ifdef MACHINE_DEPENDENT_REORG
- mach_dep_reorg_dump = 1;
+ mach_dep_reorg_dump = 1;
#endif
- break;
- case 'A':
- flag_debug_asm = 1;
- break;
- case 'c':
- combine_dump = 1;
- break;
- case 'f':
- flow_dump = 1;
- break;
- case 'F':
- addressof_dump = 1;
- break;
- case 'g':
- global_reg_dump = 1;
- break;
- case 'G':
- gcse_dump = 1;
- break;
- case 'j':
- jump_opt_dump = 1;
- break;
- case 'J':
- jump2_opt_dump = 1;
- break;
- case 'l':
- local_reg_dump = 1;
- break;
- case 'L':
- loop_dump = 1;
- break;
+ break;
+ case 'A':
+ flag_debug_asm = 1;
+ break;
+ case 'c':
+ combine_dump = 1;
+ break;
+ case 'f':
+ flow_dump = 1;
+ break;
+ case 'F':
+ addressof_dump = 1;
+ break;
+ case 'g':
+ global_reg_dump = 1;
+ break;
+ case 'G':
+ gcse_dump = 1;
+ break;
+ case 'j':
+ jump_opt_dump = 1;
+ break;
+ case 'J':
+ jump2_opt_dump = 1;
+ break;
+ case 'l':
+ local_reg_dump = 1;
+ break;
+ case 'L':
+ loop_dump = 1;
+ break;
#ifdef MACHINE_DEPENDENT_REORG
- case 'M':
- mach_dep_reorg_dump = 1;
- break;
+ case 'M':
+ mach_dep_reorg_dump = 1;
+ break;
#endif
- case 'p':
- flag_print_asm_name = 1;
- break;
- case 'r':
- rtl_dump = 1;
- break;
- case 'R':
- sched2_dump = 1;
- break;
- case 's':
- cse_dump = 1;
- break;
- case 'S':
- sched_dump = 1;
- break;
- case 't':
- cse2_dump = 1;
- break;
- case 'N':
- regmove_dump = 1;
- break;
- case 'v':
- graph_dump_format = vcg;
- break;
- case 'y':
- set_yydebug (1);
- break;
- case 'x':
- rtl_dump_and_exit = 1;
- break;
- case 'D': /* these are handled by the preprocessor */
- case 'I':
- break;
- default:
- warning ("unrecognised gcc debugging option: %c", p[-1]);
- break;
- }
- }
- else if (str[0] == 'f')
- {
- register char *p = &str[1];
- int found = 0;
-
- /* Some kind of -f option.
- P's value is the option sans `-f'.
- Search for it in the table of options. */
-
- for (j = 0;
- !found && j < sizeof (f_options) / sizeof (f_options[0]);
- j++)
- {
- if (!strcmp (p, f_options[j].string))
- {
- *f_options[j].variable = f_options[j].on_value;
- /* A goto here would be cleaner,
- but breaks the vax pcc. */
- found = 1;
- }
- if (p[0] == 'n' && p[1] == 'o' && p[2] == '-'
- && ! strcmp (p+3, f_options[j].string))
- {
- *f_options[j].variable = ! f_options[j].on_value;
- found = 1;
- }
- }
-
- if (found)
- ;
- else if (!strncmp (p, "fixed-", 6))
- fix_register (&p[6], 1, 1);
- else if (!strncmp (p, "call-used-", 10))
- fix_register (&p[10], 0, 1);
- else if (!strncmp (p, "call-saved-", 11))
- fix_register (&p[11], 0, 0);
- else
- error ("Invalid option `%s'", argv[i]);
- }
- else if (str[0] == 'O')
- {
- register char *p = str+1;
- if (*p == 's')
- p++;
- else
- while (*p && *p >= '0' && *p <= '9')
- p++;
- if (*p == '\0')
- ;
- else
- error ("Invalid option `%s'", argv[i]);
- }
- else if (!strcmp (str, "pedantic"))
- pedantic = 1;
- else if (!strcmp (str, "pedantic-errors"))
- flag_pedantic_errors = pedantic = 1;
- else if (!strcmp (str, "quiet"))
- quiet_flag = 1;
- else if (!strcmp (str, "version"))
- version_flag = 1;
- else if (!strcmp (str, "w"))
- inhibit_warnings = 1;
- else if (!strcmp (str, "W"))
- {
- extra_warnings = 1;
- /* We save the value of warn_uninitialized, since if they put
- -Wuninitialized on the command line, we need to generate a
- warning about not using it without also specifying -O. */
- if (warn_uninitialized != 1)
- warn_uninitialized = 2;
- }
- else if (str[0] == 'W')
- {
- register char *p = &str[1];
- int found = 0;
-
- /* Some kind of -W option.
- P's value is the option sans `-W'.
- Search for it in the table of options. */
-
- for (j = 0;
- !found && j < sizeof (W_options) / sizeof (W_options[0]);
- j++)
- {
- if (!strcmp (p, W_options[j].string))
- {
- *W_options[j].variable = W_options[j].on_value;
- /* A goto here would be cleaner,
- but breaks the vax pcc. */
- found = 1;
- }
- if (p[0] == 'n' && p[1] == 'o' && p[2] == '-'
- && ! strcmp (p+3, W_options[j].string))
- {
- *W_options[j].variable = ! W_options[j].on_value;
- found = 1;
- }
- }
-
- if (found)
- ;
- else if (!strncmp (p, "id-clash-", 9))
- {
- char *endp = p + 9;
-
- while (*endp)
- {
- if (*endp >= '0' && *endp <= '9')
- endp++;
- else
- {
- error ("Invalid option `%s'", argv[i]);
- goto id_clash_lose;
- }
- }
- warn_id_clash = 1;
- id_clash_len = atoi (str + 10);
- id_clash_lose: ;
- }
- else if (!strncmp (p, "larger-than-", 12))
- {
- char *endp = p + 12;
-
- while (*endp)
- {
- if (*endp >= '0' && *endp <= '9')
- endp++;
- else
- {
- error ("Invalid option `%s'", argv[i]);
- goto larger_than_lose;
- }
- }
- warn_larger_than = 1;
- larger_than_size = atoi (str + 13);
- larger_than_lose: ;
- }
- else
- error ("Invalid option `%s'", argv[i]);
- }
- else if (!strcmp (str, "p"))
- {
- warning ("`-p' option (function profiling) not supported");
- }
- else if (!strcmp (str, "a"))
- {
- warning ("`-a' option (basic block profile) not supported");
- }
- else if (!strcmp (str, "ax"))
- {
- warning ("`-ax' option (jump profiling) not supported");
- }
- else if (str[0] == 'g')
- {
- unsigned len;
- unsigned level;
- /* A lot of code assumes write_symbols == NO_DEBUG if the
- debugging level is 0 (thus -gstabs1 -gstabs0 would lose track
- of what debugging type has been selected). This records the
- selected type. It is an error to specify more than one
- debugging type. */
- static enum debug_info_type selected_debug_type = NO_DEBUG;
- /* Non-zero if debugging format has been explicitly set.
- -g and -ggdb don't explicitly set the debugging format so
- -gdwarf -g3 is equivalent to -gdwarf3. */
- static int type_explicitly_set_p = 0;
- /* Indexed by enum debug_info_type. */
- static char *debug_type_names[] =
- {
- "none", "stabs", "coff", "dwarf-1", "dwarf-2", "xcoff"
- };
-
- /* Look up STR in the table. */
- for (da = debug_args; da->arg; da++)
- {
- if (! strncmp (str, da->arg, strlen (da->arg)))
- {
- enum debug_info_type type = da->debug_type;
- char *p, *q;
-
- p = str + strlen (da->arg);
- if (*p && (*p < '0' || *p > '9'))
- continue;
- len = p - str;
- q = p;
- while (*q && (*q >= '0' && *q <= '9'))
- q++;
- if (*p)
- {
- level = atoi (p);
- if (len > 1 && !strncmp (str, "gdwarf", len))
- {
- error ("use -gdwarf -g%d for DWARF v1, level %d",
- level, level);
- if (level == 2)
- error ("use -gdwarf-2 for DWARF v2");
- }
- }
- else
- level = 2; /* default debugging info level */
- if (*q || level > 3)
- {
- warning ("invalid debug level specification in option: `-%s'",
- str);
- /* ??? This error message is incorrect in the case of
- -g4 -g. */
- warning ("no debugging information will be generated");
- level = 0;
- }
-
- if (type == NO_DEBUG)
- {
- type = PREFERRED_DEBUGGING_TYPE;
- if (len > 1 && strncmp (str, "ggdb", len) == 0)
- {
+ case 'p':
+ flag_print_asm_name = 1;
+ break;
+ case 'r':
+ rtl_dump = 1;
+ break;
+ case 'R':
+ sched2_dump = 1;
+ break;
+ case 's':
+ cse_dump = 1;
+ break;
+ case 'S':
+ sched_dump = 1;
+ break;
+ case 't':
+ cse2_dump = 1;
+ break;
+ case 'N':
+ regmove_dump = 1;
+ break;
+ case 'v':
+ graph_dump_format = vcg;
+ break;
+ case 'y':
+ set_yydebug(1);
+ break;
+ case 'x':
+ rtl_dump_and_exit = 1;
+ break;
+ case 'D': /* these are handled by the preprocessor */
+ case 'I':
+ break;
+ default:
+ warning("unrecognised gcc debugging option: %c", p[-1]);
+ break;
+ }
+ }
+ else if (str[0] == 'f')
+ {
+ register char *p = &str[1];
+ int found = 0;
+
+ /* Some kind of -f option.
+ P's value is the option sans `-f'.
+ Search for it in the table of options. */
+
+ for (j = 0;
+ !found && j < sizeof (f_options) / sizeof (f_options[0]);
+ j++)
+ {
+ if (!strcmp(p, f_options[j].string))
+ {
+ *f_options[j].variable = f_options[j].on_value;
+ /* A goto here would be cleaner,
+ but breaks the vax pcc. */
+ found = 1;
+ }
+ if (p[0] == 'n' && p[1] == 'o' && p[2] == '-'
+ && !strcmp(p+3, f_options[j].string))
+ {
+ *f_options[j].variable = !f_options[j].on_value;
+ found = 1;
+ }
+ }
+
+ if (found)
+ ;
+ else if (!strncmp(p, "fixed-", 6))
+ fix_register(&p[6], 1, 1);
+ else if (!strncmp(p, "call-used-", 10))
+ fix_register(&p[10], 0, 1);
+ else if (!strncmp(p, "call-saved-", 11))
+ fix_register(&p[11], 0, 0);
+ else
+ error("Invalid option `%s'", argv[i]);
+ }
+ else if (str[0] == 'O')
+ {
+ register char *p = str+1;
+ if (*p == 's')
+ p++;
+ else
+ while (*p && *p >= '0' && *p <= '9')
+ p++;
+ if (*p == '\0')
+ ;
+ else
+ error("Invalid option `%s'", argv[i]);
+ }
+ else if (!strcmp(str, "pedantic"))
+ pedantic = 1;
+ else if (!strcmp(str, "pedantic-errors"))
+ flag_pedantic_errors = pedantic = 1;
+ else if (!strcmp(str, "quiet"))
+ quiet_flag = 1;
+ else if (!strcmp(str, "version"))
+ version_flag = 1;
+ else if (!strcmp(str, "w"))
+ inhibit_warnings = 1;
+ else if (!strcmp(str, "W"))
+ {
+ extra_warnings = 1;
+ /* We save the value of warn_uninitialized, since if they put
+ -Wuninitialized on the command line, we need to generate a
+ warning about not using it without also specifying -O. */
+ if (warn_uninitialized != 1)
+ warn_uninitialized = 2;
+ }
+ else if (str[0] == 'W')
+ {
+ register char *p = &str[1];
+ int found = 0;
+
+ /* Some kind of -W option.
+ P's value is the option sans `-W'.
+ Search for it in the table of options. */
+
+ for (j = 0;
+ !found && j < sizeof (W_options) / sizeof (W_options[0]);
+ j++)
+ {
+ if (!strcmp(p, W_options[j].string))
+ {
+ *W_options[j].variable = W_options[j].on_value;
+ /* A goto here would be cleaner,
+ but breaks the vax pcc. */
+ found = 1;
+ }
+ if (p[0] == 'n' && p[1] == 'o' && p[2] == '-'
+ && !strcmp(p+3, W_options[j].string))
+ {
+ *W_options[j].variable = !W_options[j].on_value;
+ found = 1;
+ }
+ }
+
+ if (found)
+ ;
+ else if (!strncmp(p, "id-clash-", 9))
+ {
+ char *endp = p + 9;
+
+ while (*endp)
+ {
+ if (*endp >= '0' && *endp <= '9')
+ endp++;
+ else
+ {
+ error("Invalid option `%s'", argv[i]);
+ goto id_clash_lose;
+ }
+ }
+ warn_id_clash = 1;
+ id_clash_len = atoi(str + 10);
+id_clash_lose:;
+ }
+ else if (!strncmp(p, "larger-than-", 12))
+ {
+ char *endp = p + 12;
+
+ while (*endp)
+ {
+ if (*endp >= '0' && *endp <= '9')
+ endp++;
+ else
+ {
+ error("Invalid option `%s'", argv[i]);
+ goto larger_than_lose;
+ }
+ }
+ warn_larger_than = 1;
+ larger_than_size = atoi(str + 13);
+larger_than_lose:;
+ }
+ else
+ error("Invalid option `%s'", argv[i]);
+ }
+ else if (!strcmp(str, "p"))
+ {
+ warning("`-p' option (function profiling) not supported");
+ }
+ else if (!strcmp(str, "a"))
+ {
+ warning("`-a' option (basic block profile) not supported");
+ }
+ else if (!strcmp(str, "ax"))
+ {
+ warning("`-ax' option (jump profiling) not supported");
+ }
+ else if (str[0] == 'g')
+ {
+ unsigned len;
+ unsigned level;
+ /* A lot of code assumes write_symbols == NO_DEBUG if the
+ debugging level is 0 (thus -gstabs1 -gstabs0 would lose track
+ of what debugging type has been selected). This records the
+ selected type. It is an error to specify more than one
+ debugging type. */
+ static enum debug_info_type selected_debug_type = NO_DEBUG;
+ /* Non-zero if debugging format has been explicitly set.
+ -g and -ggdb don't explicitly set the debugging format so
+ -gdwarf -g3 is equivalent to -gdwarf3. */
+ static int type_explicitly_set_p = 0;
+ /* Indexed by enum debug_info_type. */
+ static char *debug_type_names[] =
+ {
+ "none", "stabs", "coff", "dwarf-1", "dwarf-2", "xcoff"
+ };
+
+ /* Look up STR in the table. */
+ for (da = debug_args; da->arg; da++)
+ {
+ if (!strncmp(str, da->arg, strlen(da->arg)))
+ {
+ enum debug_info_type type = da->debug_type;
+ char *p, *q;
+
+ p = str + strlen(da->arg);
+ if (*p && (*p < '0' || *p > '9'))
+ continue;
+ len = p - str;
+ q = p;
+ while (*q && (*q >= '0' && *q <= '9'))
+ q++;
+ if (*p)
+ {
+ level = atoi(p);
+ if (len > 1 && !strncmp(str, "gdwarf", len))
+ {
+ error("use -gdwarf -g%d for DWARF v1, level %d",
+ level, level);
+ if (level == 2)
+ error("use -gdwarf-2 for DWARF v2");
+ }
+ }
+ else
+ level = 2; /* default debugging info level */
+ if (*q || level > 3)
+ {
+ warning("invalid debug level specification in option: `-%s'",
+ str);
+ /* ??? This error message is incorrect in the case of
+ -g4 -g. */
+ warning("no debugging information will be generated");
+ level = 0;
+ }
+
+ if (type == NO_DEBUG)
+ {
+ type = PREFERRED_DEBUGGING_TYPE;
+ if (len > 1 && strncmp(str, "ggdb", len) == 0)
+ {
#if defined (DWARF2_DEBUGGING_INFO) && !defined (LINKER_DOES_NOT_WORK_WITH_DWARF2)
- type = DWARF2_DEBUG;
+ type = DWARF2_DEBUG;
#else
#endif
- }
- }
-
- if (type == NO_DEBUG)
- warning ("`-%s' not supported by this configuration of GCC",
- str);
-
- /* Does it conflict with an already selected type? */
- if (type_explicitly_set_p
- /* -g/-ggdb don't conflict with anything */
- && da->debug_type != NO_DEBUG
- && type != selected_debug_type)
- warning ("`-%s' ignored, conflicts with `-g%s'",
- str, debug_type_names[(int) selected_debug_type]);
- else
- {
- /* If the format has already been set, -g/-ggdb
- only change the debug level. */
- if (type_explicitly_set_p
- && da->debug_type == NO_DEBUG)
- ; /* don't change debugging type */
- else
- {
- selected_debug_type = type;
- type_explicitly_set_p = da->debug_type != NO_DEBUG;
- }
- write_symbols = (level == 0
- ? NO_DEBUG
- : selected_debug_type);
- debug_info_level = (enum debug_info_level) level;
- }
- break;
- }
- }
- if (! da->arg)
- warning ("`-%s' not supported by this configuration of GCC",
- str);
- }
- else if (!strcmp (str, "o"))
- {
- asm_file_name = argv[++i];
- }
- else if (str[0] == 'G')
- {
- g_switch_set = TRUE;
- g_switch_value = atoi ((str[1] != '\0') ? str+1 : argv[++i]);
- }
- else if (!strncmp (str, "aux-info", 8))
- {
- flag_gen_aux_info = 1;
- aux_info_file_name = (str[8] != '\0' ? str+8 : argv[++i]);
- }
- /* CYGNUS LOCAL v850/law */
- else if (!strncmp (str, "offset-info", 11))
- {
- flag_gen_offset_info = 1;
- offset_info_file_name = (str[11] != '\0' ? str+11 : argv[++i]);
- }
- /* END CYGNUS LOCAL */
- else if (!strcmp (str, "-help"))
- {
- display_help ();
- exit (0);
- }
- else
- error ("Invalid option `%s'", argv[i]);
- }
- else if (argv[i][0] == '+')
- error ("Invalid option `%s'", argv[i]);
- else
- filename = argv[i];
+ }
+ }
+
+ if (type == NO_DEBUG)
+ warning("`-%s' not supported by this configuration of GCC",
+ str);
+
+ /* Does it conflict with an already selected type? */
+ if (type_explicitly_set_p
+ /* -g/-ggdb don't conflict with anything */
+ && da->debug_type != NO_DEBUG
+ && type != selected_debug_type)
+ warning("`-%s' ignored, conflicts with `-g%s'",
+ str, debug_type_names[(int) selected_debug_type]);
+ else
+ {
+ /* If the format has already been set, -g/-ggdb
+ only change the debug level. */
+ if (type_explicitly_set_p
+ && da->debug_type == NO_DEBUG)
+ ; /* don't change debugging type */
+ else
+ {
+ selected_debug_type = type;
+ type_explicitly_set_p = da->debug_type != NO_DEBUG;
+ }
+ write_symbols = (level == 0
+ ? NO_DEBUG
+ : selected_debug_type);
+ debug_info_level = (enum debug_info_level) level;
+ }
+ break;
+ }
+ }
+ if (!da->arg)
+ warning("`-%s' not supported by this configuration of GCC",
+ str);
+ }
+ else if (!strcmp(str, "o"))
+ {
+ asm_file_name = argv[++i];
+ }
+ else if (str[0] == 'G')
+ {
+ g_switch_set = TRUE;
+ g_switch_value = atoi((str[1] != '\0') ? str+1 : argv[++i]);
+ }
+ else if (!strncmp(str, "aux-info", 8))
+ {
+ flag_gen_aux_info = 1;
+ aux_info_file_name = (str[8] != '\0' ? str+8 : argv[++i]);
+ }
+ /* CYGNUS LOCAL v850/law */
+ else if (!strncmp(str, "offset-info", 11))
+ {
+ flag_gen_offset_info = 1;
+ offset_info_file_name = (str[11] != '\0' ? str+11 : argv[++i]);
+ }
+ /* END CYGNUS LOCAL */
+ else if (!strcmp(str, "-help"))
+ {
+ display_help();
+ exit(0);
+ }
+ else
+ error("Invalid option `%s'", argv[i]);
+ }
+ else if (argv[i][0] == '+')
+ error("Invalid option `%s'", argv[i]);
+ else
+ filename = argv[i];
}
- /* Checker uses the frame pointer. */
- if (flag_check_memory_usage)
- flag_omit_frame_pointer = 0;
+ /* Checker uses the frame pointer. */
+ if (flag_check_memory_usage)
+ flag_omit_frame_pointer = 0;
- if (optimize == 0)
+ if (optimize == 0)
{
- /* Inlining does not work if not optimizing,
- so force it not to be done. */
- flag_no_inline = 1;
- warn_inline = 0;
-
- /* The c_decode_option and lang_decode_option functions set
- this to `2' if -Wall is used, so we can avoid giving out
- lots of errors for people who don't realize what -Wall does. */
- if (warn_uninitialized == 1)
- warning ("-Wuninitialized is not supported without -O");
+ /* Inlining does not work if not optimizing,
+ so force it not to be done. */
+ flag_no_inline = 1;
+ warn_inline = 0;
+
+ /* The c_decode_option and lang_decode_option functions set
+ this to `2' if -Wall is used, so we can avoid giving out
+ lots of errors for people who don't realize what -Wall does. */
+ if (warn_uninitialized == 1)
+ warning("-Wuninitialized is not supported without -O");
}
#ifdef OVERRIDE_OPTIONS
- /* Some machines may reject certain combinations of options. */
- OVERRIDE_OPTIONS;
+ /* Some machines may reject certain combinations of options. */
+ OVERRIDE_OPTIONS;
#endif
- if (exceptions_via_longjmp == 2)
+ if (exceptions_via_longjmp == 2)
{
#ifdef DWARF2_UNWIND_INFO
- exceptions_via_longjmp = ! DWARF2_UNWIND_INFO;
+ exceptions_via_longjmp = !DWARF2_UNWIND_INFO;
#else
- exceptions_via_longjmp = 1;
+ exceptions_via_longjmp = 1;
#endif
}
- /* Unrolling all loops implies that standard loop unrolling must also
- be done. */
- if (flag_unroll_all_loops)
- flag_unroll_loops = 1;
- /* Loop unrolling requires that strength_reduction be on also. Silently
- turn on strength reduction here if it isn't already on. Also, the loop
- unrolling code assumes that cse will be run after loop, so that must
- be turned on also. */
- if (flag_unroll_loops)
+ /* Unrolling all loops implies that standard loop unrolling must also
+ be done. */
+ if (flag_unroll_all_loops)
+ flag_unroll_loops = 1;
+ /* Loop unrolling requires that strength_reduction be on also. Silently
+ turn on strength reduction here if it isn't already on. Also, the loop
+ unrolling code assumes that cse will be run after loop, so that must
+ be turned on also. */
+ if (flag_unroll_loops)
{
- flag_strength_reduce = 1;
- flag_rerun_cse_after_loop = 1;
+ flag_strength_reduce = 1;
+ flag_rerun_cse_after_loop = 1;
}
- /* If we are in verbose mode, write out the version and maybe all the
- option flags in use. */
- if (version_flag)
+ /* If we are in verbose mode, write out the version and maybe all the
+ option flags in use. */
+ if (version_flag)
{
- print_version (stderr, "");
- if (! quiet_flag)
- print_switch_values (stderr, 0, MAX_LINE, "", " ", "\n");
+ print_version(stderr, "");
+ if (!quiet_flag)
+ print_switch_values(stderr, 0, MAX_LINE, "", " ", "\n");
}
- compile_file (filename);
+ compile_file(filename);
- if (errorcount)
- exit (EXIT_FAILURE);
- if (sorrycount)
- exit (EXIT_FAILURE);
- exit (EXIT_SUCCESS);
- return 0;
+ if (errorcount)
+ exit(EXIT_FAILURE);
+ if (sorrycount)
+ exit(EXIT_FAILURE);
+ exit(EXIT_SUCCESS);
+ return 0;
}
-
+
/* Decode -m switches. */
/* Decode the switch -mNAME. */
static void
set_target_switch (name)
- char *name;
+char *name;
{
- register size_t j;
- int valid = 0;
-
- for (j = 0; j < sizeof target_switches / sizeof target_switches[0]; j++)
- if (!strcmp (target_switches[j].name, name))
- {
- if (target_switches[j].value < 0)
- target_flags &= ~-target_switches[j].value;
- else
- target_flags |= target_switches[j].value;
- valid = 1;
- }
+ register size_t j;
+ int valid = 0;
+
+ for (j = 0; j < sizeof target_switches / sizeof target_switches[0]; j++)
+ if (!strcmp(target_switches[j].name, name))
+ {
+ if (target_switches[j].value < 0)
+ target_flags &= ~-target_switches[j].value;
+ else
+ target_flags |= target_switches[j].value;
+ valid = 1;
+ }
#ifdef TARGET_OPTIONS
- if (!valid)
- for (j = 0; j < sizeof target_options / sizeof target_options[0]; j++)
- {
- int len = strlen (target_options[j].prefix);
- if (!strncmp (target_options[j].prefix, name, len))
- {
- *target_options[j].variable = name + len;
- valid = 1;
- }
- }
+ if (!valid)
+ for (j = 0; j < sizeof target_options / sizeof target_options[0]; j++)
+ {
+ int len = strlen(target_options[j].prefix);
+ if (!strncmp(target_options[j].prefix, name, len))
+ {
+ *target_options[j].variable = name + len;
+ valid = 1;
+ }
+ }
#endif
- if (!valid)
- error ("Invalid option `%s'", name);
+ if (!valid)
+ error("Invalid option `%s'", name);
}
-
+
/* Print version information to FILE.
Each line begins with INDENT (for the case where FILE is the
assembler output file). */
static void
print_version (file, indent)
- FILE *file;
- char *indent;
+FILE *file;
+char *indent;
{
- fprintf (file, "%s%s%s version %s", indent, *indent != 0 ? " " : "",
- language_string, version_string);
+ fprintf(file, "%s%s%s version %s", indent, *indent != 0 ? " " : "",
+ language_string, version_string);
- char *target_name = "thumb-elf";
- fprintf (file, " (%s)", target_name);
+ char *target_name = "thumb-elf";
+ fprintf(file, " (%s)", target_name);
#ifdef __GNUC__
#ifndef __VERSION__
#define __VERSION__ "[unknown]"
#endif
- fprintf (file, " compiled by GNU C version %s.\n", __VERSION__);
+ fprintf(file, " compiled by GNU C version %s.\n", __VERSION__);
#else
- fprintf (file, " compiled by CC.\n");
+ fprintf(file, " compiled by CC.\n");
#endif
}
@@ -4490,30 +4490,30 @@ print_version (file, indent)
static int
print_single_switch (file, pos, max, indent, sep, term, type, name)
- FILE *file;
- int pos, max;
- char *indent, *sep, *term, *type, *name;
+FILE *file;
+int pos, max;
+char *indent, *sep, *term, *type, *name;
{
- /* The ultrix fprintf returns 0 on success, so compute the result we want
- here since we need it for the following test. */
- int len = strlen (sep) + strlen (type) + strlen (name);
+ /* The ultrix fprintf returns 0 on success, so compute the result we want
+ here since we need it for the following test. */
+ int len = strlen(sep) + strlen(type) + strlen(name);
- if (pos != 0
- && pos + len > max)
+ if (pos != 0
+ && pos + len > max)
{
- fprintf (file, "%s", term);
- pos = 0;
+ fprintf(file, "%s", term);
+ pos = 0;
}
- if (pos == 0)
+ if (pos == 0)
{
- fprintf (file, "%s", indent);
- pos = strlen (indent);
+ fprintf(file, "%s", indent);
+ pos = strlen(indent);
}
- fprintf (file, "%s%s%s", sep, type, name);
- pos += len;
- return pos;
+ fprintf(file, "%s%s%s", sep, type, name);
+ pos += len;
+ return pos;
}
-
+
/* Print active target switches to FILE.
POS is the current cursor position and MAX is the size of a "line".
Each line begins with INDENT and ends with TERM.
@@ -4521,89 +4521,89 @@ print_single_switch (file, pos, max, indent, sep, term, type, name)
static void
print_switch_values (file, pos, max, indent, sep, term)
- FILE *file;
- int pos, max;
- char *indent, *sep, *term;
+FILE *file;
+int pos, max;
+char *indent, *sep, *term;
{
- size_t j;
- char **p;
-
- /* Print the options as passed. */
-
- pos = print_single_switch (file, pos, max, indent, *indent ? " " : "", term,
- "options passed: ", "");
-
- for (p = &save_argv[1]; *p != NULL; p++)
- if (**p == '-')
- {
- /* Ignore these. */
- if (strcmp (*p, "-o") == 0)
- {
- if (p[1] != NULL)
- p++;
- continue;
- }
- if (strcmp (*p, "-quiet") == 0)
- continue;
- if (strcmp (*p, "-version") == 0)
- continue;
- if ((*p)[1] == 'd')
- continue;
-
- pos = print_single_switch (file, pos, max, indent, sep, term, *p, "");
- }
- if (pos > 0)
- fprintf (file, "%s", term);
-
- /* Print the -f and -m options that have been enabled.
- We don't handle language specific options but printing argv
- should suffice. */
-
- pos = print_single_switch (file, 0, max, indent, *indent ? " " : "", term,
- "options enabled: ", "");
-
- for (j = 0; j < sizeof f_options / sizeof f_options[0]; j++)
- if (*f_options[j].variable == f_options[j].on_value)
- pos = print_single_switch (file, pos, max, indent, sep, term,
- "-f", f_options[j].string);
-
- /* Print target specific options. */
-
- for (j = 0; j < sizeof target_switches / sizeof target_switches[0]; j++)
- if (target_switches[j].name[0] != '\0'
- && target_switches[j].value > 0
- && ((target_switches[j].value & target_flags)
- == target_switches[j].value))
- {
- pos = print_single_switch (file, pos, max, indent, sep, term,
- "-m", target_switches[j].name);
- }
+ size_t j;
+ char **p;
+
+ /* Print the options as passed. */
+
+ pos = print_single_switch(file, pos, max, indent, *indent ? " " : "", term,
+ "options passed: ", "");
+
+ for (p = &save_argv[1]; *p != NULL; p++)
+ if (**p == '-')
+ {
+ /* Ignore these. */
+ if (strcmp(*p, "-o") == 0)
+ {
+ if (p[1] != NULL)
+ p++;
+ continue;
+ }
+ if (strcmp(*p, "-quiet") == 0)
+ continue;
+ if (strcmp(*p, "-version") == 0)
+ continue;
+ if ((*p)[1] == 'd')
+ continue;
+
+ pos = print_single_switch(file, pos, max, indent, sep, term, *p, "");
+ }
+ if (pos > 0)
+ fprintf(file, "%s", term);
+
+ /* Print the -f and -m options that have been enabled.
+ We don't handle language specific options but printing argv
+ should suffice. */
+
+ pos = print_single_switch(file, 0, max, indent, *indent ? " " : "", term,
+ "options enabled: ", "");
+
+ for (j = 0; j < sizeof f_options / sizeof f_options[0]; j++)
+ if (*f_options[j].variable == f_options[j].on_value)
+ pos = print_single_switch(file, pos, max, indent, sep, term,
+ "-f", f_options[j].string);
+
+ /* Print target specific options. */
+
+ for (j = 0; j < sizeof target_switches / sizeof target_switches[0]; j++)
+ if (target_switches[j].name[0] != '\0'
+ && target_switches[j].value > 0
+ && ((target_switches[j].value & target_flags)
+ == target_switches[j].value))
+ {
+ pos = print_single_switch(file, pos, max, indent, sep, term,
+ "-m", target_switches[j].name);
+ }
#ifdef TARGET_OPTIONS
- for (j = 0; j < sizeof target_options / sizeof target_options[0]; j++)
- if (*target_options[j].variable != NULL)
- {
- char prefix[256];
- sprintf (prefix, "-m%s", target_options[j].prefix);
- pos = print_single_switch (file, pos, max, indent, sep, term,
- prefix, *target_options[j].variable);
- }
+ for (j = 0; j < sizeof target_options / sizeof target_options[0]; j++)
+ if (*target_options[j].variable != NULL)
+ {
+ char prefix[256];
+ sprintf(prefix, "-m%s", target_options[j].prefix);
+ pos = print_single_switch(file, pos, max, indent, sep, term,
+ prefix, *target_options[j].variable);
+ }
#endif
- fprintf (file, "%s", term);
+ fprintf(file, "%s", term);
}
/* Record the beginning of a new source file, named FILENAME. */
void
debug_start_source_file (filename)
- register char *filename;
+register char *filename;
{
#ifdef DWARF2_DEBUGGING_INFO
- if (debug_info_level == DINFO_LEVEL_VERBOSE
- && write_symbols == DWARF2_DEBUG)
- dwarf2out_start_source_file (filename);
-#endif /* DWARF2_DEBUGGING_INFO */
+ if (debug_info_level == DINFO_LEVEL_VERBOSE
+ && write_symbols == DWARF2_DEBUG)
+ dwarf2out_start_source_file(filename);
+#endif /* DWARF2_DEBUGGING_INFO */
}
/* Record the resumption of a source file. LINENO is the line number in
@@ -4611,12 +4611,12 @@ debug_start_source_file (filename)
void
debug_end_source_file (lineno)
- register unsigned lineno ATTRIBUTE_UNUSED;
+register unsigned lineno ATTRIBUTE_UNUSED;
{
#ifdef DWARF2_DEBUGGING_INFO
- if (debug_info_level == DINFO_LEVEL_VERBOSE
- && write_symbols == DWARF2_DEBUG)
- dwarf2out_end_source_file ();
+ if (debug_info_level == DINFO_LEVEL_VERBOSE
+ && write_symbols == DWARF2_DEBUG)
+ dwarf2out_end_source_file();
#endif /* DWARF2_DEBUGGING_INFO */
}
@@ -4626,13 +4626,13 @@ debug_end_source_file (lineno)
void
debug_define (lineno, buffer)
- register unsigned lineno;
- register char *buffer;
+register unsigned lineno;
+register char *buffer;
{
#ifdef DWARF2_DEBUGGING_INFO
- if (debug_info_level == DINFO_LEVEL_VERBOSE
- && write_symbols == DWARF2_DEBUG)
- dwarf2out_define (lineno, buffer);
+ if (debug_info_level == DINFO_LEVEL_VERBOSE
+ && write_symbols == DWARF2_DEBUG)
+ dwarf2out_define(lineno, buffer);
#endif /* DWARF2_DEBUGGING_INFO */
}
@@ -4642,12 +4642,12 @@ debug_define (lineno, buffer)
void
debug_undef (lineno, buffer)
- register unsigned lineno;
- register char *buffer;
+register unsigned lineno;
+register char *buffer;
{
#ifdef DWARF2_DEBUGGING_INFO
- if (debug_info_level == DINFO_LEVEL_VERBOSE
- && write_symbols == DWARF2_DEBUG)
- dwarf2out_undef (lineno, buffer);
+ if (debug_info_level == DINFO_LEVEL_VERBOSE
+ && write_symbols == DWARF2_DEBUG)
+ dwarf2out_undef(lineno, buffer);
#endif /* DWARF2_DEBUGGING_INFO */
}