X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fflags.h;h=0fff4f2acd7a336db32cf096fba06a8b23130b84;hb=cb9c483551c537ed1fec0e746f30cfd32a9cf9cb;hp=2671ec38a09b04b90b3085d914ab7ee0a4e83fac;hpb=8f48a1f7d4510001a237a7f3c3a7f4a6f690d6e7;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/flags.h b/gcc/flags.h index 2671ec38a09..0fff4f2acd7 100644 --- a/gcc/flags.h +++ b/gcc/flags.h @@ -7,7 +7,7 @@ This file is part of GCC. GCC 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 +Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY @@ -16,14 +16,15 @@ 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 GCC; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301, USA. */ +along with GCC; see the file COPYING3. If not see +. */ #ifndef GCC_FLAGS_H #define GCC_FLAGS_H +#include "coretypes.h" #include "options.h" +#include "real.h" enum debug_info_type { @@ -54,6 +55,25 @@ enum debug_info_level /* Specify how much debugging info to generate. */ extern enum debug_info_level debug_info_level; +/* A major contribution to object and executable size is debug + information size. A major contribution to debug information + size is struct descriptions replicated in several object files. + The following function determines whether or not debug information + should be generated for a given struct. The indirect parameter + indicates that the struct is being handled indirectly, via + a pointer. See opts.c for the implementation. */ + +enum debug_info_usage +{ + DINFO_USAGE_DFN, /* A struct definition. */ + DINFO_USAGE_DIR_USE, /* A direct use, such as the type of a variable. */ + DINFO_USAGE_IND_USE, /* An indirect use, such as through a pointer. */ + DINFO_USAGE_NUM_ENUMS /* The number of enumerators. */ +}; + +extern bool should_emit_struct_debug (tree type_decl, enum debug_info_usage); +extern void set_struct_debug_option (const char *value); + /* Nonzero means use GNU-only extensions in the generated symbolic debugging information. */ extern bool use_gnu_debug_info_extensions; @@ -96,11 +116,14 @@ extern int optimize_size; extern bool extra_warnings; -/* Nonzero to warn about unused variables, functions et.al. Use - set_Wunused() to update the -Wunused-* flags that correspond to the - -Wunused option. */ +/* Used to set the level of -Wstrict-aliasing, when no level is specified. + The external way to set the default level is to use + -Wstrict-aliasing=level. + ONOFF is assumed to take value 1 when -Wstrict-aliasing is specified, + and 0 otherwise. After calling this function, wstrict_aliasing will be + set to the default value of -Wstrict_aliasing=level. */ -extern void set_Wunused (int setting); +extern void set_Wstrict_aliasing (int onoff); /* Nonzero means warn about any objects definitions whose size is larger than N bytes. Also want about function definitions whose returned @@ -109,15 +132,11 @@ extern void set_Wunused (int setting); extern bool warn_larger_than; extern HOST_WIDE_INT larger_than_size; -/* Nonzero means warn about constructs which might not be strict - aliasing safe. */ +/* Nonzero means warn about any function whose frame size is larger + than N bytes. */ -extern int warn_strict_aliasing; - -/* Temporarily suppress certain warnings. - This is set while reading code from a system header file. */ - -extern int in_system_header; +extern bool warn_frame_larger_than; +extern HOST_WIDE_INT frame_larger_than_size; /* Nonzero for -dp: annotate the assembly with a comment describing the pattern and alternative used. */ @@ -145,11 +164,6 @@ extern int flag_pcc_struct_return; extern int flag_complex_method; -/* Nonzero means that we don't want inlining by virtue of -fno-inline, - not just because the tree inliner turned us off. */ - -extern int flag_really_no_inline; - /* Nonzero if we are only using compiler to check syntax errors. */ extern int rtl_dump_and_exit; @@ -168,6 +182,10 @@ extern int flag_dump_unnumbered; extern int flag_pedantic_errors; +/* Nonzero means make permerror produce warnings instead of errors. */ + +extern int flag_permissive; + /* Nonzero if we are compiling code for a shared library, zero for executable. */ @@ -187,14 +205,30 @@ extern int flag_debug_asm; extern int flag_next_runtime; extern int flag_dump_rtl_in_asm; - -/* Other basic status info about current function. */ -/* Nonzero means current function must be given a frame pointer. - Set in stmt.c if anything is allocated on the stack there. - Set in reload1.c if anything is allocated on the stack there. */ +/* The algorithm used for the integrated register allocator (IRA). */ +enum ira_algorithm +{ + IRA_ALGORITHM_CB, + IRA_ALGORITHM_PRIORITY +}; + +extern enum ira_algorithm flag_ira_algorithm; + +/* The regions used for the integrated register allocator (IRA). */ +enum ira_region +{ + IRA_REGION_ONE, + IRA_REGION_ALL, + IRA_REGION_MIXED +}; + +extern enum ira_region flag_ira_region; -extern int frame_pointer_needed; +extern unsigned int flag_ira_verbose; + + +/* Other basic status info about current function. */ /* Nonzero if subexpressions must be evaluated from left-to-right. */ extern int flag_evaluation_order; @@ -203,6 +237,9 @@ extern int flag_evaluation_order; extern unsigned HOST_WIDE_INT g_switch_value; extern bool g_switch_set; +/* Same for selective scheduling. */ +extern bool sel_sched_switch_set; + /* Values of the -falign-* flags: how much to align labels in code. 0 means `use default', 1 means `don't align'. For each variable, there is an _log variant which is the power @@ -216,10 +253,6 @@ extern int align_labels_log; extern int align_labels_max_skip; extern int align_functions_log; -/* Like align_functions_log above, but used by front-ends to force the - minimum function alignment. Zero means no alignment is forced. */ -extern int force_align_functions_log; - /* Nonzero if we dump in VCG format, not plain text. */ extern int dump_for_graph; @@ -246,10 +279,26 @@ extern int flag_var_tracking; warning message in case flag was set by -fprofile-{generate,use}. */ extern bool flag_speculative_prefetching_set; -/* A string that's used when a random name is required. NULL means - to make it really random. */ +/* Type of stack check. */ +enum stack_check_type +{ + /* Do not check the stack. */ + NO_STACK_CHECK = 0, + + /* Check the stack generically, i.e. assume no specific support + from the target configuration files. */ + GENERIC_STACK_CHECK, -extern const char *flag_random_seed; + /* Check the stack and rely on the target configuration files to + check the static frame of functions, i.e. use the generic + mechanism only for dynamic stack allocations. */ + STATIC_BUILTIN_STACK_CHECK, + + /* Check the stack and entirely rely on the target configuration + files, i.e. do not use the generic mechanism at all. */ + FULL_BUILTIN_STACK_CHECK +}; +extern enum stack_check_type flag_stack_check; /* Returns TRUE if generated code should match ABI version N or greater is in use. */ @@ -257,6 +306,17 @@ extern const char *flag_random_seed; #define abi_version_at_least(N) \ (flag_abi_version == 0 || flag_abi_version >= (N)) +/* Return whether the function should be excluded from + instrumentation. */ +extern bool flag_instrument_functions_exclude_p (tree fndecl); + +/* Emit warning if the function call is disallowed under + -Wdisallowed-function-list=... */ +extern void warn_if_disallowed_function_p (const_tree fncall); + +/* True, if the -Wdisallowed-function-list=... option has been specified. */ +extern bool warn_disallowed_functions; + /* True if the given mode has a NaN representation and the treatment of NaN operands is important. Certain optimizations, such as folding x * 0 into 0, are not correct for NaN operands, and are normally @@ -289,8 +349,13 @@ extern const char *flag_random_seed; (TYPE_UNSIGNED (TYPE) || flag_wrapv) /* True if overflow is undefined for the given integral type. We may - optimize on the assumption that values in the type never - overflow. */ + optimize on the assumption that values in the type never overflow. + + IMPORTANT NOTE: Any optimization based on TYPE_OVERFLOW_UNDEFINED + must issue a warning based on warn_strict_overflow. In some cases + it will be appropriate to issue the warning immediately, and in + other cases it will be appropriate to simply set a flag and let the + caller decide whether a warning is appropriate or not. */ #define TYPE_OVERFLOW_UNDEFINED(TYPE) \ (!TYPE_UNSIGNED (TYPE) && !flag_wrapv && !flag_trapv && flag_strict_overflow) @@ -299,4 +364,35 @@ extern const char *flag_random_seed; #define TYPE_OVERFLOW_TRAPS(TYPE) \ (!TYPE_UNSIGNED (TYPE) && flag_trapv) +/* True if pointer types have undefined overflow. */ +#define POINTER_TYPE_OVERFLOW_UNDEFINED (flag_strict_overflow) + +/* Names for the different levels of -Wstrict-overflow=N. The numeric + values here correspond to N. */ + +enum warn_strict_overflow_code +{ + /* Overflow warning that should be issued with -Wall: a questionable + construct that is easy to avoid even when using macros. Example: + folding (x + CONSTANT > x) to 1. */ + WARN_STRICT_OVERFLOW_ALL = 1, + /* Overflow warning about folding a comparison to a constant because + of undefined signed overflow, other than cases covered by + WARN_STRICT_OVERFLOW_ALL. Example: folding (abs (x) >= 0) to 1 + (this is false when x == INT_MIN). */ + WARN_STRICT_OVERFLOW_CONDITIONAL = 2, + /* Overflow warning about changes to comparisons other than folding + them to a constant. Example: folding (x + 1 > 1) to (x > 0). */ + WARN_STRICT_OVERFLOW_COMPARISON = 3, + /* Overflow warnings not covered by the above cases. Example: + folding ((x * 10) / 5) to (x * 2). */ + WARN_STRICT_OVERFLOW_MISC = 4, + /* Overflow warnings about reducing magnitude of constants in + comparison. Example: folding (x + 2 > y) to (x + 1 >= y). */ + WARN_STRICT_OVERFLOW_MAGNITUDE = 5 +}; + +/* Whether to emit an overflow warning whose code is C. */ +#define issue_strict_overflow_warning(c) (warn_strict_overflow >= (int) (c)) + #endif /* ! GCC_FLAGS_H */