Add C++11 header <cuchar>.
[official-gcc.git] / gcc / flag-types.h
blobac9ca0b75e0ecf7fc9727bf7bd664a0dcbf9851f
1 /* Compilation switch flag type definitions for GCC.
2 Copyright (C) 1987-2015 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 for more details.
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
20 #ifndef GCC_FLAG_TYPES_H
21 #define GCC_FLAG_TYPES_H
23 enum debug_info_type
25 NO_DEBUG, /* Write no debug info. */
26 DBX_DEBUG, /* Write BSD .stabs for DBX (using dbxout.c). */
27 SDB_DEBUG, /* Write COFF for (old) SDB (using sdbout.c). */
28 DWARF2_DEBUG, /* Write Dwarf v2 debug info (using dwarf2out.c). */
29 XCOFF_DEBUG, /* Write IBM/Xcoff debug info (using dbxout.c). */
30 VMS_DEBUG, /* Write VMS debug info (using vmsdbgout.c). */
31 VMS_AND_DWARF2_DEBUG /* Write VMS debug info (using vmsdbgout.c).
32 and DWARF v2 debug info (using dwarf2out.c). */
35 enum debug_info_levels
37 DINFO_LEVEL_NONE, /* Write no debugging info. */
38 DINFO_LEVEL_TERSE, /* Write minimal info to support tracebacks only. */
39 DINFO_LEVEL_NORMAL, /* Write info for all declarations (and line table). */
40 DINFO_LEVEL_VERBOSE /* Write normal info plus #define/#undef info. */
43 /* A major contribution to object and executable size is debug
44 information size. A major contribution to debug information
45 size is struct descriptions replicated in several object files.
46 The following function determines whether or not debug information
47 should be generated for a given struct. The indirect parameter
48 indicates that the struct is being handled indirectly, via
49 a pointer. See opts.c for the implementation. */
51 enum debug_info_usage
53 DINFO_USAGE_DFN, /* A struct definition. */
54 DINFO_USAGE_DIR_USE, /* A direct use, such as the type of a variable. */
55 DINFO_USAGE_IND_USE, /* An indirect use, such as through a pointer. */
56 DINFO_USAGE_NUM_ENUMS /* The number of enumerators. */
59 /* A major contribution to object and executable size is debug
60 information size. A major contribution to debug information size
61 is struct descriptions replicated in several object files. The
62 following flags attempt to reduce this information. The basic
63 idea is to not emit struct debugging information in the current
64 compilation unit when that information will be generated by
65 another compilation unit.
67 Debug information for a struct defined in the current source
68 file should be generated in the object file. Likewise the
69 debug information for a struct defined in a header should be
70 generated in the object file of the corresponding source file.
71 Both of these case are handled when the base name of the file of
72 the struct definition matches the base name of the source file
73 of the current compilation unit. This matching emits minimal
74 struct debugging information.
76 The base file name matching rule above will fail to emit debug
77 information for structs defined in system headers. So a second
78 category of files includes system headers in addition to files
79 with matching bases.
81 The remaining types of files are library headers and application
82 headers. We cannot currently distinguish these two types. */
84 enum debug_struct_file
86 DINFO_STRUCT_FILE_NONE, /* Debug no structs. */
87 DINFO_STRUCT_FILE_BASE, /* Debug structs defined in files with the
88 same base name as the compilation unit. */
89 DINFO_STRUCT_FILE_SYS, /* Also debug structs defined in system
90 header files. */
91 DINFO_STRUCT_FILE_ANY /* Debug structs defined in all files. */
94 /* Enumerate Objective-c instance variable visibility settings. */
96 enum ivar_visibility
98 IVAR_VISIBILITY_PRIVATE,
99 IVAR_VISIBILITY_PROTECTED,
100 IVAR_VISIBILITY_PUBLIC,
101 IVAR_VISIBILITY_PACKAGE
104 /* The stack reuse level. */
105 enum stack_reuse_level
107 SR_NONE,
108 SR_NAMED_VARS,
109 SR_ALL
112 /* The algorithm used for the integrated register allocator (IRA). */
113 enum ira_algorithm
115 IRA_ALGORITHM_CB,
116 IRA_ALGORITHM_PRIORITY
119 /* The regions used for the integrated register allocator (IRA). */
120 enum ira_region
122 IRA_REGION_ONE,
123 IRA_REGION_ALL,
124 IRA_REGION_MIXED,
125 /* This value means that there were no options -fira-region on the
126 command line and that we should choose a value depending on the
127 used -O option. */
128 IRA_REGION_AUTODETECT
131 /* The options for excess precision. */
132 enum excess_precision
134 EXCESS_PRECISION_DEFAULT,
135 EXCESS_PRECISION_FAST,
136 EXCESS_PRECISION_STANDARD
139 /* Type of stack check. */
140 enum stack_check_type
142 /* Do not check the stack. */
143 NO_STACK_CHECK = 0,
145 /* Check the stack generically, i.e. assume no specific support
146 from the target configuration files. */
147 GENERIC_STACK_CHECK,
149 /* Check the stack and rely on the target configuration files to
150 check the static frame of functions, i.e. use the generic
151 mechanism only for dynamic stack allocations. */
152 STATIC_BUILTIN_STACK_CHECK,
154 /* Check the stack and entirely rely on the target configuration
155 files, i.e. do not use the generic mechanism at all. */
156 FULL_BUILTIN_STACK_CHECK
159 /* Names for the different levels of -Wstrict-overflow=N. The numeric
160 values here correspond to N. */
162 enum warn_strict_overflow_code
164 /* Overflow warning that should be issued with -Wall: a questionable
165 construct that is easy to avoid even when using macros. Example:
166 folding (x + CONSTANT > x) to 1. */
167 WARN_STRICT_OVERFLOW_ALL = 1,
168 /* Overflow warning about folding a comparison to a constant because
169 of undefined signed overflow, other than cases covered by
170 WARN_STRICT_OVERFLOW_ALL. Example: folding (abs (x) >= 0) to 1
171 (this is false when x == INT_MIN). */
172 WARN_STRICT_OVERFLOW_CONDITIONAL = 2,
173 /* Overflow warning about changes to comparisons other than folding
174 them to a constant. Example: folding (x + 1 > 1) to (x > 0). */
175 WARN_STRICT_OVERFLOW_COMPARISON = 3,
176 /* Overflow warnings not covered by the above cases. Example:
177 folding ((x * 10) / 5) to (x * 2). */
178 WARN_STRICT_OVERFLOW_MISC = 4,
179 /* Overflow warnings about reducing magnitude of constants in
180 comparison. Example: folding (x + 2 > y) to (x + 1 >= y). */
181 WARN_STRICT_OVERFLOW_MAGNITUDE = 5
184 /* Floating-point contraction mode. */
185 enum fp_contract_mode {
186 FP_CONTRACT_OFF = 0,
187 FP_CONTRACT_ON = 1,
188 FP_CONTRACT_FAST = 2
191 /* Vectorizer cost-model. */
192 enum vect_cost_model {
193 VECT_COST_MODEL_UNLIMITED = 0,
194 VECT_COST_MODEL_CHEAP = 1,
195 VECT_COST_MODEL_DYNAMIC = 2,
196 VECT_COST_MODEL_DEFAULT = 3
200 /* Different instrumentation modes. */
201 enum sanitize_code {
202 /* AddressSanitizer. */
203 SANITIZE_ADDRESS = 1 << 0,
204 SANITIZE_USER_ADDRESS = 1 << 1,
205 SANITIZE_KERNEL_ADDRESS = 1 << 2,
206 /* ThreadSanitizer. */
207 SANITIZE_THREAD = 1 << 3,
208 /* LeakSanitizer. */
209 SANITIZE_LEAK = 1 << 4,
210 /* UndefinedBehaviorSanitizer. */
211 SANITIZE_SHIFT = 1 << 5,
212 SANITIZE_DIVIDE = 1 << 6,
213 SANITIZE_UNREACHABLE = 1 << 7,
214 SANITIZE_VLA = 1 << 8,
215 SANITIZE_NULL = 1 << 9,
216 SANITIZE_RETURN = 1 << 10,
217 SANITIZE_SI_OVERFLOW = 1 << 11,
218 SANITIZE_BOOL = 1 << 12,
219 SANITIZE_ENUM = 1 << 13,
220 SANITIZE_FLOAT_DIVIDE = 1 << 14,
221 SANITIZE_FLOAT_CAST = 1 << 15,
222 SANITIZE_BOUNDS = 1UL << 16,
223 SANITIZE_ALIGNMENT = 1UL << 17,
224 SANITIZE_NONNULL_ATTRIBUTE = 1UL << 18,
225 SANITIZE_RETURNS_NONNULL_ATTRIBUTE = 1UL << 19,
226 SANITIZE_OBJECT_SIZE = 1UL << 20,
227 SANITIZE_VPTR = 1UL << 21,
228 SANITIZE_BOUNDS_STRICT = 1UL << 22,
229 SANITIZE_UNDEFINED = SANITIZE_SHIFT | SANITIZE_DIVIDE | SANITIZE_UNREACHABLE
230 | SANITIZE_VLA | SANITIZE_NULL | SANITIZE_RETURN
231 | SANITIZE_SI_OVERFLOW | SANITIZE_BOOL | SANITIZE_ENUM
232 | SANITIZE_BOUNDS | SANITIZE_ALIGNMENT
233 | SANITIZE_NONNULL_ATTRIBUTE
234 | SANITIZE_RETURNS_NONNULL_ATTRIBUTE
235 | SANITIZE_OBJECT_SIZE | SANITIZE_VPTR,
236 SANITIZE_NONDEFAULT = SANITIZE_FLOAT_DIVIDE | SANITIZE_FLOAT_CAST
237 | SANITIZE_BOUNDS_STRICT
240 /* flag_vtable_verify initialization levels. */
241 enum vtv_priority {
242 VTV_NO_PRIORITY = 0, /* i.E. Do NOT do vtable verification. */
243 VTV_STANDARD_PRIORITY = 1,
244 VTV_PREINIT_PRIORITY = 2
247 /* flag_lto_partition initialization values. */
248 enum lto_partition_model {
249 LTO_PARTITION_NONE = 0,
250 LTO_PARTITION_ONE = 1,
251 LTO_PARTITION_BALANCED = 2,
252 LTO_PARTITION_1TO1 = 3,
253 LTO_PARTITION_MAX = 4
257 /* gfortran -finit-real= values. */
259 enum gfc_init_local_real
261 GFC_INIT_REAL_OFF = 0,
262 GFC_INIT_REAL_ZERO,
263 GFC_INIT_REAL_NAN,
264 GFC_INIT_REAL_SNAN,
265 GFC_INIT_REAL_INF,
266 GFC_INIT_REAL_NEG_INF
269 /* gfortran -fcoarray= values. */
271 enum gfc_fcoarray
273 GFC_FCOARRAY_NONE = 0,
274 GFC_FCOARRAY_SINGLE,
275 GFC_FCOARRAY_LIB
279 /* gfortran -fconvert= values; used for unformatted I/O.
280 Keep in sync with GFC_CONVERT_* in gcc/fortran/libgfortran.h. */
281 enum gfc_convert
283 GFC_FLAG_CONVERT_NATIVE = 0,
284 GFC_FLAG_CONVERT_SWAP,
285 GFC_FLAG_CONVERT_BIG,
286 GFC_FLAG_CONVERT_LITTLE
290 #endif /* ! GCC_FLAG_TYPES_H */