📄 toplev.c
字号:
{"caller-saves", &flag_caller_saves, 1}, {"pcc-struct-return", &flag_pcc_struct_return, 1}, {"delayed-branch", &flag_delayed_branch, 1}, {"rerun-cse-after-loop", &flag_rerun_cse_after_loop, 1}, {"pretend-float", &flag_pretend_float, 1}, {"schedule-insns", &flag_schedule_insns, 1}, {"schedule-insns2", &flag_schedule_insns_after_reload, 1}, {"pic", &flag_pic, 1}, {"PIC", &flag_pic, 2}, {"fast-math", &flag_fast_math, 1}, {"common", &flag_no_common, 0}, {"inhibit-size-directive", &flag_inhibit_size_directive, 1}, {"verbose-asm", &flag_verbose_asm, 1}, {"gnu-linker", &flag_gnu_linker, 1}};/* Table of language-specific options. */char *lang_options[] ={ "-ftraditional", "-traditional", "-fnotraditional", "-fno-traditional", "-fsigned-char", "-funsigned-char", "-fno-signed-char", "-fno-unsigned-char", "-fsigned-bitfields", "-funsigned-bitfields", "-fno-signed-bitfields", "-fno-unsigned-bitfields", "-fshort-enums", "-fno-short-enums", "-fcond-mismatch", "-fno-cond-mismatch", "-fshort-double", "-fno-short-double", "-fasm", "-fno-asm", "-fbuiltin", "-fno-builtin", "-fno-ident", "-fident", "-ansi", "-Wimplicit", "-Wno-implicit", "-Wwrite-strings", "-Wno-write-strings", "-Wcast-qual", "-Wno-cast-qual", "-Wpointer-arith", "-Wno-pointer-arith", "-Wstrict-prototypes", "-Wno-strict-prototypes", "-Wmissing-prototypes", "-Wno-missing-prototypes", "-Wredundant-decls", "-Wno-redundant-decls", "-Wnested-externs", "-Wno-nested-externs", "-Wtraditional", "-Wno-traditional", "-Wformat", "-Wno-format", "-Wchar-subscripts", "-Wno-char-subscripts", "-Wconversion", "-Wno-conversion", "-Wparentheses", "-Wno-parentheses", "-Wcomment", "-Wno-comment", "-Wcomments", "-Wno-comments", "-Wtrigraphs", "-Wno-trigraphs", "-Wimport", "-Wno-import", "-Wall", /* These are for C++. */ "-+e0", /* gcc.c tacks the `-' on the front. */ "-+e1", "-+e2", "-fsave-memoized", "-fno-save-memoized", "-fSOS", "-fno-SOS", "-fcadillac", "-fno-cadillac", "-fgc", "-fno-gc", "-flabels-ok", "-fno-labels-ok", "-fstats", "-fno-stats", "-fthis-is-variable", "-fno-this-is-variable", "-fstrict-prototype", "-fno-strict-prototype", "-fall-virtual", "-fno-all-virtual", "-fmemoize-lookups", "-fno-memoize-lookups", "-felide-constructors", "-fno-elide-constructors", "-finline-debug", "-fno-inline-debug", "-fhandle-exceptions", "-fno-handle-exceptions", "-fansi-exceptions", "-fno-ansi-exceptions", "-fspring-exceptions", "-fno-spring-exceptions", "-fdefault-inline", "-fno-default-inline", "-fenum-int-equiv", "-fno-enum-int-equiv", "-fdossier", "-fno-dossier", "-fxref", "-fno-xref", "-fnonnull-objects", "-fno-nonnull-objects", "-Wreturn-type", "-Wno-return-type", "-Woverloaded-virtual", "-Wno-overloaded-virtual", "-Wenum-clash", "-Wno-enum-clash", /* these are for obj c */ "-lang-objc", "-gen-decls", "-Wselector", "-Wno-selector", 0};/* Options controlling warnings *//* Don't print warning messages. -w. */int inhibit_warnings = 0;/* Print various extra warnings. -W. */int extra_warnings = 0;/* Treat warnings as errors. -Werror. */int warnings_are_errors = 0;/* Nonzero to warn about unused local variables. */int warn_unused;/* Nonzero to warn about variables used before they are initialized. */int warn_uninitialized;/* Nonzero means warn about all declarations which shadow others. */int warn_shadow;/* Warn if a switch on an enum fails to have a case for every enum value. */int warn_switch;/* Nonzero means warn about function definitions that default the return type or that use a null return and have a return-type other than void. */int warn_return_type;/* Nonzero means warn about pointer casts that increase the required alignment of the target type (and might therefore lead to a crash due to a misaligned access). */int warn_cast_align;/* Nonzero means warn about any identifiers that match in the first N characters. The value N is in `id_clash_len'. */int warn_id_clash;int id_clash_len;/* Nonzero means warn if inline function is too large. */int warn_inline;/* Warn if a function returns an aggregate, since there are often incompatible calling conventions for doing this. */int warn_aggregate_return;/* Likewise for -W. */struct { char *string; int *variable; int on_value;} W_options[] ={ {"unused", &warn_unused, 1}, {"error", &warnings_are_errors, 1}, {"shadow", &warn_shadow, 1}, {"switch", &warn_switch, 1}, {"aggregate-return", &warn_aggregate_return, 1}, {"cast-align", &warn_cast_align, 1}, {"uninitialized", &warn_uninitialized, 1}, {"inline", &warn_inline, 1}};/* Output files for assembler code (real compiler output) and debugging dumps. */FILE *asm_out_file;FILE *aux_info_file;FILE *rtl_dump_file;FILE *jump_opt_dump_file;FILE *cse_dump_file;FILE *loop_dump_file;FILE *cse2_dump_file;FILE *flow_dump_file;FILE *combine_dump_file;FILE *sched_dump_file;FILE *local_reg_dump_file;FILE *global_reg_dump_file;FILE *sched2_dump_file;FILE *jump2_opt_dump_file;FILE *dbr_sched_dump_file;FILE *stack_reg_dump_file;/* Time accumulators, to count the total time spent in various passes. */int parse_time;int varconst_time;int integration_time;int jump_time;int cse_time;int loop_time;int cse2_time;int flow_time;int combine_time;int sched_time;int local_alloc_time;int global_alloc_time;int sched2_time;int dbr_sched_time;int shorten_branch_time;int stack_reg_time;int final_time;int symout_time;int dump_time;/* Return time used so far, in microseconds. */intget_run_time (){#ifdef USG struct tms tms;#else#ifndef VMS struct rusage rusage;#else /* VMS */ struct { int proc_user_time; int proc_system_time; int child_user_time; int child_system_time; } vms_times;#endif#endif if (quiet_flag) return 0;#ifdef USG times (&tms); return (tms.tms_utime + tms.tms_stime) * (1000000 / HZ);#else#ifndef VMS getrusage (0, &rusage); return (rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec + rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec);#else /* VMS */ times (&vms_times); return (vms_times.proc_user_time + vms_times.proc_system_time) * 10000;#endif#endif}#define TIMEVAR(VAR, BODY) \do { int otime = get_run_time (); BODY; VAR += get_run_time () - otime; } while (0)voidprint_time (str, total) char *str; int total;{ 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. */intcount_error (warningp) int warningp;{ if (warningp && inhibit_warnings) return 0; 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++; } return 1;}/* Print a fatal error message. NAME is the text. Also include a system error message based on `errno'. */voidpfatal_with_name (name) char *name;{ fprintf (stderr, "%s: ", progname); perror (name); exit (35);}voidfatal_io_error (name) char *name;{ fprintf (stderr, "%s: %s: I/O error\n", progname, name); exit (35);}voidfatal (s, v) char *s; int v;{ error (s, v); exit (34);}/* Called to give a better error message when we don't have an insn to match what we are looking for or if the insn's constraints aren't satisfied, rather than just calling abort(). */voidfatal_insn_not_found (insn) rtx insn;{ if (INSN_CODE (insn) < 0) error ("internal error--unrecognizable insn:", 0); else error ("internal error--insn does not satisfy its constraints:", 0); debug_rtx (insn); if (asm_out_file) fflush (asm_out_file); if (aux_info_file) fflush (aux_info_file); if (rtl_dump_file) fflush (rtl_dump_file); if (jump_opt_dump_file) fflush (jump_opt_dump_file); if (cse_dump_file) fflush (cse_dump_file); if (loop_dump_file) fflush (loop_dump_file); if (cse2_dump_file) fflush (cse2_dump_file); if (flow_dump_file) fflush (flow_dump_file); if (combine_dump_file) fflush (combine_dump_file); if (sched_dump_file) fflush (sched_dump_file); if (local_reg_dump_file) fflush (local_reg_dump_file); if (global_reg_dump_file) fflush (global_reg_dump_file); if (sched2_dump_file) fflush (sched2_dump_file); if (jump2_opt_dump_file) fflush (jump2_opt_dump_file); if (dbr_sched_dump_file) fflush (dbr_sched_dump_file); if (stack_reg_dump_file) fflush (stack_reg_dump_file); abort ();}/* This is the default decl_printable_name function. */static char *decl_name (decl, kind) tree decl; char **kind;{ return IDENTIFIER_POINTER (DECL_NAME (decl));}static int need_error_newline;/* Function of last error message; more generally, function such that if next error message is in it then we don't have to mention the function name. */static tree last_error_function = NULL;/* Used to detect when input_file_stack has changed since last described. */static int last_error_tick;/* Called when the start of a function definition is parsed, this function prints on stderr the name of the function. */voidannounce_function (decl) tree decl;{ if (! quiet_flag) { char *junk; if (rtl_dump_and_exit) fprintf (stderr, "%s ", IDENTIFIER_POINTER (DECL_NAME (decl))); else fprintf (stderr, " %s", (*decl_printable_name) (decl, &junk)); fflush (stderr); need_error_newline = 1; last_error_function = current_function_decl; }}/* Prints out, if necessary, the name of the current function which caused an error. Called from all error and warning functions. */voidreport_error_function (file) char *file;{ struct file_stack *p; if (need_error_newline) { fprintf (stderr, "\n"); need_error_newline = 0; } 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, &kind); fprintf (stderr, "In %s `%s':\n", kind, name); } last_error_function = current_function_decl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -