1/* Compilation switch flag definitions for GCC. 2 Copyright (C) 1987, 1988, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 3 2003, 2004, 2005 4 Free Software Foundation, Inc. 5 6This file is part of GCC. 7 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 10Software Foundation; either version 2, or (at your option) any later 11version. 12 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. 17 18You should have received a copy of the GNU General Public License 19along with GCC; see the file COPYING. If not, write to the Free 20Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 2102110-1301, USA. */ 22 23#ifndef GCC_FLAGS_H 24#define GCC_FLAGS_H 25 26#include "options.h" 27 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). */ 33 DWARF2_DEBUG, /* Write Dwarf v2 debug info (using dwarf2out.c). */ 34 XCOFF_DEBUG, /* Write IBM/Xcoff debug info (using dbxout.c). */ 35 VMS_DEBUG, /* Write VMS debug info (using vmsdbgout.c). */ 36 VMS_AND_DWARF2_DEBUG /* Write VMS debug info (using vmsdbgout.c). 37 and DWARF v2 debug info (using dwarf2out.c). */ 38}; 39 40/* Specify which kind of debugging info to generate. */ 41extern enum debug_info_type write_symbols; 42 43/* Names of debug_info_type, for error messages. */ 44extern const char *const debug_type_names[]; 45 46enum debug_info_level 47{ 48 DINFO_LEVEL_NONE, /* Write no debugging info. */ 49 DINFO_LEVEL_TERSE, /* Write minimal info to support tracebacks only. */ 50 DINFO_LEVEL_NORMAL, /* Write info for all declarations (and line table). */ 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 57/* Nonzero means use GNU-only extensions in the generated symbolic 58 debugging information. */ 59extern bool use_gnu_debug_info_extensions; 60 61/* Enumerate visibility settings. */ 62#ifndef SYMBOL_VISIBILITY_DEFINED 63#define SYMBOL_VISIBILITY_DEFINED 64enum symbol_visibility 65{ 66 VISIBILITY_DEFAULT, 67 VISIBILITY_INTERNAL, 68 VISIBILITY_HIDDEN, 69 VISIBILITY_PROTECTED 70}; 71#endif 72 73/* The default visibility for all symbols (unless overridden). */ 74extern enum symbol_visibility default_visibility; 75 76struct visibility_flags 77{ 78 unsigned inpragma : 1; /* True when in #pragma GCC visibility. */ 79 unsigned inlines_hidden : 1; /* True when -finlineshidden in effect. */ 80}; 81 82/* Global visibility options. */ 83extern struct visibility_flags visibility_options; 84 85/* Nonzero means do optimizations. -opt. */ 86 87extern int optimize; 88 89/* Nonzero means optimize for size. -Os. */ 90 91extern int optimize_size; 92 93/* Do print extra warnings (such as for uninitialized variables). 94 -W/-Wextra. */ 95 96extern bool extra_warnings; 97 98/* Nonzero to warn about unused variables, functions et.al. Use 99 set_Wunused() to update the -Wunused-* flags that correspond to the 100 -Wunused option. */ 101 102extern void set_Wunused (int setting); 103 104/* Nonzero means warn about any objects definitions whose size is larger 105 than N bytes. Also want about function definitions whose returned 106 values are larger than N bytes. The value N is in `larger_than_size'. */ 107 108extern bool warn_larger_than; 109extern HOST_WIDE_INT larger_than_size; 110 111/* Nonzero means warn about constructs which might not be strict 112 aliasing safe. */ 113 114extern int warn_strict_aliasing; 115 116/* Temporarily suppress certain warnings. 117 This is set while reading code from a system header file. */ 118 119extern int in_system_header; 120 121/* Nonzero for -dp: annotate the assembly with a comment describing the 122 pattern and alternative used. */ 123 124extern int flag_print_asm_name; 125 126/* Now the symbols that are set with `-f' switches. */ 127 128/* Nonzero means `char' should be signed. */ 129 130extern int flag_signed_char; 131 132/* Nonzero means give an enum type only as many bytes as it needs. A value 133 of 2 means it has not yet been initialized. */ 134 135extern int flag_short_enums; 136 137/* Nonzero for -fpcc-struct-return: return values the same way PCC does. */ 138 139extern int flag_pcc_struct_return; 140 141/* 0 means straightforward implementation of complex divide acceptable. 142 1 means wide ranges of inputs must work for complex divide. 143 2 means C99-like requirements for complex multiply and divide. */ 144 145extern int flag_complex_method; 146 147/* Nonzero means that we don't want inlining by virtue of -fno-inline, 148 not just because the tree inliner turned us off. */ 149 150extern int flag_really_no_inline; 151 152/* Nonzero if we are only using compiler to check syntax errors. */ 153 154extern int rtl_dump_and_exit; 155 156/* Nonzero means we should save auxiliary info into a .X file. */ 157 158extern int flag_gen_aux_info; 159 160/* Nonzero means suppress output of instruction numbers and line number 161 notes in debugging dumps. */ 162 163extern int flag_dump_unnumbered; 164 165/* Nonzero means change certain warnings into errors. 166 Usually these are warnings about failure to conform to some standard. */ 167 168extern int flag_pedantic_errors; 169 170/* Nonzero if we are compiling code for a shared library, zero for 171 executable. */ 172 173extern int flag_shlib; 174 175/* -dA causes debug information to be produced in 176 the generated assembly code (to make it more readable). This option 177 is generally only of use to those who actually need to read the 178 generated assembly code (perhaps while debugging the compiler itself). 179 Currently, this switch is only used by dwarfout.c; however, it is intended 180 to be a catchall for printing debug information in the assembler file. */ 181 182extern int flag_debug_asm; 183 184/* Generate code for GNU or NeXT Objective-C runtime environment. */ 185 186extern int flag_next_runtime; 187 188extern int flag_dump_rtl_in_asm; 189 190/* If one, renumber instruction UIDs to reduce the number of 191 unused UIDs if there are a lot of instructions. If greater than 192 one, unconditionally renumber instruction UIDs. */ 193extern int flag_renumber_insns; 194 195/* Other basic status info about current function. */ 196 197/* Nonzero means current function must be given a frame pointer. 198 Set in stmt.c if anything is allocated on the stack there. 199 Set in reload1.c if anything is allocated on the stack there. */ 200 201extern int frame_pointer_needed; 202 203/* Nonzero if subexpressions must be evaluated from left-to-right. */ 204extern int flag_evaluation_order; 205 206/* Value of the -G xx switch, and whether it was passed or not. */ 207extern unsigned HOST_WIDE_INT g_switch_value; 208extern bool g_switch_set; 209 210/* Values of the -falign-* flags: how much to align labels in code. 211 0 means `use default', 1 means `don't align'. 212 For each variable, there is an _log variant which is the power 213 of two not less than the variable, for .align output. */ 214 215extern int align_loops_log; 216extern int align_loops_max_skip; 217extern int align_jumps_log; 218extern int align_jumps_max_skip; 219extern int align_labels_log; 220extern int align_labels_max_skip; 221extern int align_functions_log; 222 223/* Like align_functions_log above, but used by front-ends to force the 224 minimum function alignment. Zero means no alignment is forced. */ 225extern int force_align_functions_log; 226 227/* Nonzero if we dump in VCG format, not plain text. */ 228extern int dump_for_graph; 229 230/* Selection of the graph form. */ 231enum graph_dump_types 232{ 233 no_graph = 0, 234 vcg 235}; 236extern enum graph_dump_types graph_dump_format; 237 238/* Nonzero means to collect statistics which might be expensive 239 and to print them when we are done. */ 240extern int flag_detailed_statistics; 241 242/* Nonzero means that we defer emitting functions until they are actually 243 used. */ 244extern int flag_remove_unreachable_functions; 245 246/* Nonzero if we should track variables. */ 247extern int flag_var_tracking; 248 249/* True if flag_speculative_prefetching was set by user. Used to suppress 250 warning message in case flag was set by -fprofile-{generate,use}. */ 251extern bool flag_speculative_prefetching_set; 252 253/* A string that's used when a random name is required. NULL means 254 to make it really random. */ 255 256extern const char *flag_random_seed; 257 258/* Returns TRUE if generated code should match ABI version N or 259 greater is in use. */ 260 261#define abi_version_at_least(N) \ 262 (flag_abi_version == 0 || flag_abi_version >= (N)) 263 264/* True if the given mode has a NaN representation and the treatment of 265 NaN operands is important. Certain optimizations, such as folding 266 x * 0 into x, are not correct for NaN operands, and are normally 267 disabled for modes with NaNs. The user can ask for them to be 268 done anyway using the -funsafe-math-optimizations switch. */ 269#define HONOR_NANS(MODE) \ 270 (MODE_HAS_NANS (MODE) && !flag_finite_math_only) 271 272/* Like HONOR_NANs, but true if we honor signaling NaNs (or sNaNs). */ 273#define HONOR_SNANS(MODE) (flag_signaling_nans && HONOR_NANS (MODE)) 274 275/* As for HONOR_NANS, but true if the mode can represent infinity and 276 the treatment of infinite values is important. */ 277#define HONOR_INFINITIES(MODE) \ 278 (MODE_HAS_INFINITIES (MODE) && !flag_finite_math_only) 279 280/* Like HONOR_NANS, but true if the given mode distinguishes between 281 positive and negative zero, and the sign of zero is important. */ 282#define HONOR_SIGNED_ZEROS(MODE) \ 283 (MODE_HAS_SIGNED_ZEROS (MODE) && !flag_unsafe_math_optimizations) 284 285/* Like HONOR_NANS, but true if given mode supports sign-dependent rounding, 286 and the rounding mode is important. */ 287#define HONOR_SIGN_DEPENDENT_ROUNDING(MODE) \ 288 (MODE_HAS_SIGN_DEPENDENT_ROUNDING (MODE) && flag_rounding_math) 289 290#endif /* ! GCC_FLAGS_H */ 291