]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/flags.h
PR other/40784
[thirdparty/gcc.git] / gcc / flags.h
CommitLineData
f12b58b3 1/* Compilation switch flag definitions for GCC.
bc233f0c 2 Copyright (C) 1987, 1988, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002,
bf4a1edf 3 2003, 2004, 2005, 2006, 2007, 2008, 2009
b278476e 4 Free Software Foundation, Inc.
addd8f36 5
f12b58b3 6This file is part of GCC.
addd8f36 7
f12b58b3 8GCC is free software; you can redistribute it and/or modify it under
9the terms of the GNU General Public License as published by the Free
8c4c00c1 10Software Foundation; either version 3, or (at your option) any later
f12b58b3 11version.
addd8f36 12
f12b58b3 13GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14WARRANTY; without even the implied warranty of MERCHANTABILITY or
15FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16for more details.
addd8f36 17
18You should have received a copy of the GNU General Public License
8c4c00c1 19along with GCC; see the file COPYING3. If not see
20<http://www.gnu.org/licenses/>. */
addd8f36 21
518796ad 22#ifndef GCC_FLAGS_H
23#define GCC_FLAGS_H
24
0e4744ac 25#include "coretypes.h"
2e9da478 26#include "options.h"
f2b38121 27#include "real.h"
2e9da478 28
addd8f36 29enum debug_info_type
30{
31 NO_DEBUG, /* Write no debug info. */
32 DBX_DEBUG, /* Write BSD .stabs for DBX (using dbxout.c). */
33 SDB_DEBUG, /* Write COFF for (old) SDB (using sdbout.c). */
be6eb971 34 DWARF2_DEBUG, /* Write Dwarf v2 debug info (using dwarf2out.c). */
8d60d2bc 35 XCOFF_DEBUG, /* Write IBM/Xcoff debug info (using dbxout.c). */
00e0eb3d 36 VMS_DEBUG, /* Write VMS debug info (using vmsdbgout.c). */
8d60d2bc 37 VMS_AND_DWARF2_DEBUG /* Write VMS debug info (using vmsdbgout.c).
00e0eb3d 38 and DWARF v2 debug info (using dwarf2out.c). */
addd8f36 39};
40
41/* Specify which kind of debugging info to generate. */
42extern enum debug_info_type write_symbols;
43
cc4ca723 44/* Names of debug_info_type, for error messages. */
45extern const char *const debug_type_names[];
46
addd8f36 47enum debug_info_level
48{
49 DINFO_LEVEL_NONE, /* Write no debugging info. */
50 DINFO_LEVEL_TERSE, /* Write minimal info to support tracebacks only. */
a7dce381 51 DINFO_LEVEL_NORMAL, /* Write info for all declarations (and line table). */
addd8f36 52 DINFO_LEVEL_VERBOSE /* Write normal info plus #define/#undef info. */
53};
54
55/* Specify how much debugging info to generate. */
56extern enum debug_info_level debug_info_level;
57
0e4744ac 58/* A major contribution to object and executable size is debug
59 information size. A major contribution to debug information
60 size is struct descriptions replicated in several object files.
61 The following function determines whether or not debug information
62 should be generated for a given struct. The indirect parameter
63 indicates that the struct is being handled indirectly, via
64 a pointer. See opts.c for the implementation. */
65
66enum debug_info_usage
67{
68 DINFO_USAGE_DFN, /* A struct definition. */
69 DINFO_USAGE_DIR_USE, /* A direct use, such as the type of a variable. */
70 DINFO_USAGE_IND_USE, /* An indirect use, such as through a pointer. */
71 DINFO_USAGE_NUM_ENUMS /* The number of enumerators. */
72};
73
74extern bool should_emit_struct_debug (tree type_decl, enum debug_info_usage);
75extern void set_struct_debug_option (const char *value);
76
51d7935f 77/* Nonzero means use GNU-only extensions in the generated symbolic
78 debugging information. */
b0e56fb1 79extern bool use_gnu_debug_info_extensions;
addd8f36 80
4a2849cb 81/* Enumerate visibility settings. This is deliberately ordered from most
82 to least visibility. */
b212f378 83#ifndef SYMBOL_VISIBILITY_DEFINED
84#define SYMBOL_VISIBILITY_DEFINED
85enum symbol_visibility
86{
87 VISIBILITY_DEFAULT,
4a2849cb 88 VISIBILITY_PROTECTED,
b212f378 89 VISIBILITY_HIDDEN,
4a2849cb 90 VISIBILITY_INTERNAL
b212f378 91};
92#endif
93
94/* The default visibility for all symbols (unless overridden). */
95extern enum symbol_visibility default_visibility;
96
97struct visibility_flags
98{
99 unsigned inpragma : 1; /* True when in #pragma GCC visibility. */
100 unsigned inlines_hidden : 1; /* True when -finlineshidden in effect. */
101};
102
103/* Global visibility options. */
104extern struct visibility_flags visibility_options;
105
addd8f36 106/* Nonzero means do optimizations. -opt. */
107
108extern int optimize;
109
57361983 110/* Nonzero means optimize for size. -Os. */
111
112extern int optimize_size;
113
e6fa0ea6 114/* Used to set the level of -Wstrict-aliasing, when no level is specified.
115 The external way to set the default level is to use
116 -Wstrict-aliasing=level.
117 ONOFF is assumed to take value 1 when -Wstrict-aliasing is specified,
118 and 0 otherwise. After calling this function, wstrict_aliasing will be
119 set to the default value of -Wstrict_aliasing=level. */
120
121extern void set_Wstrict_aliasing (int onoff);
122
75db8365 123/* Nonzero means warn about any objects definitions whose size is larger
124 than N bytes. Also want about function definitions whose returned
125 values are larger than N bytes. The value N is in `larger_than_size'. */
126
6f2f567f 127extern bool warn_larger_than;
b278476e 128extern HOST_WIDE_INT larger_than_size;
addd8f36 129
6fdade09 130/* Nonzero means warn about any function whose frame size is larger
131 than N bytes. */
132
133extern bool warn_frame_larger_than;
134extern HOST_WIDE_INT frame_larger_than_size;
135
addd8f36 136/* Nonzero for -dp: annotate the assembly with a comment describing the
137 pattern and alternative used. */
138
139extern int flag_print_asm_name;
140\f
141/* Now the symbols that are set with `-f' switches. */
142
143/* Nonzero means `char' should be signed. */
144
145extern int flag_signed_char;
146
5bf3fee3 147/* Nonzero means give an enum type only as many bytes as it needs. A value
148 of 2 means it has not yet been initialized. */
addd8f36 149
150extern int flag_short_enums;
151
addd8f36 152/* Nonzero for -fpcc-struct-return: return values the same way PCC does. */
153
154extern int flag_pcc_struct_return;
155
27bc6aee 156/* 0 means straightforward implementation of complex divide acceptable.
157 1 means wide ranges of inputs must work for complex divide.
0dfc45b5 158 2 means C99-like requirements for complex multiply and divide. */
27bc6aee 159
0dfc45b5 160extern int flag_complex_method;
27bc6aee 161
addd8f36 162/* Nonzero if we are only using compiler to check syntax errors. */
163
a49a878f 164extern int rtl_dump_and_exit;
addd8f36 165
f9e15121 166/* Nonzero means we should save auxiliary info into a .X file. */
addd8f36 167
168extern int flag_gen_aux_info;
169
fd63ca43 170/* Nonzero means suppress output of instruction numbers and line number
171 notes in debugging dumps. */
172
173extern int flag_dump_unnumbered;
174
addd8f36 175/* Nonzero means change certain warnings into errors.
176 Usually these are warnings about failure to conform to some standard. */
177
178extern int flag_pedantic_errors;
179
07317e69 180/* Nonzero means make permerror produce warnings instead of errors. */
181
182extern int flag_permissive;
183
c3ce66b0 184/* Nonzero if we are compiling code for a shared library, zero for
185 executable. */
186
187extern int flag_shlib;
188
4f96aab5 189/* -dA causes debug information to be produced in
190 the generated assembly code (to make it more readable). This option
191 is generally only of use to those who actually need to read the
192 generated assembly code (perhaps while debugging the compiler itself).
193 Currently, this switch is only used by dwarfout.c; however, it is intended
194 to be a catchall for printing debug information in the assembler file. */
195
196extern int flag_debug_asm;
197
66575a0b 198/* Generate code for GNU or NeXT Objective-C runtime environment. */
199
200extern int flag_next_runtime;
201
af5e5fd0 202extern int flag_dump_rtl_in_asm;
47dd2e78 203
204/* The algorithm used for the integrated register allocator (IRA). */
205enum ira_algorithm
206{
47dd2e78 207 IRA_ALGORITHM_CB,
14792f4e 208 IRA_ALGORITHM_PRIORITY
47dd2e78 209};
210
211extern enum ira_algorithm flag_ira_algorithm;
212
14792f4e 213/* The regions used for the integrated register allocator (IRA). */
214enum ira_region
215{
216 IRA_REGION_ONE,
217 IRA_REGION_ALL,
218 IRA_REGION_MIXED
219};
220
221extern enum ira_region flag_ira_region;
222
47dd2e78 223extern unsigned int flag_ira_verbose;
224
c6418a4e 225/* The options for excess precision. */
226enum excess_precision
227{
228 EXCESS_PRECISION_DEFAULT,
229 EXCESS_PRECISION_FAST,
230 EXCESS_PRECISION_STANDARD
231};
232
233/* The excess precision specified on the command line, or defaulted by
234 the front end. */
235extern enum excess_precision flag_excess_precision_cmdline;
236
237/* The excess precision currently in effect. */
238extern enum excess_precision flag_excess_precision;
239
addd8f36 240\f
241/* Other basic status info about current function. */
242
3541e113 243/* Nonzero if subexpressions must be evaluated from left-to-right. */
244extern int flag_evaluation_order;
245
a9fa9190 246/* Value of the -G xx switch, and whether it was passed or not. */
3be2f219 247extern unsigned HOST_WIDE_INT g_switch_value;
e690b385 248extern bool g_switch_set;
3eaf50a4 249
e1ab7874 250/* Same for selective scheduling. */
251extern bool sel_sched_switch_set;
252
61e95947 253/* Values of the -falign-* flags: how much to align labels in code.
254 0 means `use default', 1 means `don't align'.
255 For each variable, there is an _log variant which is the power
256 of two not less than the variable, for .align output. */
257
61e95947 258extern int align_loops_log;
93429286 259extern int align_loops_max_skip;
61e95947 260extern int align_jumps_log;
93429286 261extern int align_jumps_max_skip;
61e95947 262extern int align_labels_log;
93429286 263extern int align_labels_max_skip;
61e95947 264extern int align_functions_log;
265
3eaf50a4 266/* Nonzero if we dump in VCG format, not plain text. */
267extern int dump_for_graph;
268
269/* Selection of the graph form. */
270enum graph_dump_types
271{
272 no_graph = 0,
273 vcg
274};
275extern enum graph_dump_types graph_dump_format;
5bbb9f06 276
6ef828f9 277/* Nonzero means to collect statistics which might be expensive
518796ad 278 and to print them when we are done. */
279extern int flag_detailed_statistics;
280
19489abd 281/* Nonzero means that we defer emitting functions until they are actually
282 used. */
283extern int flag_remove_unreachable_functions;
284
5923a5e7 285/* Nonzero if we should track variables. */
286extern int flag_var_tracking;
287
8a5df2ce 288/* True if flag_speculative_prefetching was set by user. Used to suppress
289 warning message in case flag was set by -fprofile-{generate,use}. */
290extern bool flag_speculative_prefetching_set;
291
4852b829 292/* Type of stack check. */
293enum stack_check_type
294{
295 /* Do not check the stack. */
296 NO_STACK_CHECK = 0,
297
298 /* Check the stack generically, i.e. assume no specific support
299 from the target configuration files. */
300 GENERIC_STACK_CHECK,
301
302 /* Check the stack and rely on the target configuration files to
303 check the static frame of functions, i.e. use the generic
304 mechanism only for dynamic stack allocations. */
305 STATIC_BUILTIN_STACK_CHECK,
306
307 /* Check the stack and entirely rely on the target configuration
308 files, i.e. do not use the generic mechanism at all. */
309 FULL_BUILTIN_STACK_CHECK
310};
311extern enum stack_check_type flag_stack_check;
312
e100aadc 313/* Returns TRUE if generated code should match ABI version N or
314 greater is in use. */
315
316#define abi_version_at_least(N) \
317 (flag_abi_version == 0 || flag_abi_version >= (N))
318
a95c0776 319/* Return whether the function should be excluded from
320 instrumentation. */
321extern bool flag_instrument_functions_exclude_p (tree fndecl);
322
920d0fb5 323/* True if the given mode has a NaN representation and the treatment of
324 NaN operands is important. Certain optimizations, such as folding
64a46f56 325 x * 0 into 0, are not correct for NaN operands, and are normally
920d0fb5 326 disabled for modes with NaNs. The user can ask for them to be
327 done anyway using the -funsafe-math-optimizations switch. */
328#define HONOR_NANS(MODE) \
7eece8c3 329 (MODE_HAS_NANS (MODE) && !flag_finite_math_only)
920d0fb5 330
0a8176f3 331/* Like HONOR_NANs, but true if we honor signaling NaNs (or sNaNs). */
332#define HONOR_SNANS(MODE) (flag_signaling_nans && HONOR_NANS (MODE))
333
920d0fb5 334/* As for HONOR_NANS, but true if the mode can represent infinity and
335 the treatment of infinite values is important. */
336#define HONOR_INFINITIES(MODE) \
7eece8c3 337 (MODE_HAS_INFINITIES (MODE) && !flag_finite_math_only)
920d0fb5 338
339/* Like HONOR_NANS, but true if the given mode distinguishes between
98667efb 340 positive and negative zero, and the sign of zero is important. */
920d0fb5 341#define HONOR_SIGNED_ZEROS(MODE) \
893038cd 342 (MODE_HAS_SIGNED_ZEROS (MODE) && flag_signed_zeros)
920d0fb5 343
344/* Like HONOR_NANS, but true if given mode supports sign-dependent rounding,
345 and the rounding mode is important. */
346#define HONOR_SIGN_DEPENDENT_ROUNDING(MODE) \
5466f589 347 (MODE_HAS_SIGN_DEPENDENT_ROUNDING (MODE) && flag_rounding_math)
920d0fb5 348
981eb798 349/* True if overflow wraps around for the given integral type. That
350 is, TYPE_MAX + 1 == TYPE_MIN. */
351#define TYPE_OVERFLOW_WRAPS(TYPE) \
352 (TYPE_UNSIGNED (TYPE) || flag_wrapv)
353
354/* True if overflow is undefined for the given integral type. We may
add6ee5e 355 optimize on the assumption that values in the type never overflow.
356
357 IMPORTANT NOTE: Any optimization based on TYPE_OVERFLOW_UNDEFINED
358 must issue a warning based on warn_strict_overflow. In some cases
359 it will be appropriate to issue the warning immediately, and in
360 other cases it will be appropriate to simply set a flag and let the
361 caller decide whether a warning is appropriate or not. */
981eb798 362#define TYPE_OVERFLOW_UNDEFINED(TYPE) \
363 (!TYPE_UNSIGNED (TYPE) && !flag_wrapv && !flag_trapv && flag_strict_overflow)
364
365/* True if overflow for the given integral type should issue a
366 trap. */
367#define TYPE_OVERFLOW_TRAPS(TYPE) \
368 (!TYPE_UNSIGNED (TYPE) && flag_trapv)
369
e867fa7f 370/* True if pointer types have undefined overflow. */
371#define POINTER_TYPE_OVERFLOW_UNDEFINED (flag_strict_overflow)
372
add6ee5e 373/* Names for the different levels of -Wstrict-overflow=N. The numeric
374 values here correspond to N. */
375
376enum warn_strict_overflow_code
377{
378 /* Overflow warning that should be issued with -Wall: a questionable
379 construct that is easy to avoid even when using macros. Example:
380 folding (x + CONSTANT > x) to 1. */
381 WARN_STRICT_OVERFLOW_ALL = 1,
382 /* Overflow warning about folding a comparison to a constant because
383 of undefined signed overflow, other than cases covered by
384 WARN_STRICT_OVERFLOW_ALL. Example: folding (abs (x) >= 0) to 1
385 (this is false when x == INT_MIN). */
386 WARN_STRICT_OVERFLOW_CONDITIONAL = 2,
387 /* Overflow warning about changes to comparisons other than folding
388 them to a constant. Example: folding (x + 1 > 1) to (x > 0). */
389 WARN_STRICT_OVERFLOW_COMPARISON = 3,
390 /* Overflow warnings not covered by the above cases. Example:
391 folding ((x * 10) / 5) to (x * 2). */
392 WARN_STRICT_OVERFLOW_MISC = 4,
393 /* Overflow warnings about reducing magnitude of constants in
394 comparison. Example: folding (x + 2 > y) to (x + 1 >= y). */
395 WARN_STRICT_OVERFLOW_MAGNITUDE = 5
396};
397
398/* Whether to emit an overflow warning whose code is C. */
184c9ca9 399#define issue_strict_overflow_warning(c) (warn_strict_overflow >= (int) (c))
add6ee5e 400
2a281353 401#endif /* ! GCC_FLAGS_H */