[8833] | 1 | /* Compilation switch flag definitions for GNU CC. |
---|
| 2 | Copyright (C) 1987, 1988, 1994, 1995 Free Software Foundation, Inc. |
---|
| 3 | |
---|
| 4 | This file is part of GNU CC. |
---|
| 5 | |
---|
| 6 | GNU CC is free software; you can redistribute it and/or modify |
---|
| 7 | it under the terms of the GNU General Public License as published by |
---|
| 8 | the Free Software Foundation; either version 2, or (at your option) |
---|
| 9 | any later version. |
---|
| 10 | |
---|
| 11 | GNU CC is distributed in the hope that it will be useful, |
---|
| 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
| 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
| 14 | GNU General Public License for more details. |
---|
| 15 | |
---|
| 16 | You should have received a copy of the GNU General Public License |
---|
| 17 | along with GNU CC; see the file COPYING. If not, write to |
---|
| 18 | the Free Software Foundation, 59 Temple Place - Suite 330, |
---|
| 19 | Boston, MA 02111-1307, USA. */ |
---|
| 20 | |
---|
| 21 | /* Name of the input .c file being compiled. */ |
---|
| 22 | extern char *main_input_filename; |
---|
| 23 | |
---|
| 24 | enum debug_info_type |
---|
| 25 | { |
---|
| 26 | NO_DEBUG, /* Write no debug info. */ |
---|
| 27 | DBX_DEBUG, /* Write BSD .stabs for DBX (using dbxout.c). */ |
---|
| 28 | SDB_DEBUG, /* Write COFF for (old) SDB (using sdbout.c). */ |
---|
| 29 | DWARF_DEBUG, /* Write Dwarf debug info (using dwarfout.c). */ |
---|
| 30 | XCOFF_DEBUG /* Write IBM/Xcoff debug info (using dbxout.c). */ |
---|
| 31 | }; |
---|
| 32 | |
---|
| 33 | /* Specify which kind of debugging info to generate. */ |
---|
| 34 | extern enum debug_info_type write_symbols; |
---|
| 35 | |
---|
| 36 | enum debug_info_level |
---|
| 37 | { |
---|
| 38 | DINFO_LEVEL_NONE, /* Write no debugging info. */ |
---|
| 39 | DINFO_LEVEL_TERSE, /* Write minimal info to support tracebacks only. */ |
---|
| 40 | DINFO_LEVEL_NORMAL, /* Write info for all declarations (and line table). */ |
---|
| 41 | DINFO_LEVEL_VERBOSE /* Write normal info plus #define/#undef info. */ |
---|
| 42 | }; |
---|
| 43 | |
---|
| 44 | /* Specify how much debugging info to generate. */ |
---|
| 45 | extern enum debug_info_level debug_info_level; |
---|
| 46 | |
---|
| 47 | /* Nonzero means use GNU-only extensions in the generated symbolic |
---|
| 48 | debugging information. */ |
---|
| 49 | extern int use_gnu_debug_info_extensions; |
---|
| 50 | |
---|
| 51 | /* Nonzero means do optimizations. -opt. */ |
---|
| 52 | |
---|
| 53 | extern int optimize; |
---|
| 54 | |
---|
| 55 | /* Nonzero means do stupid register allocation. -noreg. |
---|
| 56 | Currently, this is 1 if `optimize' is 0. */ |
---|
| 57 | |
---|
| 58 | extern int obey_regdecls; |
---|
| 59 | |
---|
| 60 | /* Don't print functions as they are compiled and don't print |
---|
| 61 | times taken by the various passes. -quiet. */ |
---|
| 62 | |
---|
| 63 | extern int quiet_flag; |
---|
| 64 | |
---|
| 65 | /* Don't print warning messages. -w. */ |
---|
| 66 | |
---|
| 67 | extern int inhibit_warnings; |
---|
| 68 | |
---|
| 69 | /* Do print extra warnings (such as for uninitialized variables). -W. */ |
---|
| 70 | |
---|
| 71 | extern int extra_warnings; |
---|
| 72 | |
---|
| 73 | /* Nonzero to warn about unused local variables. */ |
---|
| 74 | |
---|
| 75 | extern int warn_unused; |
---|
| 76 | |
---|
| 77 | /* Nonzero means warn if inline function is too large. */ |
---|
| 78 | |
---|
| 79 | extern int warn_inline; |
---|
| 80 | |
---|
| 81 | /* Nonzero to warn about variables used before they are initialized. */ |
---|
| 82 | |
---|
| 83 | extern int warn_uninitialized; |
---|
| 84 | |
---|
| 85 | /* Nonzero means warn about all declarations which shadow others. */ |
---|
| 86 | |
---|
| 87 | extern int warn_shadow; |
---|
| 88 | |
---|
| 89 | /* Warn if a switch on an enum fails to have a case for every enum value. */ |
---|
| 90 | |
---|
| 91 | extern int warn_switch; |
---|
| 92 | |
---|
| 93 | /* Nonzero means warn about function definitions that default the return type |
---|
| 94 | or that use a null return and have a return-type other than void. */ |
---|
| 95 | |
---|
| 96 | extern int warn_return_type; |
---|
| 97 | |
---|
| 98 | /* Nonzero means warn about pointer casts that increase the required |
---|
| 99 | alignment of the target type (and might therefore lead to a crash |
---|
| 100 | due to a misaligned access). */ |
---|
| 101 | |
---|
| 102 | extern int warn_cast_align; |
---|
| 103 | |
---|
| 104 | /* Nonzero means warn that dbx info for template class methods isn't fully |
---|
| 105 | supported yet. */ |
---|
| 106 | |
---|
| 107 | extern int warn_template_debugging; |
---|
| 108 | |
---|
| 109 | /* Nonzero means warn about any identifiers that match in the first N |
---|
| 110 | characters. The value N is in `id_clash_len'. */ |
---|
| 111 | |
---|
| 112 | extern int warn_id_clash; |
---|
| 113 | extern unsigned id_clash_len; |
---|
| 114 | |
---|
| 115 | /* Nonzero means warn about any objects definitions whose size is larger |
---|
| 116 | than N bytes. Also want about function definitions whose returned |
---|
| 117 | values are larger than N bytes. The value N is in `larger_than_size'. */ |
---|
| 118 | |
---|
| 119 | extern int warn_larger_than; |
---|
| 120 | extern unsigned larger_than_size; |
---|
| 121 | |
---|
| 122 | /* Warn if a function returns an aggregate, |
---|
| 123 | since there are often incompatible calling conventions for doing this. */ |
---|
| 124 | |
---|
| 125 | extern int warn_aggregate_return; |
---|
| 126 | |
---|
| 127 | /* Nonzero if generating code to do profiling. */ |
---|
| 128 | |
---|
| 129 | extern int profile_flag; |
---|
| 130 | |
---|
| 131 | /* Nonzero if generating code to do profiling on the basis of basic blocks. */ |
---|
| 132 | |
---|
| 133 | extern int profile_block_flag; |
---|
| 134 | |
---|
| 135 | /* Nonzero for -pedantic switch: warn about anything |
---|
| 136 | that standard C forbids. */ |
---|
| 137 | |
---|
| 138 | extern int pedantic; |
---|
| 139 | |
---|
| 140 | /* Temporarily suppress certain warnings. |
---|
| 141 | This is set while reading code from a system header file. */ |
---|
| 142 | |
---|
| 143 | extern int in_system_header; |
---|
| 144 | |
---|
| 145 | /* Nonzero for -dp: annotate the assembly with a comment describing the |
---|
| 146 | pattern and alternative used. */ |
---|
| 147 | |
---|
| 148 | extern int flag_print_asm_name; |
---|
| 149 | |
---|
| 150 | /* Now the symbols that are set with `-f' switches. */ |
---|
| 151 | |
---|
| 152 | /* Nonzero means `char' should be signed. */ |
---|
| 153 | |
---|
| 154 | extern int flag_signed_char; |
---|
| 155 | |
---|
| 156 | /* Nonzero means give an enum type only as many bytes as it needs. */ |
---|
| 157 | |
---|
| 158 | extern int flag_short_enums; |
---|
| 159 | |
---|
| 160 | /* Nonzero for -fcaller-saves: allocate values in regs that need to |
---|
| 161 | be saved across function calls, if that produces overall better code. |
---|
| 162 | Optional now, so people can test it. */ |
---|
| 163 | |
---|
| 164 | extern int flag_caller_saves; |
---|
| 165 | |
---|
| 166 | /* Nonzero for -fpcc-struct-return: return values the same way PCC does. */ |
---|
| 167 | |
---|
| 168 | extern int flag_pcc_struct_return; |
---|
| 169 | |
---|
| 170 | /* Nonzero for -fforce-mem: load memory value into a register |
---|
| 171 | before arithmetic on it. This makes better cse but slower compilation. */ |
---|
| 172 | |
---|
| 173 | extern int flag_force_mem; |
---|
| 174 | |
---|
| 175 | /* Nonzero for -fforce-addr: load memory address into a register before |
---|
| 176 | reference to memory. This makes better cse but slower compilation. */ |
---|
| 177 | |
---|
| 178 | extern int flag_force_addr; |
---|
| 179 | |
---|
| 180 | /* Nonzero for -fdefer-pop: don't pop args after each function call; |
---|
| 181 | instead save them up to pop many calls' args with one insns. */ |
---|
| 182 | |
---|
| 183 | extern int flag_defer_pop; |
---|
| 184 | |
---|
| 185 | /* Nonzero for -ffloat-store: don't allocate floats and doubles |
---|
| 186 | in extended-precision registers. */ |
---|
| 187 | |
---|
| 188 | extern int flag_float_store; |
---|
| 189 | |
---|
| 190 | /* Nonzero enables strength-reduction in loop.c. */ |
---|
| 191 | |
---|
| 192 | extern int flag_strength_reduce; |
---|
| 193 | |
---|
| 194 | /* Nonzero enables loop unrolling in unroll.c. Only loops for which the |
---|
| 195 | number of iterations can be calculated at compile-time (UNROLL_COMPLETELY, |
---|
| 196 | UNROLL_MODULO) or at run-time (preconditioned to be UNROLL_MODULO) are |
---|
| 197 | unrolled. */ |
---|
| 198 | |
---|
| 199 | extern int flag_unroll_loops; |
---|
| 200 | |
---|
| 201 | /* Nonzero enables loop unrolling in unroll.c. All loops are unrolled. |
---|
| 202 | This is generally not a win. */ |
---|
| 203 | |
---|
| 204 | extern int flag_unroll_all_loops; |
---|
| 205 | |
---|
| 206 | /* Nonzero for -fcse-follow-jumps: |
---|
| 207 | have cse follow jumps to do a more extensive job. */ |
---|
| 208 | |
---|
| 209 | extern int flag_cse_follow_jumps; |
---|
| 210 | |
---|
| 211 | /* Nonzero for -fcse-skip-blocks: |
---|
| 212 | have cse follow a branch around a block. */ |
---|
| 213 | |
---|
| 214 | extern int flag_cse_skip_blocks; |
---|
| 215 | |
---|
| 216 | /* Nonzero for -fexpensive-optimizations: |
---|
| 217 | perform miscellaneous relatively-expensive optimizations. */ |
---|
| 218 | extern int flag_expensive_optimizations; |
---|
| 219 | |
---|
| 220 | /* Nonzero for -fwritable-strings: |
---|
| 221 | store string constants in data segment and don't uniquize them. */ |
---|
| 222 | |
---|
| 223 | extern int flag_writable_strings; |
---|
| 224 | |
---|
| 225 | /* Nonzero means don't put addresses of constant functions in registers. |
---|
| 226 | Used for compiling the Unix kernel, where strange substitutions are |
---|
| 227 | done on the assembly output. */ |
---|
| 228 | |
---|
| 229 | extern int flag_no_function_cse; |
---|
| 230 | |
---|
| 231 | /* Nonzero for -fomit-frame-pointer: |
---|
| 232 | don't make a frame pointer in simple functions that don't require one. */ |
---|
| 233 | |
---|
| 234 | extern int flag_omit_frame_pointer; |
---|
| 235 | |
---|
| 236 | /* Nonzero to inhibit use of define_optimization peephole opts. */ |
---|
| 237 | |
---|
| 238 | extern int flag_no_peephole; |
---|
| 239 | |
---|
| 240 | /* Nonzero means all references through pointers are volatile. */ |
---|
| 241 | |
---|
| 242 | extern int flag_volatile; |
---|
| 243 | |
---|
| 244 | /* Nonzero means treat all global and extern variables as global. */ |
---|
| 245 | |
---|
| 246 | extern int flag_volatile_global; |
---|
| 247 | |
---|
| 248 | /* Nonzero allows GCC to violate some IEEE or ANSI rules regarding math |
---|
| 249 | operations in the interest of optimization. For example it allows |
---|
| 250 | GCC to assume arguments to sqrt are nonnegative numbers, allowing |
---|
| 251 | faster code for sqrt to be generated. */ |
---|
| 252 | |
---|
| 253 | extern int flag_fast_math; |
---|
| 254 | |
---|
| 255 | /* Nonzero means make functions that look like good inline candidates |
---|
| 256 | go inline. */ |
---|
| 257 | |
---|
| 258 | extern int flag_inline_functions; |
---|
| 259 | |
---|
| 260 | /* Nonzero for -fkeep-inline-functions: even if we make a function |
---|
| 261 | go inline everywhere, keep its definition around for debugging |
---|
| 262 | purposes. */ |
---|
| 263 | |
---|
| 264 | extern int flag_keep_inline_functions; |
---|
| 265 | |
---|
| 266 | /* Nonzero means that functions declared `inline' will be treated |
---|
| 267 | as `static'. Prevents generation of zillions of copies of unused |
---|
| 268 | static inline functions; instead, `inlines' are written out |
---|
| 269 | only when actually used. Used in conjunction with -g. Also |
---|
| 270 | does the right thing with #pragma interface. */ |
---|
| 271 | |
---|
| 272 | extern int flag_no_inline; |
---|
| 273 | |
---|
| 274 | /* Nonzero if we are only using compiler to check syntax errors. */ |
---|
| 275 | |
---|
| 276 | extern int flag_syntax_only; |
---|
| 277 | |
---|
| 278 | /* Nonzero means we should save auxiliary info into a .X file. */ |
---|
| 279 | |
---|
| 280 | extern int flag_gen_aux_info; |
---|
| 281 | |
---|
| 282 | /* Nonzero means make the text shared if supported. */ |
---|
| 283 | |
---|
| 284 | extern int flag_shared_data; |
---|
| 285 | |
---|
| 286 | /* flag_schedule_insns means schedule insns within basic blocks (before |
---|
| 287 | local_alloc). |
---|
| 288 | flag_schedule_insns_after_reload means schedule insns after |
---|
| 289 | global_alloc. */ |
---|
| 290 | |
---|
| 291 | extern int flag_schedule_insns; |
---|
| 292 | extern int flag_schedule_insns_after_reload; |
---|
| 293 | |
---|
| 294 | /* Nonzero means put things in delayed-branch slots if supported. */ |
---|
| 295 | |
---|
| 296 | extern int flag_delayed_branch; |
---|
| 297 | |
---|
| 298 | /* Nonzero means to run cleanups after CALL_EXPRs. */ |
---|
| 299 | |
---|
| 300 | extern int flag_short_temps; |
---|
| 301 | |
---|
| 302 | /* Nonzero means pretend it is OK to examine bits of target floats, |
---|
| 303 | even if that isn't true. The resulting code will have incorrect constants, |
---|
| 304 | but the same series of instructions that the native compiler would make. */ |
---|
| 305 | |
---|
| 306 | extern int flag_pretend_float; |
---|
| 307 | |
---|
| 308 | /* Nonzero means change certain warnings into errors. |
---|
| 309 | Usually these are warnings about failure to conform to some standard. */ |
---|
| 310 | |
---|
| 311 | extern int flag_pedantic_errors; |
---|
| 312 | |
---|
| 313 | /* Nonzero means generate position-independent code. |
---|
| 314 | This is not fully implemented yet. */ |
---|
| 315 | |
---|
| 316 | extern int flag_pic; |
---|
| 317 | |
---|
| 318 | /* Nonzero means place uninitialized global data in the bss section. */ |
---|
| 319 | |
---|
| 320 | extern int flag_no_common; |
---|
| 321 | |
---|
| 322 | /* -finhibit-size-directive inhibits output of .size for ELF. |
---|
| 323 | This is used only for compiling crtstuff.c, |
---|
| 324 | and it may be extended to other effects |
---|
| 325 | needed for crtstuff.c on other systems. */ |
---|
| 326 | extern int flag_inhibit_size_directive; |
---|
| 327 | |
---|
| 328 | /* -fverbose-asm causes extra commentary information to be produced in |
---|
| 329 | the generated assembly code (to make it more readable). This option |
---|
| 330 | is generally only of use to those who actually need to read the |
---|
| 331 | generated assembly code (perhaps while debugging the compiler itself). */ |
---|
| 332 | |
---|
| 333 | extern int flag_verbose_asm; |
---|
| 334 | |
---|
| 335 | /* -fgnu-linker specifies use of the GNU linker for initializations. |
---|
| 336 | -fno-gnu-linker says that collect will be used. */ |
---|
| 337 | extern int flag_gnu_linker; |
---|
| 338 | |
---|
| 339 | /* Tag all structures with __attribute__(packed) */ |
---|
| 340 | extern int flag_pack_struct; |
---|
| 341 | |
---|
| 342 | /* Other basic status info about current function. */ |
---|
| 343 | |
---|
| 344 | /* Nonzero means current function must be given a frame pointer. |
---|
| 345 | Set in stmt.c if anything is allocated on the stack there. |
---|
| 346 | Set in reload1.c if anything is allocated on the stack there. */ |
---|
| 347 | |
---|
| 348 | extern int frame_pointer_needed; |
---|
| 349 | |
---|
| 350 | /* Set nonzero if jump_optimize finds that control falls through |
---|
| 351 | at the end of the function. */ |
---|
| 352 | |
---|
| 353 | extern int can_reach_end; |
---|
| 354 | |
---|
| 355 | /* Nonzero if function being compiled receives nonlocal gotos |
---|
| 356 | from nested functions. */ |
---|
| 357 | |
---|
| 358 | extern int current_function_has_nonlocal_label; |
---|
| 359 | |
---|
| 360 | /* Nonzero if function being compiled has nonlocal gotos to parent |
---|
| 361 | function. */ |
---|
| 362 | |
---|
| 363 | extern int current_function_has_nonlocal_goto; |
---|