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