On Tue, Oct 27, 2015 at 07:06:42PM -0600, Jeff Law wrote: > On 10/26/2015 12:45 PM, Jeff Law wrote: > >>>>Don't change the whitespace here. Looks like you probably removed a > >>>>page > >>>>break. > >>>Not obvious where it got lost as there's no filename in the review > >>>comments :-) > >> > >>Oops. I think it was one of the sel-sched files. > >I'll do a looksie over things for undesirable whitespace changes. > > > >At least some of the CHECKING_P vs flag_checking thingies are for things > >that are used outside the compiler proper. ie things that don't have > >the options structure. The pretty-printer and diagnostics stuff was of > >that nature. So I'm keeping CHECKING_P rather than flag_checking in those. > I found the whitespace change and reverted that bit (along with the other > changes mentioned in my message yesterday). > > I introduced checking_verify_classes wrapper around verify_classes in > ipa-icf.c to match how that situation was handled elsewhere (as opposed to > just pulling the test up into the callers). The more I think about it, the > more I prefer the factoring done by Mikhail -- because it does make it > significantly easier to make checking more fine grained controlled later. > We might want to carry this into verify_insn_chain and a few other places > too. > > I also fixed several prototypes/definitions which had an empty parameter > list to explicitly have no parameters ie foo (void). I'm not sure why > Mikhail's patch dropped the "void". Similarly I put back the DEBUG_FUNCTION > annotations that were dropped.
Well, C++ doesn't have the thing where an empty parameter list means implicit var args or whatever exactly it is in C. So I can see why you'd add new functions with just (), but changing lines you don't already need to seems like a separate patch to me. Trev > > > Obviously we'll want another pass over the remaining ENABLE_CHECKING bits > once the rest of Mikhail's patches are installed. Then we'll probably want > a pass over the CHECKING_P instances to see which really need to stay #ifs > vs runtime checks of flag_checking. > > I've bootstrapped and regression tested this change on x86_64-linux-gnu and > an earlier version has built all the configurations in config-list.mk > > Given this is primarily Mikhail's patch -- my contributions would best be > summarized as trying to address Bernd's comments and ChangeLog cleanup. I'm > going to give final approval to this patch and install it. > > Attached is the actual patch committed > > > Jeff > > gcc/lto/ChangeLog: > 2015-10-19 Mikhail Maltsev <malts...@gmail.com> > > * lto.c (unify_scc): Use flag_checking and remove ENABLE_CHECKING > conditionals. > (lto_fixup_state): Likewise. > (do_whole_program_analysis): Use > symtab_node::checking_verify_symtab_nodes and remove ENABLE_CHECKING > conditionals. > > gcc/ChangeLog: > > 2015-10-19 Mikhail Maltsev <malts...@gmail.com> > > * attribs.c (check_attribute_tables): New function, broken out from... > (init_attributes): Use it. > * cfgcleanup.c (try_optimize_cfg): Use flag_checking, CHECKING_P > gcc_checking_assert and checking_* functions to eliminate > ENABLE_CHECKING conditionals. > * cfgexpand.c (expand_goto, expand_debug_expr): Likewise. > (pass_expand::execute): Likewise. > * cgraphclones.c (symbol_table::materialize_all_clones): Likewise. > * cgraphunit.c (mark_functions_to_output): Likewise. > (cgraph_node::expand_thunk): Likewise. > (symbol_table::compile): Likewise. > * ddg.c (add_cross_iteration_register_deps): Likewise. > (create_ddg_all_sccs): Likewise. > * df-core.c (df_finish_pass, df_analyze): Likewise. > * diagnostic-core.h: Likewise. > * diagnostic.c (diagnostic_report_diagnostic): Likewise. > * dominance.c (calculate_dominance_info): Likewise. > * dwarf2out.c (add_AT_die_ref): Likewise. > (const_ok_for_output_1, mem_loc_descriptor): Likewise. > (loc_list_from_tree, gen_lexical_block_die): Likewise. > gen_type_die_with_usage, gen_type_die): Likewise. > (dwarf2out_decl): Likewise. > * emit-rtl.c (verify_rtx_sharing, reorder_insns_nobb): Likewise. > * except.c (duplicate_eh_regions): Likewise. > * fwprop.c (register_active_defs, update_df_init): Likewise. > (fwprop_init, fwprop_done): Likewise. > (update_uses): Likewise. > * ggc-page.c (ggc_grow): Likewise. > * gimplify.c (gimplify_body): Likewise. > (gimplify_hasher::equal): Likewise. > * graphite-isl-ast-to-gimple.c (graphite_verify): Likewise. > * graphite-scop-detection.c (canonicalize_loop_closed_ssa_form): > Likewise. > * graphite-sese-to-poly.c (rewrite_reductions_out_of_ssa): Likewise. > (rewrite_cross_bb_scalar_deps_out_of_ssa): Likwise. > * hash-table.h (::find_empty_slot_for_expand): Likewise. > * ifcvt.c (if_convert): Likewise. > * ipa-cp.c (ipcp_propagate_stage): Likewise. > * ipa-devirt.c (type_in_anonymous_namespace_p): Likewise. > (odr_type_p, odr_types_equivalent_p): Likewise. > (add_type_duplicate, get_odr_type): Likewise. > * ipa-icf.c (sem_item_optimizer::execute): Likewise. > (sem_item_optimizer::subdivide_classes_by_equality): Likewise. > (sem_item_optimizer::verify_classes): Likewise. > (sem_item_optimizer::traverse_congruence_split): Likewise. > (sem_item_optimizer::checking_verify_classes): New. > * ipa-icf.h (sem_item_optimizer::checking_verify_classes): Add new > method. > * cfgrtl.c (commit_edge_insertions): Likewise. > (fixup_reorder_chain, cfg_layout_finalize): Likewise. > (rtl_flow_call_edges_add): Likewise. > * cgraph.c (symbol_table::create_edge): Likewise. > (cgraph_edge::redirect_call_stmt_to_callee): Likewise. > * cgraph.h (symtab_node): Likewise. > (symtab_node::checking_verify_symtab_nodes): Define. > (cgraph_node::checking_verify_cgraph_nodes): Define. > * cfghooks.h (checking_verify_flow_info): Define. > * cfgloop.h (checking_verify_loop_structure): Define. > * dominance.h (checking_verify_dominators): Define. > * et-forest.c: Fix comment. > * ipa-inline-analysis.c (compute_inline_parameters): Use flag_checking, > CHECKING_P gcc_checking_assert and checking_* functions to eliminate > ENABLE_CHECKING conditionals. > * ipa-inline-transform.c (save_inline_function_body): Likewise. > * ipa-inline.c (inline_small_functions): Likewise. > (early_inliner): Likewise. > * ipa-inline.h (estimate_edge_growth): Likewise. > * ipa-visibility.c (function_and_variable_visibility): Likewise. > * ipa.c (symbol_table::remove_unreachable_nodes): Likewise. > (ipa_single_use): Likewise. > * ira-int.h: Likewise. > * ira.c (ira): Likewise. > * loop-doloop.c (doloop_optimize_loops): Likewise. > * loop-init.c (loop_optimizer_init, fix_loop_structure): Likewise. > * loop-invariant.c (move_loop_invariants): Likewise. > * lra-assigns.c (lra_assign): Likewise. > * lra-constraints.c (lra_constraints): Likewise. > * lra-eliminations.c (lra_eliminate): Likewise. > * lra-int.h (struct lra_reg): Likewise. > * lra-lives.c (check_pseudos_live_through_calls): Likewise. > (lra_create_live_ranges_1): Likewise. > * lra-remat.c (create_remat_bb_data): Likewise. > * lra.c (lra_update_insn_recog_data, restore_scratches): Likewise. > (lra): Likewise. > (check_rtl): Always define. Remove incorrect guard around > extract_constrain_insn call. > * lto-cgraph.c (input_cgraph_1: Use flag_checking, > CHECKING_P gcc_checking_assert and checking_* functions to eliminate > ENABLE_CHECKING conditionals. > * lto-streamer-out.c (DFS::DFS): Likewise. > (lto_output): Likewise. > * lto-streamer.c (lto_streamer_init): Likewise. > * omp-low.c (scan_omp_target, expand_omp_taskreg): Likewise. > expand_omp_target, execute_expand_omp): Likewise. > (lower_omp_target): Likewise. > * passes.c (execute_function_todo): Likewise. > (execute_todo, execute_one_pass): Likewise. > (verify_curr_properties): Always define. > * predict.c (tree_estimate_probability: Use flag_checking, > CHECKING_P gcc_checking_assert and checking_* functions to eliminate > ENABLE_CHECKING conditionals. > (propagate_freq): Likewise. > * pretty-print.c (pp_format): Likewise. > * real.c (real_to_decimal_for_mode): Likewise. > * recog.c (split_all_insns): Likewise. > * regcprop.c (kill_value_one_regno): Likewise. > (copy_value): Likewise. > (validate_value_data): Define unconditionally. > * reload.c: Fix comment. > * timevar.c: Include options.h > * tree-ssa.h (checking_verify_ssa): Define. > * tree-ssa-loop-manip.h (checking_verify_loop_closed_ssa): Define. > * sched-deps.c (CHECK): Remove unused macro. > (add_or_update_dep_1, sd_add_dep: Use flag_checking, CHECKING_P > gcc_checking_assert and checking_* functions to eliminate > ENABLE_CHECKING conditionals. > * sel-sched-ir.c (free_regset_pool, tidy_control_flow): Likewise. > * sel-sched.c (struct moveop_static_params): Likewise. > (find_best_reg_for_expr, move_cond_jump): Likewise. > (move_op_orig_expr_not_found): Likewise. > (code_motion_process_successors, move_op): Likewise. > * ssa-iterators.h (first_readonly_imm_use): Likewise. > (next_readonly_imm_use): Likewise. > * store-motion.c (compute_store_table): Likewise. > * symbol-summary.h (function_summary::function_summary): Likewise. > * target.h (cumulative_args_t): Likewise. > (get_cumulative_args, pack_cumulative_args): Likewise. > * timevar.c: (timer::print): Likewise. > * trans-mem.c (ipa_tm_execute): Likewise. > * tree-cfg.c (move_stmt_op): Likewise. > (move_sese_region_to_fn): Likewise. > (gimple_flow_call_edges_add): Likewise. > * tree-cfgcleanup.c (cleanup_tree_cfg_noloop, repair_loop_structures): > Likewise. > * tree-eh.c (remove_unreachable_handlers): Likewise. > * tree-if-conv.c (pass_if_conversion::execute): Likewise. > * tree-inline.c (expand_call_inline, optimize_inline_calls): Likewise. > * tree-into-ssa.c (update_ssa): Likewise. > * tree-loop-distribution.c (pass_loop_distribution::execute): Likewise. > * tree-outof-ssa.c (eliminate_useless_phis, rewrite_trees): Likewise. > * tree-parloops.c (pass_parallelize_loops::execute): Likewise. > * tree-predcom.c (suitable_component_p): Likewise. > * tree-profile.c (gimple_gen_const_delta_profiler): Likewise. > * tree-ssa-alias.c (refs_may_alias_p_1): Likewise. > * tree-ssa-live.c (verify_live_on_entry): Likewise. > * tree-ssa-live.h (register_ssa_partition): Likewise. > * tree-ssa-loop-ivcanon.c (tree_unroll_loops_completely): Likewise. > * tree-ssa-loop-manip.c (add_exit_phi): Likewise. > (tree_transform_and_unroll_loop): Likewise. > * tree-ssa-math-opts.c (pass_cse_reciprocals::execute): Likewise. > * tree-ssa-operands.c (get_expr_operands): Likewise. > * tree-ssa-propagate.c (replace_exp_1): Likewise. > * tree-ssa-structalias.c (rewrite_constraints): Likewise. > * tree-ssa-ter.c (free_temp_expr_table): Likewise. > * tree-ssa-threadupdate.c (duplicate_thread_path): Likewise. > * tree-ssanames.c (release_ssa_name_fn): Likewise. > * tree-stdarg.c (expand_ifn_va_arg): Likewise. > * tree-vect-loop-manip.c > (slpeel_tree_duplicate_loop_to_edge_cfg): Likewise. > (slpeel_checking_verify_cfg_after_peeling): Likewise. > (vect_do_peeling_for_loop_bound): Likewise. > (vect_do_peeling_for_alignment): Likewise. > * tree-vrp.c (supports_overflow_infinity): Likewise. > (set_value_range): Likewise. > * tree.c (free_lang_data_in_cgraph): Likewise. > * value-prof.c (gimple_remove_histogram_value): Likewise. > (free_hist): Likewise. > * var-tracking.c (canonicalize_values_star): Likewise. > (compute_bb_dataflow, vt_find_locations, vt_emit_notes): Likewise. > > diff --git a/gcc/attribs.c b/gcc/attribs.c > index 6cbe011..e7af7b0 100644 > --- a/gcc/attribs.c > +++ b/gcc/attribs.c > @@ -174,8 +174,58 @@ find_attribute_namespace (const char* ns) > return NULL; > } > > -/* Initialize attribute tables, and make some sanity checks > - if --enable-checking. */ > +/* Make some sanity checks on the attribute tables. */ > + > +static void > +check_attribute_tables (void) > +{ > + for (size_t i = 0; i < ARRAY_SIZE (attribute_tables); i++) > + for (size_t j = 0; attribute_tables[i][j].name != NULL; j++) > + { > + /* The name must not begin and end with __. */ > + const char *name = attribute_tables[i][j].name; > + int len = strlen (name); > + > + gcc_assert (!(name[0] == '_' && name[1] == '_' > + && name[len - 1] == '_' && name[len - 2] == '_')); > + > + /* The minimum and maximum lengths must be consistent. */ > + gcc_assert (attribute_tables[i][j].min_length >= 0); > + > + gcc_assert (attribute_tables[i][j].max_length == -1 > + || (attribute_tables[i][j].max_length > + >= attribute_tables[i][j].min_length)); > + > + /* An attribute cannot require both a DECL and a TYPE. */ > + gcc_assert (!attribute_tables[i][j].decl_required > + || !attribute_tables[i][j].type_required); > + > + /* If an attribute requires a function type, in particular > + it requires a type. */ > + gcc_assert (!attribute_tables[i][j].function_type_required > + || attribute_tables[i][j].type_required); > + } > + > + /* Check that each name occurs just once in each table. */ > + for (size_t i = 0; i < ARRAY_SIZE (attribute_tables); i++) > + for (size_t j = 0; attribute_tables[i][j].name != NULL; j++) > + for (size_t k = j + 1; attribute_tables[i][k].name != NULL; k++) > + gcc_assert (strcmp (attribute_tables[i][j].name, > + attribute_tables[i][k].name)); > + > + /* Check that no name occurs in more than one table. Names that > + begin with '*' are exempt, and may be overridden. */ > + for (size_t i = 0; i < ARRAY_SIZE (attribute_tables); i++) > + for (size_t j = i + 1; j < ARRAY_SIZE (attribute_tables); j++) > + for (size_t k = 0; attribute_tables[i][k].name != NULL; k++) > + for (size_t l = 0; attribute_tables[j][l].name != NULL; l++) > + gcc_assert (attribute_tables[i][k].name[0] == '*' > + || strcmp (attribute_tables[i][k].name, > + attribute_tables[j][l].name)); > +} > + > +/* Initialize attribute tables, and make some sanity checks if checking is > + enabled. */ > > void > init_attributes (void) > @@ -195,62 +245,8 @@ init_attributes (void) > if (attribute_tables[i] == NULL) > attribute_tables[i] = empty_attribute_table; > > -#ifdef ENABLE_CHECKING > - /* Make some sanity checks on the attribute tables. */ > - for (i = 0; i < ARRAY_SIZE (attribute_tables); i++) > - { > - int j; > - > - for (j = 0; attribute_tables[i][j].name != NULL; j++) > - { > - /* The name must not begin and end with __. */ > - const char *name = attribute_tables[i][j].name; > - int len = strlen (name); > - > - gcc_assert (!(name[0] == '_' && name[1] == '_' > - && name[len - 1] == '_' && name[len - 2] == '_')); > - > - /* The minimum and maximum lengths must be consistent. */ > - gcc_assert (attribute_tables[i][j].min_length >= 0); > - > - gcc_assert (attribute_tables[i][j].max_length == -1 > - || (attribute_tables[i][j].max_length > - >= attribute_tables[i][j].min_length)); > - > - /* An attribute cannot require both a DECL and a TYPE. */ > - gcc_assert (!attribute_tables[i][j].decl_required > - || !attribute_tables[i][j].type_required); > - > - /* If an attribute requires a function type, in particular > - it requires a type. */ > - gcc_assert (!attribute_tables[i][j].function_type_required > - || attribute_tables[i][j].type_required); > - } > - } > - > - /* Check that each name occurs just once in each table. */ > - for (i = 0; i < ARRAY_SIZE (attribute_tables); i++) > - { > - int j, k; > - for (j = 0; attribute_tables[i][j].name != NULL; j++) > - for (k = j + 1; attribute_tables[i][k].name != NULL; k++) > - gcc_assert (strcmp (attribute_tables[i][j].name, > - attribute_tables[i][k].name)); > - } > - /* Check that no name occurs in more than one table. Names that > - begin with '*' are exempt, and may be overridden. */ > - for (i = 0; i < ARRAY_SIZE (attribute_tables); i++) > - { > - size_t j, k, l; > - > - for (j = i + 1; j < ARRAY_SIZE (attribute_tables); j++) > - for (k = 0; attribute_tables[i][k].name != NULL; k++) > - for (l = 0; attribute_tables[j][l].name != NULL; l++) > - gcc_assert (attribute_tables[i][k].name[0] == '*' > - || strcmp (attribute_tables[i][k].name, > - attribute_tables[j][l].name)); > - } > -#endif > + if (flag_checking) > + check_attribute_tables (); > > for (i = 0; i < ARRAY_SIZE (attribute_tables); ++i) > /* Put all the GNU attributes into the "gnu" namespace. */ > diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c > index 7e576bc..c9b132d 100644 > --- a/gcc/cfgcleanup.c > +++ b/gcc/cfgcleanup.c > @@ -2873,11 +2873,8 @@ try_optimize_cfg (int mode) > to detect and fix during edge forwarding, and in some cases > is only visible after newly unreachable blocks are deleted, > which will be done in fixup_partitions. */ > - fixup_partitions (); > - > -#ifdef ENABLE_CHECKING > - verify_flow_info (); > -#endif > + fixup_partitions (); > + checking_verify_flow_info (); > } > > changed_overall |= changed; > diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c > index 8d5fb64..200520a 100644 > --- a/gcc/cfgexpand.c > +++ b/gcc/cfgexpand.c > @@ -3269,12 +3269,13 @@ expand_computed_goto (tree exp) > static void > expand_goto (tree label) > { > -#ifdef ENABLE_CHECKING > - /* Check for a nonlocal goto to a containing function. Should have > - gotten translated to __builtin_nonlocal_goto. */ > - tree context = decl_function_context (label); > - gcc_assert (!context || context == current_function_decl); > -#endif > + if (flag_checking) > + { > + /* Check for a nonlocal goto to a containing function. Should have > + gotten translated to __builtin_nonlocal_goto. */ > + tree context = decl_function_context (label); > + gcc_assert (!context || context == current_function_decl); > + } > > emit_jump (jump_target_rtx (label)); > } > @@ -5056,12 +5057,12 @@ expand_debug_expr (tree exp) > > default: > flag_unsupported: > -#ifdef ENABLE_CHECKING > - debug_tree (exp); > - gcc_unreachable (); > -#else > + if (flag_checking) > + { > + debug_tree (exp); > + gcc_unreachable (); > + } > return NULL; > -#endif > } > } > > @@ -6422,9 +6423,7 @@ pass_expand::execute (function *fun) > gcc.c-torture/execute/ipa-sra-2.c execution, -Os -m32 fails otherwise. > */ > cleanup_cfg (CLEANUP_NO_INSN_DEL); > > -#ifdef ENABLE_CHECKING > - verify_flow_info (); > -#endif > + checking_verify_flow_info (); > > /* Initialize pseudos allocated for hard registers. */ > emit_initial_value_sets (); > diff --git a/gcc/cfghooks.h b/gcc/cfghooks.h > index 0d25cf6..a0cb6fd 100644 > --- a/gcc/cfghooks.h > +++ b/gcc/cfghooks.h > @@ -186,6 +186,18 @@ struct cfg_hooks > }; > > extern void verify_flow_info (void); > + > +/* Check control flow invariants, if internal consistency checks are > + enabled. */ > + > +static inline void > +checking_verify_flow_info (void) > +{ > + /* TODO: Add a separate option for -fchecking=cfg. */ > + if (flag_checking) > + verify_flow_info (); > +} > + > extern void dump_bb (FILE *, basic_block, int, int); > extern void dump_bb_for_graph (pretty_printer *, basic_block); > extern void dump_flow_info (FILE *, int); > diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h > index cd4a4c9..6af6893 100644 > --- a/gcc/cfgloop.h > +++ b/gcc/cfgloop.h > @@ -311,6 +311,16 @@ extern void delete_loop (struct loop *); > > extern void verify_loop_structure (void); > > +/* Check loop structure invariants, if internal consistency checks are > + enabled. */ > + > +static inline void > +checking_verify_loop_structure (void) > +{ > + if (flag_checking) > + verify_loop_structure (); > +} > + > /* Loop analysis. */ > extern bool just_once_each_iteration_p (const struct loop *, > const_basic_block); > gcov_type expected_loop_iterations_unbounded (const struct loop *); > diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c > index d2fe1e0..14b9406 100644 > --- a/gcc/cfgrtl.c > +++ b/gcc/cfgrtl.c > @@ -2096,9 +2096,7 @@ commit_edge_insertions (void) > which will be done by fixup_partitions. */ > fixup_partitions (); > > -#ifdef ENABLE_CHECKING > - verify_flow_info (); > -#endif > + checking_verify_flow_info (); > > FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (cfun), > EXIT_BLOCK_PTR_FOR_FN (cfun), next_bb) > @@ -3722,9 +3720,8 @@ fixup_reorder_chain (void) > insn = NEXT_INSN (insn); > > set_last_insn (insn); > -#ifdef ENABLE_CHECKING > - verify_insn_chain (); > -#endif > + if (flag_checking) > + verify_insn_chain (); > > /* Now add jumps and labels as needed to match the blocks new > outgoing edges. */ > @@ -4312,9 +4309,7 @@ break_superblocks (void) > void > cfg_layout_finalize (void) > { > -#ifdef ENABLE_CHECKING > - verify_flow_info (); > -#endif > + checking_verify_flow_info (); > force_one_exit_fallthru (); > rtl_register_cfg_hooks (); > if (reload_completed && !targetm.have_epilogue ()) > @@ -4324,10 +4319,9 @@ cfg_layout_finalize (void) > rebuild_jump_labels (get_insns ()); > delete_dead_jumptables (); > > -#ifdef ENABLE_CHECKING > - verify_insn_chain (); > - verify_flow_info (); > -#endif > + if (flag_checking) > + verify_insn_chain (); > + checking_verify_flow_info (); > } > > > @@ -4892,13 +4886,11 @@ rtl_flow_call_edges_add (sbitmap blocks) > block in CFG already. Calling make_edge in such case would > cause us to mark that edge as fake and remove it later. */ > > -#ifdef ENABLE_CHECKING > - if (split_at_insn == BB_END (bb)) > + if (flag_checking && split_at_insn == BB_END (bb)) > { > e = find_edge (bb, EXIT_BLOCK_PTR_FOR_FN (cfun)); > gcc_assert (e == NULL); > } > -#endif > > /* Note that the following may create a new basic block > and renumber the existing basic blocks. */ > diff --git a/gcc/cgraph.c b/gcc/cgraph.c > index cfcfaf3..69804c3 100644 > --- a/gcc/cgraph.c > +++ b/gcc/cgraph.c > @@ -832,11 +832,9 @@ symbol_table::create_edge (cgraph_node *caller, > cgraph_node *callee, > { > /* This is a rather expensive check possibly triggering > construction of call stmt hashtable. */ > -#ifdef ENABLE_CHECKING > cgraph_edge *e; > - gcc_checking_assert ( > - !(e = caller->get_edge (call_stmt)) || e->speculative); > -#endif > + gcc_checking_assert (!(e = caller->get_edge (call_stmt)) > + || e->speculative); > > gcc_assert (is_gimple_call (call_stmt)); > } > @@ -1282,9 +1280,6 @@ cgraph_edge::redirect_call_stmt_to_callee (void) > gcall *new_stmt; > gimple_stmt_iterator gsi; > bool skip_bounds = false; > -#ifdef ENABLE_CHECKING > - cgraph_node *node; > -#endif > > if (e->speculative) > { > @@ -1402,13 +1397,11 @@ cgraph_edge::redirect_call_stmt_to_callee (void) > && !skip_bounds)) > return e->call_stmt; > > -#ifdef ENABLE_CHECKING > - if (decl) > + if (flag_checking && decl) > { > - node = cgraph_node::get (decl); > + cgraph_node *node = cgraph_node::get (decl); > gcc_assert (!node || !node->clone.combined_args_to_skip); > } > -#endif > > if (symtab->dump_file) > { > diff --git a/gcc/cgraph.h b/gcc/cgraph.h > index 7c54f24..0a0ff70 100644 > --- a/gcc/cgraph.h > +++ b/gcc/cgraph.h > @@ -362,7 +362,6 @@ public: > and NULL otherwise. */ > static inline symtab_node *get (const_tree decl) > { > -#ifdef ENABLE_CHECKING > /* Check that we are called for sane type of object - functions > and static or external variables. */ > gcc_checking_assert (TREE_CODE (decl) == FUNCTION_DECL > @@ -374,7 +373,6 @@ public: > memcpy/memset on the tree nodes. */ > gcc_checking_assert (!decl->decl_with_vis.symtab_node > || decl->decl_with_vis.symtab_node->decl == decl); > -#endif > return decl->decl_with_vis.symtab_node; > } > > @@ -398,6 +396,9 @@ public: > /* Verify symbol table for internal consistency. */ > static DEBUG_FUNCTION void verify_symtab_nodes (void); > > + /* Perform internal consistency checks, if they are enabled. */ > + static inline void checking_verify_symtab_nodes (void); > + > /* Type of the symbol. */ > ENUM_BITFIELD (symtab_type) type : 8; > > @@ -558,6 +559,13 @@ private: > symtab_node *ultimate_alias_target_1 (enum availability *avail = NULL); > }; > > +inline void > +symtab_node::checking_verify_symtab_nodes (void) > +{ > + if (flag_checking) > + symtab_node::verify_symtab_nodes (); > +} > + > /* Walk all aliases for NODE. */ > #define FOR_EACH_ALIAS(node, alias) \ > for (unsigned x_i = 0; node->iterate_direct_aliases (x_i, alias); x_i++) > @@ -1205,6 +1213,9 @@ public: > /* Verify whole cgraph structure. */ > static void DEBUG_FUNCTION verify_cgraph_nodes (void); > > + /* Verify cgraph, if consistency checking is enabled. */ > + static inline void checking_verify_cgraph_nodes (void); > + > /* Worker to bring NODE local. */ > static bool make_local (cgraph_node *node, void *); > > @@ -2753,6 +2764,15 @@ cgraph_node::can_remove_if_no_direct_calls_and_refs_p > (void) > return true; > } > > +/* Verify cgraph, if consistency checking is enabled. */ > + > +inline void > +cgraph_node::checking_verify_cgraph_nodes (void) > +{ > + if (flag_checking) > + cgraph_node::verify_cgraph_nodes (); > +} > + > /* Return true when variable can be removed from variable pool > if all direct calls are eliminated. */ > > diff --git a/gcc/cgraphclones.c b/gcc/cgraphclones.c > index f243f6f..f36ef34 100644 > --- a/gcc/cgraphclones.c > +++ b/gcc/cgraphclones.c > @@ -1074,9 +1074,8 @@ symbol_table::materialize_all_clones (void) > > if (symtab->dump_file) > fprintf (symtab->dump_file, "Materializing clones\n"); > -#ifdef ENABLE_CHECKING > - cgraph_node::verify_cgraph_nodes (); > -#endif > + > + cgraph_node::checking_verify_cgraph_nodes (); > > /* We can also do topological order, but number of iterations should be > bounded by number of IPA passes since single IPA pass is probably not > @@ -1145,9 +1144,9 @@ symbol_table::materialize_all_clones (void) > node->clear_stmts_in_references (); > if (symtab->dump_file) > fprintf (symtab->dump_file, "Materialization Call site updates done.\n"); > -#ifdef ENABLE_CHECKING > - cgraph_node::verify_cgraph_nodes (); > -#endif > + > + cgraph_node::checking_verify_cgraph_nodes (); > + > symtab->remove_unreachable_nodes (symtab->dump_file); > } > > diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c > index 0b0c0f4..eab8c7f 100644 > --- a/gcc/cgraphunit.c > +++ b/gcc/cgraphunit.c > @@ -1325,13 +1325,12 @@ handle_alias_pairs (void) > static void > mark_functions_to_output (void) > { > - cgraph_node *node; > -#ifdef ENABLE_CHECKING > bool check_same_comdat_groups = false; > + cgraph_node *node; > > - FOR_EACH_FUNCTION (node) > - gcc_assert (!node->process); > -#endif > + if (flag_checking) > + FOR_EACH_FUNCTION (node) > + gcc_assert (!node->process); > > FOR_EACH_FUNCTION (node) > { > @@ -1365,15 +1364,14 @@ mark_functions_to_output (void) > } > else if (node->same_comdat_group) > { > -#ifdef ENABLE_CHECKING > - check_same_comdat_groups = true; > -#endif > + if (flag_checking) > + check_same_comdat_groups = true; > } > else > { > /* We should've reclaimed all functions that are not needed. */ > -#ifdef ENABLE_CHECKING > - if (!node->global.inlined_to > + if (flag_checking > + && !node->global.inlined_to > && gimple_has_body_p (decl) > /* FIXME: in ltrans unit when offline copy is outside partition > but inline copies > are inside partition, we can end up not removing the body > since we no longer > @@ -1386,7 +1384,6 @@ mark_functions_to_output (void) > node->debug (); > internal_error ("failed to reclaim unneeded function"); > } > -#endif > gcc_assert (node->global.inlined_to > || !gimple_has_body_p (decl) > || node->in_other_partition > @@ -1397,8 +1394,7 @@ mark_functions_to_output (void) > } > > } > -#ifdef ENABLE_CHECKING > - if (check_same_comdat_groups) > + if (flag_checking && check_same_comdat_groups) > FOR_EACH_FUNCTION (node) > if (node->same_comdat_group && !node->process) > { > @@ -1418,7 +1414,6 @@ mark_functions_to_output (void) > "comdat group"); > } > } > -#endif > } > > /* DECL is FUNCTION_DECL. Initialize datastructures so DECL is a function > @@ -1887,9 +1882,7 @@ cgraph_node::expand_thunk (bool output_asm_thunks, bool > force_gimple_thunk) > TREE_ASM_WRITTEN (thunk_fndecl) = false; > delete_unreachable_blocks (); > update_ssa (TODO_update_ssa); > -#ifdef ENABLE_CHECKING > - verify_flow_info (); > -#endif > + checking_verify_flow_info (); > free_dominance_info (CDI_DOMINATORS); > > /* Since we want to emit the thunk, we explicitly mark its name as > @@ -2373,9 +2366,7 @@ symbol_table::compile (void) > if (seen_error ()) > return; > > -#ifdef ENABLE_CHECKING > - symtab_node::verify_symtab_nodes (); > -#endif > + symtab_node::checking_verify_symtab_nodes (); > > timevar_push (TV_CGRAPHOPT); > if (pre_ipa_mem_report) > @@ -2424,9 +2415,7 @@ symbol_table::compile (void) > (*debug_hooks->assembly_start) (); > if (!quiet_flag) > fprintf (stderr, "Assembling functions:\n"); > -#ifdef ENABLE_CHECKING > - symtab_node::verify_symtab_nodes (); > -#endif > + symtab_node::checking_verify_symtab_nodes (); > > materialize_all_clones (); > bitmap_obstack_initialize (NULL); > @@ -2482,7 +2471,8 @@ symbol_table::compile (void) > fprintf (dump_file, "\nFinal "); > symtab_node::dump_table (dump_file); > } > -#ifdef ENABLE_CHECKING > + if (!flag_checking) > + return; > symtab_node::verify_symtab_nodes (); > /* Double check that all inline clones are gone and that all > function bodies have been released from memory. */ > @@ -2501,7 +2491,6 @@ symbol_table::compile (void) > if (error_found) > internal_error ("nodes with unreleased memory found"); > } > -#endif > } > > > diff --git a/gcc/ddg.c b/gcc/ddg.c > index ada4657..b03ab93 100644 > --- a/gcc/ddg.c > +++ b/gcc/ddg.c > @@ -300,19 +300,16 @@ add_cross_iteration_register_deps (ddg_ptr g, df_ref > last_def) > rtx_insn *def_insn = DF_REF_INSN (last_def); > ddg_node_ptr last_def_node = get_node_of_insn (g, def_insn); > ddg_node_ptr use_node; > -#ifdef ENABLE_CHECKING > - struct df_rd_bb_info *bb_info = DF_RD_BB_INFO (g->bb); > -#endif > df_ref first_def = df_bb_regno_first_def_find (g->bb, regno); > > gcc_assert (last_def_node); > gcc_assert (first_def); > > -#ifdef ENABLE_CHECKING > - if (DF_REF_ID (last_def) != DF_REF_ID (first_def)) > - gcc_assert (!bitmap_bit_p (&bb_info->gen, > - DF_REF_ID (first_def))); > -#endif > + if (flag_checking && DF_REF_ID (last_def) != DF_REF_ID (first_def)) > + { > + struct df_rd_bb_info *bb_info = DF_RD_BB_INFO (g->bb); > + gcc_assert (!bitmap_bit_p (&bb_info->gen, DF_REF_ID (first_def))); > + } > > /* Create inter-loop true dependences and anti dependences. */ > for (r_use = DF_REF_CHAIN (last_def); r_use != NULL; r_use = r_use->next) > @@ -1013,7 +1010,6 @@ order_sccs (ddg_all_sccs_ptr g) > (int (*) (const void *, const void *)) compare_sccs); > } > > -#ifdef ENABLE_CHECKING > /* Check that every node in SCCS belongs to exactly one strongly connected > component and that no element of SCCS is empty. */ > static void > @@ -1033,7 +1029,6 @@ check_sccs (ddg_all_sccs_ptr sccs, int num_nodes) > } > sbitmap_free (tmp); > } > -#endif > > /* Perform the Strongly Connected Components decomposing algorithm on the > DDG and return DDG_ALL_SCCS structure that contains them. */ > @@ -1079,9 +1074,10 @@ create_ddg_all_sccs (ddg_ptr g) > sbitmap_free (from); > sbitmap_free (to); > sbitmap_free (scc_nodes); > -#ifdef ENABLE_CHECKING > - check_sccs (sccs, num_nodes); > -#endif > + > + if (flag_checking) > + check_sccs (sccs, num_nodes); > + > return sccs; > } > > diff --git a/gcc/df-core.c b/gcc/df-core.c > index 8d2d7a1..72a5eb5 100644 > --- a/gcc/df-core.c > +++ b/gcc/df-core.c > @@ -682,10 +682,8 @@ df_finish_pass (bool verify ATTRIBUTE_UNUSED) > #endif > #endif > > -#ifdef ENABLE_CHECKING > - if (verify) > + if (flag_checking && verify) > df->changeable_flags |= DF_VERIFY_SCHEDULED; > -#endif > } > > > @@ -1273,12 +1271,14 @@ df_analyze (void) > for (i = 0; i < df->n_blocks; i++) > bitmap_set_bit (current_all_blocks, df->postorder[i]); > > -#ifdef ENABLE_CHECKING > - /* Verify that POSTORDER_INVERTED only contains blocks reachable from > - the ENTRY block. */ > - for (i = 0; i < df->n_blocks_inverted; i++) > - gcc_assert (bitmap_bit_p (current_all_blocks, > df->postorder_inverted[i])); > -#endif > + if (flag_checking) > + { > + /* Verify that POSTORDER_INVERTED only contains blocks reachable from > + the ENTRY block. */ > + for (i = 0; i < df->n_blocks_inverted; i++) > + gcc_assert (bitmap_bit_p (current_all_blocks, > + df->postorder_inverted[i])); > + } > > /* Make sure that we have pruned any unreachable blocks from these > sets. */ > diff --git a/gcc/diagnostic-core.h b/gcc/diagnostic-core.h > index 66d2e42..6cc1e6b 100644 > --- a/gcc/diagnostic-core.h > +++ b/gcc/diagnostic-core.h > @@ -48,7 +48,7 @@ extern const char *trim_filename (const char *); > /* None of these functions are suitable for ATTRIBUTE_PRINTF, because > each language front end can extend them with its own set of format > specifiers. We must use custom format checks. */ > -#if (ENABLE_CHECKING && GCC_VERSION >= 4001) || GCC_VERSION == > BUILDING_GCC_VERSION > +#if (CHECKING_P && GCC_VERSION >= 4001) || GCC_VERSION == > BUILDING_GCC_VERSION > #define ATTRIBUTE_GCC_DIAG(m, n) __attribute__ ((__format__ (GCC_DIAG_STYLE, > m, n))) ATTRIBUTE_NONNULL(m) > #else > #define ATTRIBUTE_GCC_DIAG(m, n) ATTRIBUTE_NONNULL(m) > diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c > index 831859a..11c369d 100644 > --- a/gcc/diagnostic.c > +++ b/gcc/diagnostic.c > @@ -736,12 +736,12 @@ diagnostic_report_diagnostic (diagnostic_context > *context, > > if (diagnostic->kind == DK_ICE || diagnostic->kind == DK_ICE_NOBT) > { > -#ifndef ENABLE_CHECKING > /* When not checking, ICEs are converted to fatal errors when an > error has already occurred. This is counteracted by > abort_on_error. */ > - if ((diagnostic_kind_count (context, DK_ERROR) > 0 > - || diagnostic_kind_count (context, DK_SORRY) > 0) > + if (!CHECKING_P > + && (diagnostic_kind_count (context, DK_ERROR) > 0 > + || diagnostic_kind_count (context, DK_SORRY) > 0) > && !context->abort_on_error) > { > expanded_location s > @@ -750,7 +750,6 @@ diagnostic_report_diagnostic (diagnostic_context *context, > s.file, s.line); > exit (ICE_EXIT_CODE); > } > -#endif > if (context->internal_error) > (*context->internal_error) (context, > diagnostic->message.format_spec, > diff --git a/gcc/dominance.c b/gcc/dominance.c > index 09645be..a72b0c1 100644 > --- a/gcc/dominance.c > +++ b/gcc/dominance.c > @@ -634,9 +634,7 @@ calculate_dominance_info (cdi_direction dir) > > if (dom_computed[dir_index] == DOM_OK) > { > -#if ENABLE_CHECKING > - verify_dominators (dir); > -#endif > + checking_verify_dominators (dir); > return; > } > > @@ -665,11 +663,7 @@ calculate_dominance_info (cdi_direction dir) > dom_computed[dir_index] = DOM_NO_FAST_QUERY; > } > else > - { > -#if ENABLE_CHECKING > - verify_dominators (dir); > -#endif > - } > + checking_verify_dominators (dir); > > compute_dom_fast_query (dir); > > diff --git a/gcc/dominance.h b/gcc/dominance.h > index 37e138b..7254f2f 100644 > --- a/gcc/dominance.h > +++ b/gcc/dominance.h > @@ -60,6 +60,17 @@ extern bool dominated_by_p (enum cdi_direction, > const_basic_block, > unsigned bb_dom_dfs_in (enum cdi_direction, basic_block); > unsigned bb_dom_dfs_out (enum cdi_direction, basic_block); > extern void verify_dominators (enum cdi_direction); > + > +/* Verify invariants of computed dominance information, if internal > consistency > + checks are enabled. */ > + > +static inline void > +checking_verify_dominators (cdi_direction dir) > +{ > + if (flag_checking) > + verify_dominators (dir); > +} > + > basic_block recompute_dominator (enum cdi_direction, basic_block); > extern void iterate_fix_dominators (enum cdi_direction, > vec<basic_block> , bool); > diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c > index c1b7c7b..6e0db41 100644 > --- a/gcc/dwarf2out.c > +++ b/gcc/dwarf2out.c > @@ -4149,15 +4149,12 @@ static inline void > add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref > targ_die) > { > dw_attr_node attr; > + gcc_checking_assert (targ_die != NULL); > > -#ifdef ENABLE_CHECKING > - gcc_assert (targ_die != NULL); > -#else > /* With LTO we can end up trying to reference something we didn't create > a DIE for. Avoid crashing later on a NULL referenced DIE. */ > if (targ_die == NULL) > return; > -#endif > > attr.dw_attr = attr_kind; > attr.dw_attr_val.val_class = dw_val_class_die_ref; > @@ -5723,7 +5720,6 @@ debug_dwarf (void) > print_die (comp_unit_die (), stderr); > } > > -#ifdef ENABLE_CHECKING > /* Sanity checks on DIEs. */ > > static void > @@ -5786,7 +5782,6 @@ check_die (dw_die_ref die) > && a->dw_attr != DW_AT_GNU_all_call_sites); > } > } > -#endif > > /* Start a new compilation unit DIE for an include file. OLD_UNIT is the CU > for the enclosing include file, if any. BINCL_DIE is the DW_TAG_GNU_BINCL > @@ -11763,14 +11758,14 @@ const_ok_for_output_1 (rtx rtl) > { > /* If delegitimize_address couldn't do anything with the UNSPEC, assume > we can't express it in the debug info. */ > -#ifdef ENABLE_CHECKING > /* Don't complain about TLS UNSPECs, those are just too hard to > delegitimize. Note this could be a non-decl SYMBOL_REF such as > one in a constant pool entry, so testing SYMBOL_REF_TLS_MODEL > rather than DECL_THREAD_LOCAL_P is not just an optimization. */ > - if (XVECLEN (rtl, 0) == 0 > - || GET_CODE (XVECEXP (rtl, 0, 0)) != SYMBOL_REF > - || SYMBOL_REF_TLS_MODEL (XVECEXP (rtl, 0, 0)) == TLS_MODEL_NONE) > + if (flag_checking > + && (XVECLEN (rtl, 0) == 0 > + || GET_CODE (XVECEXP (rtl, 0, 0)) != SYMBOL_REF > + || SYMBOL_REF_TLS_MODEL (XVECEXP (rtl, 0, 0)) == TLS_MODEL_NONE)) > inform (current_function_decl > ? DECL_SOURCE_LOCATION (current_function_decl) > : UNKNOWN_LOCATION, > @@ -11783,7 +11778,6 @@ const_ok_for_output_1 (rtx rtl) > "non-delegitimized UNSPEC %d found in variable location", > XINT (rtl, 1)); > #endif > -#endif > expansion_failed (NULL_TREE, rtl, > "UNSPEC hasn't been delegitimized.\n"); > return false; > @@ -13570,12 +13564,12 @@ mem_loc_descriptor (rtx rtl, machine_mode mode, > goto symref; > > default: > -#ifdef ENABLE_CHECKING > - print_rtl (stderr, rtl); > - gcc_unreachable (); > -#else > + if (flag_checking) > + { > + print_rtl (stderr, rtl); > + gcc_unreachable (); > + } > break; > -#endif > } > > if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED) > @@ -15098,15 +15092,14 @@ loc_list_from_tree (tree loc, int want_address, > return 0; > } > > -#ifdef ENABLE_CHECKING > /* Otherwise this is a generic code; we should just lists all of > these explicitly. We forgot one. */ > - gcc_unreachable (); > -#else > + if (flag_checking) > + gcc_unreachable (); > + > /* In a release build, we want to degrade gracefully: better to > generate incomplete debugging information than to crash. */ > return NULL; > -#endif > } > > if (!ret && !list_ret) > @@ -19908,18 +19901,17 @@ gen_lexical_block_die (tree stmt, dw_die_ref > context_die) > { > if (old_die) > { > -#ifdef ENABLE_CHECKING > /* This must have been generated early and it won't even > need location information since it's a DW_AT_inline > function. */ > - for (dw_die_ref c = context_die; c; c = c->die_parent) > - if (c->die_tag == DW_TAG_inlined_subroutine > - || c->die_tag == DW_TAG_subprogram) > - { > - gcc_assert (get_AT (c, DW_AT_inline)); > - break; > - } > -#endif > + if (flag_checking) > + for (dw_die_ref c = context_die; c; c = c->die_parent) > + if (c->die_tag == DW_TAG_inlined_subroutine > + || c->die_tag == DW_TAG_subprogram) > + { > + gcc_assert (get_AT (c, DW_AT_inline)); > + break; > + } > return; > } > } > @@ -20736,10 +20728,8 @@ gen_type_die_with_usage (tree type, dw_die_ref > context_die, > if (type == NULL_TREE || type == error_mark_node) > return; > > -#ifdef ENABLE_CHECKING > - if (type) > + if (flag_checking && type) > verify_type (type); > -#endif > > if (TYPE_NAME (type) != NULL_TREE > && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL > @@ -20933,11 +20923,12 @@ gen_type_die (tree type, dw_die_ref context_die) > if (type != error_mark_node) > { > gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE); > -#ifdef ENABLE_CHECKING > - dw_die_ref die = lookup_type_die (type); > - if (die) > - check_die (die); > -#endif > + if (flag_checking) > + { > + dw_die_ref die = lookup_type_die (type); > + if (die) > + check_die (die); > + } > } > } > > @@ -21975,11 +21966,12 @@ dwarf2out_decl (tree decl) > > gen_decl_die (decl, NULL, context_die); > > -#ifdef ENABLE_CHECKING > - dw_die_ref die = lookup_decl_die (decl); > - if (die) > - check_die (die); > -#endif > + if (flag_checking) > + { > + dw_die_ref die = lookup_decl_die (decl); > + if (die) > + check_die (die); > + } > } > > /* Write the debugging output for DECL. */ > diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c > index c418c24..8d2e81c 100644 > --- a/gcc/emit-rtl.c > +++ b/gcc/emit-rtl.c > @@ -2733,8 +2733,7 @@ verify_rtx_sharing (rtx orig, rtx insn) > > /* This rtx may not be shared. If it has already been seen, > replace it with a copy of itself. */ > -#ifdef ENABLE_CHECKING > - if (RTX_FLAG (x, used)) > + if (flag_checking && RTX_FLAG (x, used)) > { > error ("invalid rtl sharing found in the insn"); > debug_rtx (insn); > @@ -2742,7 +2741,6 @@ verify_rtx_sharing (rtx orig, rtx insn) > debug_rtx (x); > internal_error ("internal consistency failure"); > } > -#endif > gcc_assert (!RTX_FLAG (x, used)); > > RTX_FLAG (x, used) = 1; > @@ -4259,12 +4257,12 @@ delete_insns_since (rtx_insn *from) > void > reorder_insns_nobb (rtx_insn *from, rtx_insn *to, rtx_insn *after) > { > -#ifdef ENABLE_CHECKING > - rtx_insn *x; > - for (x = from; x != to; x = NEXT_INSN (x)) > - gcc_assert (after != x); > - gcc_assert (after != to); > -#endif > + if (flag_checking) > + { > + for (rtx_insn *x = from; x != to; x = NEXT_INSN (x)) > + gcc_assert (after != x); > + gcc_assert (after != to); > + } > > /* Splice this bunch out of where it is now. */ > if (PREV_INSN (from)) > diff --git a/gcc/et-forest.c b/gcc/et-forest.c > index 4f919d4..bf2f765 100644 > --- a/gcc/et-forest.c > +++ b/gcc/et-forest.c > @@ -28,7 +28,7 @@ License along with libiberty; see the file COPYING3. If > not see > #include "alloc-pool.h" > #include "et-forest.h" > > -/* We do not enable this with ENABLE_CHECKING, since it is awfully slow. */ > +/* We do not enable this with CHECKING_P, since it is awfully slow. */ > #undef DEBUG_ET > > #ifdef DEBUG_ET > diff --git a/gcc/except.c b/gcc/except.c > index 8f77653..5765d58 100644 > --- a/gcc/except.c > +++ b/gcc/except.c > @@ -612,9 +612,8 @@ duplicate_eh_regions (struct function *ifun, > struct duplicate_eh_regions_data data; > eh_region outer_region; > > -#ifdef ENABLE_CHECKING > - verify_eh_tree (ifun); > -#endif > + if (flag_checking) > + verify_eh_tree (ifun); > > data.label_map = map; > data.label_map_data = map_data; > @@ -632,9 +631,8 @@ duplicate_eh_regions (struct function *ifun, > duplicate_eh_regions_1 (&data, r, outer_region); > } > > -#ifdef ENABLE_CHECKING > - verify_eh_tree (cfun); > -#endif > + if (flag_checking) > + verify_eh_tree (cfun); > > return data.eh_map; > } > diff --git a/gcc/fwprop.c b/gcc/fwprop.c > index 16c7981..c9b29e6 100644 > --- a/gcc/fwprop.c > +++ b/gcc/fwprop.c > @@ -843,9 +843,7 @@ all_uses_available_at (rtx_insn *def_insn, rtx_insn > *target_insn) > > > static df_ref *active_defs; > -#ifdef ENABLE_CHECKING > static sparseset active_defs_check; > -#endif > > /* Fill the ACTIVE_DEFS array with the use->def link for the registers > mentioned in USE_REC. Register the valid entries in ACTIVE_DEFS_CHECK > @@ -859,9 +857,8 @@ register_active_defs (df_ref use) > df_ref def = get_def_for_use (use); > int regno = DF_REF_REGNO (use); > > -#ifdef ENABLE_CHECKING > - sparseset_set_bit (active_defs_check, regno); > -#endif > + if (flag_checking) > + sparseset_set_bit (active_defs_check, regno); > active_defs[regno] = def; > } > } > @@ -876,9 +873,8 @@ register_active_defs (df_ref use) > static void > update_df_init (rtx_insn *def_insn, rtx_insn *insn) > { > -#ifdef ENABLE_CHECKING > - sparseset_clear (active_defs_check); > -#endif > + if (flag_checking) > + sparseset_clear (active_defs_check); > register_active_defs (DF_INSN_USES (def_insn)); > register_active_defs (DF_INSN_USES (insn)); > register_active_defs (DF_INSN_EQ_USES (insn)); > @@ -899,9 +895,7 @@ update_uses (df_ref use) > if (DF_REF_ID (use) >= (int) use_def_ref.length ()) > use_def_ref.safe_grow_cleared (DF_REF_ID (use) + 1); > > -#ifdef ENABLE_CHECKING > - gcc_assert (sparseset_bit_p (active_defs_check, regno)); > -#endif > + gcc_checking_assert (sparseset_bit_p (active_defs_check, regno)); > use_def_ref[DF_REF_ID (use)] = active_defs[regno]; > } > } > @@ -1407,9 +1401,8 @@ fwprop_init (void) > df_set_flags (DF_DEFER_INSN_RESCAN); > > active_defs = XNEWVEC (df_ref, max_reg_num ()); > -#ifdef ENABLE_CHECKING > - active_defs_check = sparseset_alloc (max_reg_num ()); > -#endif > + if (flag_checking) > + active_defs_check = sparseset_alloc (max_reg_num ()); > } > > static void > @@ -1419,9 +1412,8 @@ fwprop_done (void) > > use_def_ref.release (); > free (active_defs); > -#ifdef ENABLE_CHECKING > - sparseset_free (active_defs_check); > -#endif > + if (flag_checking) > + sparseset_free (active_defs_check); > > free_dominance_info (CDI_DOMINATORS); > cleanup_cfg (0); > diff --git a/gcc/ggc-page.c b/gcc/ggc-page.c > index 34e9e24..deb21bb 100644 > --- a/gcc/ggc-page.c > +++ b/gcc/ggc-page.c > @@ -2201,12 +2201,11 @@ ggc_collect (void) > void > ggc_grow (void) > { > -#ifndef ENABLE_CHECKING > - G.allocated_last_gc = MAX (G.allocated_last_gc, > - G.allocated); > -#else > - ggc_collect (); > -#endif > + if (!flag_checking) > + G.allocated_last_gc = MAX (G.allocated_last_gc, > + G.allocated); > + else > + ggc_collect (); > if (!quiet_flag) > fprintf (stderr, " {GC start %luk} ", (unsigned long) G.allocated / > 1024); > } > diff --git a/gcc/gimplify.c b/gcc/gimplify.c > index a2d71d2..4390f7d 100644 > --- a/gcc/gimplify.c > +++ b/gcc/gimplify.c > @@ -10319,10 +10319,8 @@ gimplify_body (tree fndecl, bool do_parms) > pop_gimplify_context (outer_bind); > gcc_assert (gimplify_ctxp == NULL); > > -#ifdef ENABLE_CHECKING > - if (!seen_error ()) > + if (flag_checking && !seen_error ()) > verify_gimple_in_seq (gimple_bind_body (outer_bind)); > -#endif > > timevar_pop (TV_TREE_GIMPLIFY); > input_location = saved_location; > @@ -10614,11 +10612,9 @@ gimplify_hasher::equal (const elt_t *p1, const elt_t > *p2) > if (!operand_equal_p (t1, t2, 0)) > return false; > > -#ifdef ENABLE_CHECKING > /* Only allow them to compare equal if they also hash equal; otherwise > results are nondeterminate, and we fail bootstrap comparison. */ > - gcc_assert (hash (p1) == hash (p2)); > -#endif > + gcc_checking_assert (hash (p1) == hash (p2)); > > return true; > } > diff --git a/gcc/graphite-isl-ast-to-gimple.c > b/gcc/graphite-isl-ast-to-gimple.c > index de28477..fc4af5a 100644 > --- a/gcc/graphite-isl-ast-to-gimple.c > +++ b/gcc/graphite-isl-ast-to-gimple.c > @@ -106,10 +106,8 @@ gmp_cst_to_tree (tree type, mpz_t val) > static inline void > graphite_verify (void) > { > -#ifdef ENABLE_CHECKING > - verify_loop_structure (); > - verify_loop_closed_ssa (true); > -#endif > + checking_verify_loop_structure (); > + checking_verify_loop_closed_ssa (true); > } > > /* IVS_PARAMS maps ISL's scattering and parameter identifiers > diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c > index a95ec57..81158e5 100644 > --- a/gcc/graphite-scop-detection.c > +++ b/gcc/graphite-scop-detection.c > @@ -259,21 +259,16 @@ canonicalize_loop_closed_ssa (loop_p loop) > static void > canonicalize_loop_closed_ssa_form (void) > { > - loop_p loop; > - > -#ifdef ENABLE_CHECKING > - verify_loop_closed_ssa (true); > -#endif > + checking_verify_loop_closed_ssa (true); > > + loop_p loop; > FOR_EACH_LOOP (loop, 0) > canonicalize_loop_closed_ssa (loop); > > rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa); > update_ssa (TODO_update_ssa); > > -#ifdef ENABLE_CHECKING > - verify_loop_closed_ssa (true); > -#endif > + checking_verify_loop_closed_ssa (true); > } > > /* Can all ivs be represented by a signed integer? > diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c > index c06d9de..91abcca 100644 > --- a/gcc/graphite-sese-to-poly.c > +++ b/gcc/graphite-sese-to-poly.c > @@ -1522,9 +1522,7 @@ rewrite_reductions_out_of_ssa (scop_p scop) > } > > update_ssa (TODO_update_ssa); > -#ifdef ENABLE_CHECKING > - verify_loop_closed_ssa (true); > -#endif > + checking_verify_loop_closed_ssa (true); > } > > /* Rewrite the scalar dependence of DEF used in USE_STMT with a memory > @@ -1699,9 +1697,7 @@ rewrite_cross_bb_scalar_deps_out_of_ssa (scop_p scop) > { > scev_reset_htab (); > update_ssa (TODO_update_ssa); > -#ifdef ENABLE_CHECKING > - verify_loop_closed_ssa (true); > -#endif > + checking_verify_loop_closed_ssa (true); > } > } > > diff --git a/gcc/hash-table.h b/gcc/hash-table.h > index 8e3c2ca..192be30 100644 > --- a/gcc/hash-table.h > +++ b/gcc/hash-table.h > @@ -638,9 +638,7 @@ hash_table<Descriptor, > Allocator>::find_empty_slot_for_expand (hashval_t hash) > > if (is_empty (*slot)) > return slot; > -#ifdef ENABLE_CHECKING > gcc_checking_assert (!is_deleted (*slot)); > -#endif > > hash2 = hash_table_mod2 (hash, m_size_prime_index); > for (;;) > @@ -652,9 +650,7 @@ hash_table<Descriptor, > Allocator>::find_empty_slot_for_expand (hashval_t hash) > slot = m_entries + index; > if (is_empty (*slot)) > return slot; > -#ifdef ENABLE_CHECKING > gcc_checking_assert (!is_deleted (*slot)); > -#endif > } > } > > diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c > index d0ae494..ca53755 100644 > --- a/gcc/ifcvt.c > +++ b/gcc/ifcvt.c > @@ -5093,9 +5093,7 @@ if_convert (bool after_combine) > if (optimize == 1) > df_remove_problem (df_live); > > -#ifdef ENABLE_CHECKING > - verify_flow_info (); > -#endif > + checking_verify_flow_info (); > } > > /* If-conversion and CFG cleanup. */ > diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c > index ef93b20..d1c6236 100644 > --- a/gcc/ipa-cp.c > +++ b/gcc/ipa-cp.c > @@ -2920,9 +2920,8 @@ ipcp_propagate_stage (struct ipa_topo_info *topo) > overall_size, max_new_size); > > propagate_constants_topo (topo); > -#ifdef ENABLE_CHECKING > - ipcp_verify_propagated_values (); > -#endif > + if (flag_checking) > + ipcp_verify_propagated_values (); > topo->constants.propagate_effects (); > topo->contexts.propagate_effects (); > > diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c > index a7a8e8e..69dec05 100644 > --- a/gcc/ipa-devirt.c > +++ b/gcc/ipa-devirt.c > @@ -272,11 +272,10 @@ type_in_anonymous_namespace_p (const_tree t) > { > /* C++ FE uses magic <anon> as assembler names of anonymous types. > verify that this match with type_in_anonymous_namespace_p. */ > -#ifdef ENABLE_CHECKING > if (in_lto_p) > - gcc_assert (!strcmp ("<anon>", > - IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (TYPE_NAME (t))))); > -#endif > + gcc_checking_assert (!strcmp ("<anon>", > + IDENTIFIER_POINTER > + (DECL_ASSEMBLER_NAME (TYPE_NAME (t))))); > return true; > } > return false; > @@ -300,15 +299,13 @@ odr_type_p (const_tree t) > if (TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL > && (DECL_ASSEMBLER_NAME_SET_P (TYPE_NAME (t)))) > { > -#ifdef ENABLE_CHECKING > /* C++ FE uses magic <anon> as assembler names of anonymous types. > verify that this match with type_in_anonymous_namespace_p. */ > - gcc_assert (!type_with_linkage_p (t) > - || strcmp ("<anon>", > - IDENTIFIER_POINTER > - (DECL_ASSEMBLER_NAME (TYPE_NAME (t)))) > - || type_in_anonymous_namespace_p (t)); > -#endif > + gcc_checking_assert (!type_with_linkage_p (t) > + || strcmp ("<anon>", > + IDENTIFIER_POINTER > + (DECL_ASSEMBLER_NAME (TYPE_NAME (t)))) > + || type_in_anonymous_namespace_p (t)); > return true; > } > return false; > @@ -1777,11 +1774,10 @@ odr_types_equivalent_p (tree t1, tree t2, bool warn, > bool *warned, > bool > odr_types_equivalent_p (tree type1, tree type2) > { > - hash_set<type_pair> visited; > + gcc_checking_assert (odr_or_derived_type_p (type1) > + && odr_or_derived_type_p (type2)); > > -#ifdef ENABLE_CHECKING > - gcc_assert (odr_or_derived_type_p (type1) && odr_or_derived_type_p > (type2)); > -#endif > + hash_set<type_pair> visited; > return odr_types_equivalent_p (type1, type2, false, NULL, > &visited, UNKNOWN_LOCATION, UNKNOWN_LOCATION); > } > @@ -2000,8 +1996,8 @@ add_type_duplicate (odr_type val, tree type) > } > gcc_assert (val->odr_violated || !odr_must_violate); > /* Sanity check that all bases will be build same way again. */ > -#ifdef ENABLE_CHECKING > - if (COMPLETE_TYPE_P (type) && COMPLETE_TYPE_P (val->type) > + if (flag_checking > + && COMPLETE_TYPE_P (type) && COMPLETE_TYPE_P (val->type) > && TREE_CODE (val->type) == RECORD_TYPE > && TREE_CODE (type) == RECORD_TYPE > && TYPE_BINFO (val->type) && TYPE_BINFO (type) > @@ -2030,7 +2026,6 @@ add_type_duplicate (odr_type val, tree type) > j++; > } > } > -#endif > > > /* Regularize things a little. During LTO same types may come with > @@ -2136,8 +2131,8 @@ get_odr_type (tree type, bool insert) > if (slot && *slot) > { > val = *slot; > -#ifdef ENABLE_CHECKING > - if (in_lto_p && can_be_vtable_hashed_p (type)) > + if (flag_checking > + && in_lto_p && can_be_vtable_hashed_p (type)) > { > hash = hash_odr_vtable (type); > vtable_slot = odr_vtable_hash->find_slot_with_hash (type, hash, > @@ -2145,7 +2140,6 @@ get_odr_type (tree type, bool insert) > gcc_assert (!vtable_slot || *vtable_slot == *slot); > vtable_slot = NULL; > } > -#endif > } > else if (*vtable_slot) > val = *vtable_slot; > diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c > index b0ef9f1..175f70f 100644 > --- a/gcc/ipa-icf.c > +++ b/gcc/ipa-icf.c > @@ -2599,7 +2599,7 @@ sem_item_optimizer::execute (void) > dump_cong_classes (); > > process_cong_reduction (); > - verify_classes (); > + checking_verify_classes (); > > if (dump_file) > fprintf (dump_file, "Dump after callgraph-based congruence reduction\n"); > @@ -2618,7 +2618,7 @@ sem_item_optimizer::execute (void) > > process_cong_reduction (); > dump_cong_classes (); > - verify_classes (); > + checking_verify_classes (); > bool merged_p = merge_classes (prev_class_count); > > if (dump_file && (dump_flags & TDF_DETAILS)) > @@ -2883,7 +2883,7 @@ sem_item_optimizer::subdivide_classes_by_equality (bool > in_wpa) > } > } > > - verify_classes (); > + checking_verify_classes (); > } > > /* Subdivide classes by address references that members of the class > @@ -2977,12 +2977,20 @@ > sem_item_optimizer::subdivide_classes_by_sensitive_refs () > return newly_created_classes; > } > > -/* Verify congruence classes if checking is enabled. */ > +/* Verify congruence classes, if checking is enabled. */ > + > +void > +sem_item_optimizer::checking_verify_classes (void) > +{ > + if (flag_checking) > + verify_classes (); > +} > + > +/* Verify congruence classes. */ > > void > sem_item_optimizer::verify_classes (void) > { > -#if ENABLE_CHECKING > for (hash_table <congruence_class_group_hash>::iterator it = > m_classes.begin (); > it != m_classes.end (); ++it) > { > @@ -2990,26 +2998,25 @@ sem_item_optimizer::verify_classes (void) > { > congruence_class *cls = (*it)->classes[i]; > > - gcc_checking_assert (cls); > - gcc_checking_assert (cls->members.length () > 0); > + gcc_assert (cls); > + gcc_assert (cls->members.length () > 0); > > for (unsigned int j = 0; j < cls->members.length (); j++) > { > sem_item *item = cls->members[j]; > > - gcc_checking_assert (item); > - gcc_checking_assert (item->cls == cls); > + gcc_assert (item); > + gcc_assert (item->cls == cls); > > for (unsigned k = 0; k < item->usages.length (); k++) > { > sem_usage_pair *usage = item->usages[k]; > - gcc_checking_assert (usage->item->index_in_class < > - usage->item->cls->members.length ()); > + gcc_assert (usage->item->index_in_class < > + usage->item->cls->members.length ()); > } > } > } > } > -#endif > } > > /* Disposes split map traverse function. CLS_PTR is pointer to congruence > @@ -3054,10 +3061,11 @@ sem_item_optimizer::traverse_congruence_split > (congruence_class * const &cls, > add_item_to_class (tc, cls->members[i]); > } > > -#ifdef ENABLE_CHECKING > - for (unsigned int i = 0; i < 2; i++) > - gcc_checking_assert (newclasses[i]->members.length ()); > -#endif > + if (flag_checking) > + { > + for (unsigned int i = 0; i < 2; i++) > + gcc_assert (newclasses[i]->members.length ()); > + } > > if (splitter_cls == cls) > optimizer->splitter_class_removed = true; > @@ -3152,11 +3160,9 @@ sem_item_optimizer::do_congruence_step_for_index > (congruence_class *cls, > else > b = *slot; > > -#if ENABLE_CHECKING > gcc_checking_assert (usage->item->cls); > gcc_checking_assert (usage->item->index_in_class < > usage->item->cls->members.length ()); > -#endif > > bitmap_set_bit (b, usage->item->index_in_class); > } > diff --git a/gcc/ipa-icf.h b/gcc/ipa-icf.h > index ba37426..365e86f 100644 > --- a/gcc/ipa-icf.h > +++ b/gcc/ipa-icf.h > @@ -479,6 +479,9 @@ public: > void dump (void); > > /* Verify congruence classes if checking is enabled. */ > + void checking_verify_classes (void); > + > + /* Verify congruence classes. */ > void verify_classes (void); > > /* Write IPA ICF summary for symbols. */ > diff --git a/gcc/ipa-inline-analysis.c b/gcc/ipa-inline-analysis.c > index 35322cc..e93d445 100644 > --- a/gcc/ipa-inline-analysis.c > +++ b/gcc/ipa-inline-analysis.c > @@ -2964,10 +2964,12 @@ compute_inline_parameters (struct cgraph_node *node, > bool early) > info->size = info->self_size; > info->stack_frame_offset = 0; > info->estimated_stack_size = info->estimated_self_stack_size; > -#ifdef ENABLE_CHECKING > - inline_update_overall_summary (node); > - gcc_assert (info->time == info->self_time && info->size == > info->self_size); > -#endif > + if (flag_checking) > + { > + inline_update_overall_summary (node); > + gcc_assert (info->time == info->self_time > + && info->size == info->self_size); > + } > > pop_cfun (); > } > diff --git a/gcc/ipa-inline-transform.c b/gcc/ipa-inline-transform.c > index 12f701a..1d7bcaa 100644 > --- a/gcc/ipa-inline-transform.c > +++ b/gcc/ipa-inline-transform.c > @@ -491,10 +491,9 @@ save_inline_function_body (struct cgraph_node *node) > first_clone->remove_symbol_and_inline_clones (); > first_clone = NULL; > } > -#ifdef ENABLE_CHECKING > - else > + else if (flag_checking) > first_clone->verify (); > -#endif > + > return first_clone; > } > > diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c > index 8f3919c..db98755 100644 > --- a/gcc/ipa-inline.c > +++ b/gcc/ipa-inline.c > @@ -1878,7 +1878,7 @@ inline_small_functions (void) > if (!edge->inline_failed || !edge->callee->analyzed) > continue; > > -#ifdef ENABLE_CHECKING > +#if CHECKING_P > /* Be sure that caches are maintained consistent. */ > sreal cached_badness = edge_badness (edge, false); > > @@ -2632,9 +2632,8 @@ early_inliner (function *fun) > if (ipa_node_params_sum) > return 0; > > -#ifdef ENABLE_CHECKING > - node->verify (); > -#endif > + if (flag_checking) > + node->verify (); > node->remove_all_references (); > > /* Rebuild this reference because it dosn't depend on > diff --git a/gcc/ipa-inline.h b/gcc/ipa-inline.h > index 85041f6..323d117 100644 > --- a/gcc/ipa-inline.h > +++ b/gcc/ipa-inline.h > @@ -299,10 +299,8 @@ estimate_edge_size (struct cgraph_edge *edge) > static inline int > estimate_edge_growth (struct cgraph_edge *edge) > { > -#ifdef ENABLE_CHECKING > gcc_checking_assert (inline_edge_summary (edge)->call_stmt_size > || !edge->callee->analyzed); > -#endif > return (estimate_edge_size (edge) > - inline_edge_summary (edge)->call_stmt_size); > } > diff --git a/gcc/ipa-visibility.c b/gcc/ipa-visibility.c > index 93073d8..0ae4388 100644 > --- a/gcc/ipa-visibility.c > +++ b/gcc/ipa-visibility.c > @@ -464,16 +464,15 @@ function_and_variable_visibility (bool whole_program) > what comdat group they are in when they won't be emitted in this TU. > */ > if (node->same_comdat_group && DECL_EXTERNAL (node->decl)) > { > -#ifdef ENABLE_CHECKING > - symtab_node *n; > - > - for (n = node->same_comdat_group; > - n != node; > - n = n->same_comdat_group) > - /* If at least one of same comdat group functions is external, > - all of them have to be, otherwise it is a front-end bug. */ > - gcc_assert (DECL_EXTERNAL (n->decl)); > -#endif > + if (flag_checking) > + { > + for (symtab_node *n = node->same_comdat_group; > + n != node; > + n = n->same_comdat_group) > + /* If at least one of same comdat group functions is external, > + all of them have to be, otherwise it is a front-end bug. */ > + gcc_assert (DECL_EXTERNAL (n->decl)); > + } > node->dissolve_same_comdat_group_list (); > } > gcc_assert ((!DECL_WEAK (node->decl) > diff --git a/gcc/ipa.c b/gcc/ipa.c > index 6847305..6dc23ae 100644 > --- a/gcc/ipa.c > +++ b/gcc/ipa.c > @@ -319,12 +319,13 @@ symbol_table::remove_unreachable_nodes (FILE *file) > build_type_inheritance_graph (); > if (file) > fprintf (file, "\nReclaiming functions:"); > -#ifdef ENABLE_CHECKING > - FOR_EACH_FUNCTION (node) > - gcc_assert (!node->aux); > - FOR_EACH_VARIABLE (vnode) > - gcc_assert (!vnode->aux); > -#endif > + if (flag_checking) > + { > + FOR_EACH_FUNCTION (node) > + gcc_assert (!node->aux); > + FOR_EACH_VARIABLE (vnode) > + gcc_assert (!vnode->aux); > + } > /* Mark functions whose bodies are obviously needed. > This is mostly when they can be referenced externally. Inline clones > are special since their declarations are shared with master clone and > thus > @@ -678,9 +679,7 @@ symbol_table::remove_unreachable_nodes (FILE *file) > if (file) > fprintf (file, "\n"); > > -#ifdef ENABLE_CHECKING > - symtab_node::verify_symtab_nodes (); > -#endif > + symtab_node::checking_verify_symtab_nodes (); > > /* If we removed something, perhaps profile could be improved. */ > if (changed && optimize && inline_edge_summary_vec.exists ()) > @@ -1370,13 +1369,12 @@ ipa_single_use (void) > { > if (var->aux != BOTTOM) > { > -#ifdef ENABLE_CHECKING > /* Not having the single user known means that the VAR is > unreachable. Either someone forgot to remove unreachable > variables or the reachability here is wrong. */ > > - gcc_assert (single_user_map.get (var)); > -#endif > + gcc_checking_assert (single_user_map.get (var)); > + > if (dump_file) > { > fprintf (dump_file, "Variable %s/%i is used by single function\n", > diff --git a/gcc/ira-int.h b/gcc/ira-int.h > index af6c92f..d4160d3 100644 > --- a/gcc/ira-int.h > +++ b/gcc/ira-int.h > @@ -26,7 +26,7 @@ along with GCC; see the file COPYING3. If not see > /* To provide consistency in naming, all IRA external variables, > functions, common typedefs start with prefix ira_. */ > > -#ifdef ENABLE_CHECKING > +#if CHECKING_P > #define ENABLE_IRA_CHECKING > #endif > > diff --git a/gcc/ira.c b/gcc/ira.c > index 4e94632..8e71d50 100644 > --- a/gcc/ira.c > +++ b/gcc/ira.c > @@ -5153,9 +5153,9 @@ ira (FILE *f) > df_remove_problem (df_live); > gcc_checking_assert (df_live == NULL); > > -#ifdef ENABLE_CHECKING > - df->changeable_flags |= DF_VERIFY_SCHEDULED; > -#endif > + if (flag_checking) > + df->changeable_flags |= DF_VERIFY_SCHEDULED; > + > df_analyze (); > > init_reg_equiv (); > diff --git a/gcc/loop-doloop.c b/gcc/loop-doloop.c > index 6554597..592ae1f 100644 > --- a/gcc/loop-doloop.c > +++ b/gcc/loop-doloop.c > @@ -734,7 +734,5 @@ doloop_optimize_loops (void) > > iv_analysis_done (); > > -#ifdef ENABLE_CHECKING > - verify_loop_structure (); > -#endif > + checking_verify_loop_structure (); > } > diff --git a/gcc/loop-init.c b/gcc/loop-init.c > index 2a38a0f..cd96e70 100644 > --- a/gcc/loop-init.c > +++ b/gcc/loop-init.c > @@ -104,10 +104,8 @@ loop_optimizer_init (unsigned flags) > /* Ensure that the dominators are computed, like flow_loops_find does. > */ > calculate_dominance_info (CDI_DOMINATORS); > > -#ifdef ENABLE_CHECKING > if (!needs_fixup) > - verify_loop_structure (); > -#endif > + checking_verify_loop_structure (); > > /* Clear all flags. */ > if (recorded_exits) > @@ -129,9 +127,7 @@ loop_optimizer_init (unsigned flags) > /* Dump loops. */ > flow_loops_dump (dump_file, NULL, 1); > > -#ifdef ENABLE_CHECKING > - verify_loop_structure (); > -#endif > + checking_verify_loop_structure (); > > timevar_pop (TV_LOOP_INIT); > } > @@ -323,9 +319,7 @@ fix_loop_structure (bitmap changed_bbs) > /* Apply flags to loops. */ > apply_loop_flags (current_loops->state | record_exits); > > -#ifdef ENABLE_CHECKING > - verify_loop_structure (); > -#endif > + checking_verify_loop_structure (); > > timevar_pop (TV_LOOP_INIT); > > diff --git a/gcc/loop-invariant.c b/gcc/loop-invariant.c > index 7ac38c6..696f0ee 100644 > --- a/gcc/loop-invariant.c > +++ b/gcc/loop-invariant.c > @@ -2137,7 +2137,5 @@ move_loop_invariants (void) > invariant_table = NULL; > invariant_table_size = 0; > > -#ifdef ENABLE_CHECKING > - verify_flow_info (); > -#endif > + checking_verify_flow_info (); > } > diff --git a/gcc/lra-assigns.c b/gcc/lra-assigns.c > index 2986f57..a17e22c 100644 > --- a/gcc/lra-assigns.c > +++ b/gcc/lra-assigns.c > @@ -1591,15 +1591,13 @@ lra_assign (void) > bitmap_initialize (&all_spilled_pseudos, ®_obstack); > create_live_range_start_chains (); > setup_live_pseudos_and_spill_after_risky_transforms (&all_spilled_pseudos); > -#ifdef ENABLE_CHECKING > - if (!flag_ipa_ra) > + if (flag_checking && !flag_ipa_ra) > for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++) > if (lra_reg_info[i].nrefs != 0 && reg_renumber[i] >= 0 > && lra_reg_info[i].call_p > && overlaps_hard_reg_set_p (call_used_reg_set, > PSEUDO_REGNO_MODE (i), reg_renumber[i])) > gcc_unreachable (); > -#endif > /* Setup insns to process on the next constraint pass. */ > bitmap_initialize (&changed_pseudo_bitmap, ®_obstack); > init_live_reload_and_inheritance_pseudos (); > diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c > index afe885a..bc7a292 100644 > --- a/gcc/lra-constraints.c > +++ b/gcc/lra-constraints.c > @@ -4455,8 +4455,7 @@ lra_constraints (bool first_p) > bitmap_clear (&equiv_insn_bitmap); > /* If we used a new hard regno, changed_p should be true because the > hard reg is assigned to a new pseudo. */ > -#ifdef ENABLE_CHECKING > - if (! changed_p) > + if (flag_checking && !changed_p) > { > for (i = FIRST_PSEUDO_REGISTER; i < new_regno_start; i++) > if (lra_reg_info[i].nrefs != 0 > @@ -4468,7 +4467,6 @@ lra_constraints (bool first_p) > lra_assert (df_regs_ever_live_p (hard_regno + j)); > } > } > -#endif > return changed_p; > } > > diff --git a/gcc/lra-eliminations.c b/gcc/lra-eliminations.c > index fdf4179..448e645 100644 > --- a/gcc/lra-eliminations.c > +++ b/gcc/lra-eliminations.c > @@ -1436,11 +1436,11 @@ lra_eliminate (bool final_p, bool first_p) > bitmap_initialize (&insns_with_changed_offsets, ®_obstack); > if (final_p) > { > -#ifdef ENABLE_CHECKING > - update_reg_eliminate (&insns_with_changed_offsets); > - if (! bitmap_empty_p (&insns_with_changed_offsets)) > - gcc_unreachable (); > -#endif > + if (flag_checking) > + { > + update_reg_eliminate (&insns_with_changed_offsets); > + gcc_assert (bitmap_empty_p (&insns_with_changed_offsets)); > + } > /* We change eliminable hard registers in insns so we should do > this for all insns containing any eliminable hard > register. */ > diff --git a/gcc/lra-int.h b/gcc/lra-int.h > index 5e78604..02b0ae4 100644 > --- a/gcc/lra-int.h > +++ b/gcc/lra-int.h > @@ -91,12 +91,10 @@ struct lra_reg > /* True if the pseudo should not be assigned to a stack register. */ > bool no_stack_p; > #endif > -#ifdef ENABLE_CHECKING > /* True if the pseudo crosses a call. It is setup in lra-lives.c > and used to check that the pseudo crossing a call did not get a > call used hard register. */ > bool call_p; > -#endif > /* Number of references and execution frequencies of the register in > *non-debug* insns. */ > int nrefs, freq; > diff --git a/gcc/lra-lives.c b/gcc/lra-lives.c > index 253bc18..a2c5542 100644 > --- a/gcc/lra-lives.c > +++ b/gcc/lra-lives.c > @@ -590,9 +590,7 @@ check_pseudos_live_through_calls (int regno) > for (hr = 0; hr < FIRST_PSEUDO_REGISTER; hr++) > if (HARD_REGNO_CALL_PART_CLOBBERED (hr, PSEUDO_REGNO_MODE (regno))) > SET_HARD_REG_BIT (lra_reg_info[regno].conflict_hard_regs, hr); > -#ifdef ENABLE_CHECKING > lra_reg_info[regno].call_p = true; > -#endif > if (! sparseset_bit_p (pseudos_live_through_setjumps, regno)) > return; > sparseset_clear_bit (pseudos_live_through_setjumps, regno); > @@ -1229,9 +1227,7 @@ lra_create_live_ranges_1 (bool all_p, bool dead_insn_p) > lra_reg_info[i].biggest_mode = GET_MODE (regno_reg_rtx[i]); > else > lra_reg_info[i].biggest_mode = VOIDmode; > -#ifdef ENABLE_CHECKING > lra_reg_info[i].call_p = false; > -#endif > if (i >= FIRST_PSEUDO_REGISTER > && lra_reg_info[i].nrefs != 0) > { > diff --git a/gcc/lra-remat.c b/gcc/lra-remat.c > index 66532b8..68ce502 100644 > --- a/gcc/lra-remat.c > +++ b/gcc/lra-remat.c > @@ -578,10 +578,8 @@ create_remat_bb_data (void) > last_basic_block_for_fn (cfun)); > FOR_ALL_BB_FN (bb, cfun) > { > -#ifdef ENABLE_CHECKING > - if (bb->index < 0 || bb->index >= last_basic_block_for_fn (cfun)) > - abort (); > -#endif > + gcc_checking_assert (bb->index >= 0 > + && bb->index < last_basic_block_for_fn (cfun)); > bb_info = get_remat_bb_data (bb); > bb_info->bb = bb; > bitmap_initialize (&bb_info->changed_regs, ®_obstack); > diff --git a/gcc/lra.c b/gcc/lra.c > index 55b856f..cc5a850 100644 > --- a/gcc/lra.c > +++ b/gcc/lra.c > @@ -1199,30 +1199,22 @@ lra_update_insn_recog_data (rtx_insn *insn) > decode_asm_operands (PATTERN (insn), NULL, > data->operand_loc, > constraints, operand_mode, NULL); > -#ifdef ENABLE_CHECKING > - { > - int i; > > - for (i = 0; i < nop; i++) > + if (flag_checking) > + for (int i = 0; i < nop; i++) > lra_assert > (insn_static_data->operand[i].mode == operand_mode[i] > && insn_static_data->operand[i].constraint == constraints[i] > && ! insn_static_data->operand[i].is_operator); > - } > -#endif > } > -#ifdef ENABLE_CHECKING > - { > - int i; > > - for (i = 0; i < insn_static_data->n_operands; i++) > + if (flag_checking) > + for (int i = 0; i < insn_static_data->n_operands; i++) > lra_assert > (insn_static_data->operand[i].type > == (insn_static_data->operand[i].constraint[0] == '=' ? OP_OUT > : insn_static_data->operand[i].constraint[0] == '+' ? OP_INOUT > : OP_IN)); > - } > -#endif > } > else > { > @@ -2004,8 +1996,6 @@ restore_scratches (void) > > > > -#ifdef ENABLE_CHECKING > - > /* Function checks RTL for correctness. If FINAL_P is true, it is > done at the end of LRA and the check is more rigorous. */ > static void > @@ -2024,9 +2014,7 @@ check_rtl (bool final_p) > { > if (final_p) > { > -#ifdef ENABLED_CHECKING > extract_constrain_insn (insn); > -#endif > continue; > } > /* LRA code is based on assumption that all addresses can be > @@ -2039,7 +2027,6 @@ check_rtl (bool final_p) > fatal_insn_not_found (insn); > } > } > -#endif /* #ifdef ENABLE_CHECKING */ > > /* Determine if the current function has an exception receiver block > that reaches the exit block via non-exceptional edges */ > @@ -2233,10 +2220,9 @@ lra (FILE *f) > > init_insn_recog_data (); > > -#ifdef ENABLE_CHECKING > /* Some quick check on RTL generated by previous passes. */ > - check_rtl (false); > -#endif > + if (flag_checking) > + check_rtl (false); > > lra_in_progress = 1; > > @@ -2437,9 +2423,8 @@ lra (FILE *f) > by this, so unshare everything here. */ > unshare_all_rtl_again (get_insns ()); > > -#ifdef ENABLE_CHECKING > - check_rtl (true); > -#endif > + if (flag_checking) > + check_rtl (true); > > timevar_pop (TV_LRA); > } > diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c > index 51f31c8..eb6f7b6 100644 > --- a/gcc/lto-cgraph.c > +++ b/gcc/lto-cgraph.c > @@ -1560,10 +1560,11 @@ input_cgraph_1 (struct lto_file_decl_data *file_data, > lto_input_toplevel_asms (file_data, order_base); > > /* AUX pointers should be all non-zero for function nodes read from the > stream. */ > -#ifdef ENABLE_CHECKING > - FOR_EACH_VEC_ELT (nodes, i, node) > - gcc_assert (node->aux || !is_a <cgraph_node *> (node)); > -#endif > + if (flag_checking) > + { > + FOR_EACH_VEC_ELT (nodes, i, node) > + gcc_assert (node->aux || !is_a <cgraph_node *> (node)); > + } > FOR_EACH_VEC_ELT (nodes, i, node) > { > int ref; > diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c > index 11daf7a..d54beca 100644 > --- a/gcc/lto-streamer-out.c > +++ b/gcc/lto-streamer-out.c > @@ -607,17 +607,12 @@ DFS::DFS (struct output_block *ob, tree expr, bool > ref_p, bool this_ref_p, > std::swap (sccstack[first + i], > sccstack[first + entry_start + i]); > > - if (scc_entry_len == 1) > - ; /* We already sorted SCC deterministically in hash_scc. */ > - else > - /* Check that we have only one SCC. > - Naturally we may have conflicts if hash function is not > - strong enough. Lets see how far this gets. */ > - { > -#ifdef ENABLE_CHECKING > - gcc_unreachable (); > -#endif > - } > + /* We already sorted SCC deterministically in hash_scc. */ > + > + /* Check that we have only one SCC. > + Naturally we may have conflicts if hash function is not > + strong enough. Lets see how far this gets. */ > + gcc_checking_assert (scc_entry_len == 1); > } > > /* Write LTO_tree_scc. */ > @@ -2277,12 +2272,13 @@ void > lto_output (void) > { > struct lto_out_decl_state *decl_state; > -#ifdef ENABLE_CHECKING > - bitmap output = lto_bitmap_alloc (); > -#endif > + bitmap output = NULL; > int i, n_nodes; > lto_symtab_encoder_t encoder = lto_get_out_decl_state > ()->symtab_node_encoder; > > + if (flag_checking) > + output = lto_bitmap_alloc (); > + > /* Initialize the streamer. */ > lto_streamer_init (); > > @@ -2296,10 +2292,11 @@ lto_output (void) > if (lto_symtab_encoder_encode_body_p (encoder, node) > && !node->alias) > { > -#ifdef ENABLE_CHECKING > - gcc_assert (!bitmap_bit_p (output, DECL_UID (node->decl))); > - bitmap_set_bit (output, DECL_UID (node->decl)); > -#endif > + if (flag_checking) > + { > + gcc_assert (!bitmap_bit_p (output, DECL_UID (node->decl))); > + bitmap_set_bit (output, DECL_UID (node->decl)); > + } > decl_state = lto_new_out_decl_state (); > lto_push_out_decl_state (decl_state); > if (gimple_has_body_p (node->decl) || !flag_wpa > @@ -2326,10 +2323,11 @@ lto_output (void) > && !node->alias) > { > timevar_push (TV_IPA_LTO_CTORS_OUT); > -#ifdef ENABLE_CHECKING > - gcc_assert (!bitmap_bit_p (output, DECL_UID (node->decl))); > - bitmap_set_bit (output, DECL_UID (node->decl)); > -#endif > + if (flag_checking) > + { > + gcc_assert (!bitmap_bit_p (output, DECL_UID (node->decl))); > + bitmap_set_bit (output, DECL_UID (node->decl)); > + } > decl_state = lto_new_out_decl_state (); > lto_push_out_decl_state (decl_state); > if (DECL_INITIAL (node->decl) != error_mark_node > @@ -2353,7 +2351,7 @@ lto_output (void) > > output_offload_tables (); > > -#ifdef ENABLE_CHECKING > +#if CHECKING_P > lto_bitmap_free (output); > #endif > } > diff --git a/gcc/lto-streamer.c b/gcc/lto-streamer.c > index b34ab8b..92b313a 100644 > --- a/gcc/lto-streamer.c > +++ b/gcc/lto-streamer.c > @@ -297,13 +297,12 @@ static hash_table<tree_hash_entry> *tree_htab; > void > lto_streamer_init (void) > { > -#ifdef ENABLE_CHECKING > /* Check that all the TS_* handled by the reader and writer routines > match exactly the structures defined in treestruct.def. When a > new TS_* astructure is added, the streamer should be updated to > handle it. */ > - streamer_check_handled_ts_structures (); > -#endif > + if (flag_checking) > + streamer_check_handled_ts_structures (); > > #ifdef LTO_STREAMER_DEBUG > tree_htab = new hash_table<tree_hash_entry> (31); > diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c > index 76f8e07..def681d 100644 > --- a/gcc/lto/lto.c > +++ b/gcc/lto/lto.c > @@ -1586,19 +1586,18 @@ unify_scc (struct data_in *data_in, unsigned from, > num_sccs_merged++; > total_scc_size_merged += len; > > -#ifdef ENABLE_CHECKING > - for (unsigned i = 0; i < len; ++i) > - { > - tree t = map[2*i+1]; > - enum tree_code code = TREE_CODE (t); > - /* IDENTIFIER_NODEs should be singletons and are merged by the > - streamer. The others should be singletons, too, and we > - should not merge them in any way. */ > - gcc_assert (code != TRANSLATION_UNIT_DECL > - && code != IDENTIFIER_NODE > - && !streamer_handle_as_builtin_p (t)); > - } > -#endif > + if (flag_checking) > + for (unsigned i = 0; i < len; ++i) > + { > + tree t = map[2*i+1]; > + enum tree_code code = TREE_CODE (t); > + /* IDENTIFIER_NODEs should be singletons and are merged by the > + streamer. The others should be singletons, too, and we > + should not merge them in any way. */ > + gcc_assert (code != TRANSLATION_UNIT_DECL > + && code != IDENTIFIER_NODE > + && !streamer_handle_as_builtin_p (t)); > + } > > /* Fixup the streamer cache with the prevailing nodes according > to the tree node mapping computed by compare_tree_sccs. */ > @@ -2636,10 +2635,8 @@ lto_fixup_state (struct lto_in_decl_state *state) > for (i = 0; i < vec_safe_length (trees); i++) > { > tree t = (*trees)[i]; > -#ifdef ENABLE_CHECKING > - if (TYPE_P (t)) > + if (flag_checking && TYPE_P (t)) > verify_type (t); > -#endif > if (VAR_OR_FUNCTION_DECL_P (t) > && (TREE_PUBLIC (t) || DECL_EXTERNAL (t))) > (*trees)[i] = lto_symtab_prevailing_decl (t); > @@ -3101,9 +3098,8 @@ do_whole_program_analysis (void) > fprintf (symtab->dump_file, "Optimized "); > symtab_node::dump_table (symtab->dump_file); > } > -#ifdef ENABLE_CHECKING > - symtab_node::verify_symtab_nodes (); > -#endif > + > + symtab_node::checking_verify_symtab_nodes (); > bitmap_obstack_release (NULL); > > /* We are about to launch the final LTRANS phase, stop the WPA timer. */ > diff --git a/gcc/omp-low.c b/gcc/omp-low.c > index ad7c017..e80fedf 100644 > --- a/gcc/omp-low.c > +++ b/gcc/omp-low.c > @@ -3083,14 +3083,14 @@ scan_omp_target (gomp_target *stmt, omp_context > *outer_ctx) > { > TYPE_FIELDS (ctx->record_type) > = nreverse (TYPE_FIELDS (ctx->record_type)); > -#ifdef ENABLE_CHECKING > - tree field; > - unsigned int align = DECL_ALIGN (TYPE_FIELDS (ctx->record_type)); > - for (field = TYPE_FIELDS (ctx->record_type); > - field; > - field = DECL_CHAIN (field)) > - gcc_assert (DECL_ALIGN (field) == align); > -#endif > + if (flag_checking) > + { > + unsigned int align = DECL_ALIGN (TYPE_FIELDS (ctx->record_type)); > + for (tree field = TYPE_FIELDS (ctx->record_type); > + field; > + field = DECL_CHAIN (field)) > + gcc_assert (DECL_ALIGN (field) == align); > + } > layout_type (ctx->record_type); > if (offloaded) > fixup_child_record_type (ctx); > @@ -6698,10 +6698,8 @@ expand_omp_taskreg (struct omp_region *region) > } > if (gimple_in_ssa_p (cfun)) > update_ssa (TODO_update_ssa); > -#ifdef ENABLE_CHECKING > - if (!loops_state_satisfies_p (LOOPS_NEED_FIXUP)) > + if (flag_checking && !loops_state_satisfies_p (LOOPS_NEED_FIXUP)) > verify_loop_structure (); > -#endif > pop_cfun (); > } > > @@ -11518,10 +11516,8 @@ expand_omp_target (struct omp_region *region) > if (changed) > cleanup_tree_cfg (); > } > -#ifdef ENABLE_CHECKING > - if (!loops_state_satisfies_p (LOOPS_NEED_FIXUP)) > + if (flag_checking && !loops_state_satisfies_p (LOOPS_NEED_FIXUP)) > verify_loop_structure (); > -#endif > pop_cfun (); > } > > @@ -12058,10 +12054,8 @@ execute_expand_omp (void) > > expand_omp (root_omp_region); > > -#ifdef ENABLE_CHECKING > - if (!loops_state_satisfies_p (LOOPS_NEED_FIXUP)) > + if (flag_checking && !loops_state_satisfies_p (LOOPS_NEED_FIXUP)) > verify_loop_structure (); > -#endif > cleanup_tree_cfg (); > > free_omp_regions (); > @@ -14145,7 +14139,7 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, > omp_context *ctx) > default: > break; > case OMP_CLAUSE_MAP: > -#ifdef ENABLE_CHECKING > +#if CHECKING_P > /* First check what we're prepared to handle in the following. */ > switch (OMP_CLAUSE_MAP_KIND (c)) > { > diff --git a/gcc/passes.c b/gcc/passes.c > index 0d147fd..43dd4e0 100644 > --- a/gcc/passes.c > +++ b/gcc/passes.c > @@ -1952,9 +1952,8 @@ execute_function_todo (function *fn, void *data) > > gcc_assert (dom_info_state (fn, CDI_POST_DOMINATORS) == DOM_NONE); > /* If we've seen errors do not bother running any verifiers. */ > - if (!seen_error ()) > + if (flag_checking && !seen_error ()) > { > -#if defined ENABLE_CHECKING > dom_state pre_verify_state = dom_info_state (fn, CDI_DOMINATORS); > dom_state pre_verify_pstate = dom_info_state (fn, CDI_POST_DOMINATORS); > > @@ -1988,7 +1987,6 @@ execute_function_todo (function *fn, void *data) > /* Make sure verifiers don't change dominator state. */ > gcc_assert (dom_info_state (fn, CDI_DOMINATORS) == pre_verify_state); > gcc_assert (dom_info_state (fn, CDI_POST_DOMINATORS) == > pre_verify_pstate); > -#endif > } > > fn->last_verified = flags & TODO_verify_all; > @@ -2008,11 +2006,10 @@ execute_function_todo (function *fn, void *data) > static void > execute_todo (unsigned int flags) > { > -#if defined ENABLE_CHECKING > - if (cfun > + if (flag_checking > + && cfun > && need_ssa_update_p (cfun)) > gcc_assert (flags & TODO_update_ssa_any); > -#endif > > timevar_push (TV_TODO); > > @@ -2076,14 +2073,12 @@ clear_last_verified (function *fn, void *data > ATTRIBUTE_UNUSED) > /* Helper function. Verify that the properties has been turn into the > properties expected by the pass. */ > > -#ifdef ENABLE_CHECKING > -static void > +static void DEBUG_FUNCTION > verify_curr_properties (function *fn, void *data) > { > unsigned int props = (size_t)data; > gcc_assert ((fn->curr_properties & props) == props); > } > -#endif > > /* Initialize pass dump file. */ > /* This is non-static so that the plugins can use it. */ > @@ -2331,10 +2326,9 @@ execute_one_pass (opt_pass *pass) > /* Run pre-pass verification. */ > execute_todo (pass->todo_flags_start); > > -#ifdef ENABLE_CHECKING > - do_per_function (verify_curr_properties, > - (void *)(size_t)pass->properties_required); > -#endif > + if (flag_checking) > + do_per_function (verify_curr_properties, > + (void *)(size_t)pass->properties_required); > > /* If a timevar is present, start it. */ > if (pass->tv_id != TV_NONE) > diff --git a/gcc/predict.c b/gcc/predict.c > index 0b3016c..4482d47 100644 > --- a/gcc/predict.c > +++ b/gcc/predict.c > @@ -2205,8 +2205,6 @@ tree_bb_level_predictions (void) > } > } > > -#ifdef ENABLE_CHECKING > - > /* Callback for hash_map::traverse, asserts that the pointer map is > empty. */ > > @@ -2217,7 +2215,6 @@ assert_is_empty (const_basic_block const &, > edge_prediction *const &value, > gcc_assert (!value); > return false; > } > -#endif > > /* Predict branch probabilities and estimate profile for basic block BB. */ > > @@ -2352,9 +2349,9 @@ tree_estimate_probability (void) > FOR_EACH_BB_FN (bb, cfun) > combine_predictions_for_bb (bb); > > -#ifdef ENABLE_CHECKING > - bb_predictions->traverse<void *, assert_is_empty> (NULL); > -#endif > + if (flag_checking) > + bb_predictions->traverse<void *, assert_is_empty> (NULL); > + > delete bb_predictions; > bb_predictions = NULL; > > @@ -2545,11 +2542,10 @@ propagate_freq (basic_block head, bitmap tovisit) > /* Compute frequency of basic block. */ > if (bb != head) > { > -#ifdef ENABLE_CHECKING > - FOR_EACH_EDGE (e, ei, bb->preds) > - gcc_assert (!bitmap_bit_p (tovisit, e->src->index) > - || (e->flags & EDGE_DFS_BACK)); > -#endif > + if (flag_checking) > + FOR_EACH_EDGE (e, ei, bb->preds) > + gcc_assert (!bitmap_bit_p (tovisit, e->src->index) > + || (e->flags & EDGE_DFS_BACK)); > > FOR_EACH_EDGE (e, ei, bb->preds) > if (EDGE_INFO (e)->back_edge) > diff --git a/gcc/pretty-print.c b/gcc/pretty-print.c > index 5889015..b24402d 100644 > --- a/gcc/pretty-print.c > +++ b/gcc/pretty-print.c > @@ -625,10 +625,9 @@ pp_format (pretty_printer *pp, text_info *text) > *formatters[argno] = XOBFINISH (&buffer->chunk_obstack, const char *); > } > > -#ifdef ENABLE_CHECKING > - for (; argno < PP_NL_ARGMAX; argno++) > - gcc_assert (!formatters[argno]); > -#endif > + if (CHECKING_P) > + for (; argno < PP_NL_ARGMAX; argno++) > + gcc_assert (!formatters[argno]); > > /* Revert to normal obstack and wrapping mode. */ > buffer->obstack = &buffer->formatted_obstack; > diff --git a/gcc/real.c b/gcc/real.c > index 85ac83d..a292126 100644 > --- a/gcc/real.c > +++ b/gcc/real.c > @@ -1808,15 +1808,13 @@ real_to_decimal_for_mode (char *str, const > REAL_VALUE_TYPE *r_orig, > /* Append the exponent. */ > sprintf (last, "e%+d", dec_exp); > > -#ifdef ENABLE_CHECKING > /* Verify that we can read the original value back in. */ > - if (mode != VOIDmode) > + if (flag_checking && mode != VOIDmode) > { > real_from_string (&r, str); > real_convert (&r, mode, &r); > gcc_assert (real_identical (&r, r_orig)); > } > -#endif > } > > /* Likewise, except always uses round-to-nearest. */ > diff --git a/gcc/recog.c b/gcc/recog.c > index c032424..2cd06f5 100644 > --- a/gcc/recog.c > +++ b/gcc/recog.c > @@ -2975,9 +2975,7 @@ split_all_insns (void) > if (changed) > find_many_sub_basic_blocks (blocks); > > -#ifdef ENABLE_CHECKING > - verify_flow_info (); > -#endif > + checking_verify_flow_info (); > > sbitmap_free (blocks); > } > diff --git a/gcc/regcprop.c b/gcc/regcprop.c > index 6f7d01e..bc8111c 100644 > --- a/gcc/regcprop.c > +++ b/gcc/regcprop.c > @@ -100,9 +100,7 @@ static bool replace_oldest_value_addr (rtx *, enum > reg_class, > static bool replace_oldest_value_mem (rtx, rtx_insn *, struct value_data *); > static bool copyprop_hardreg_forward_1 (basic_block, struct value_data *); > extern void debug_value_data (struct value_data *); > -#ifdef ENABLE_CHECKING > static void validate_value_data (struct value_data *); > -#endif > > /* Free all queued updates for DEBUG_INSNs that change some reg to > register REGNO. */ > @@ -150,9 +148,8 @@ kill_value_one_regno (unsigned int regno, struct > value_data *vd) > if (vd->e[regno].debug_insn_changes) > free_debug_insn_changes (vd, regno); > > -#ifdef ENABLE_CHECKING > - validate_value_data (vd); > -#endif > + if (flag_checking) > + validate_value_data (vd); > } > > /* Kill the value in register REGNO for NREGS, and any other registers > @@ -365,9 +362,8 @@ copy_value (rtx dest, rtx src, struct value_data *vd) > continue; > vd->e[i].next_regno = dr; > > -#ifdef ENABLE_CHECKING > - validate_value_data (vd); > -#endif > + if (flag_checking) > + validate_value_data (vd); > } > > /* Return true if a mode change from ORIG to NEW is allowed for REGNO. */ > @@ -1141,7 +1137,6 @@ copyprop_hardreg_forward_bb_without_debug_insn > (basic_block bb) > skip_debug_insn_p = false; > } > > -#ifdef ENABLE_CHECKING > static void > validate_value_data (struct value_data *vd) > { > @@ -1187,7 +1182,7 @@ validate_value_data (struct value_data *vd) > i, GET_MODE_NAME (vd->e[i].mode), vd->e[i].oldest_regno, > vd->e[i].next_regno); > } > -#endif > + > > namespace { > > diff --git a/gcc/reload.c b/gcc/reload.c > index cc61d77..32eec02 100644 > --- a/gcc/reload.c > +++ b/gcc/reload.c > @@ -85,7 +85,7 @@ a register with any other reload. */ > > #define REG_OK_STRICT > > -/* We do not enable this with ENABLE_CHECKING, since it is awfully slow. */ > +/* We do not enable this with CHECKING_P, since it is awfully slow. */ > #undef DEBUG_RELOAD > > #include "config.h" > diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c > index 9683055..c53a51f 100644 > --- a/gcc/sched-deps.c > +++ b/gcc/sched-deps.c > @@ -47,12 +47,6 @@ along with GCC; see the file COPYING3. If not see > > #ifdef INSN_SCHEDULING > > -#ifdef ENABLE_CHECKING > -#define CHECK (true) > -#else > -#define CHECK (false) > -#endif > - > /* Holds current parameters for the dependency analyzer. */ > struct sched_deps_info_def *sched_deps_info; > > @@ -505,9 +499,8 @@ static enum DEPS_ADJUST_RESULT maybe_add_or_update_dep_1 > (dep_t, bool, > rtx, rtx); > static enum DEPS_ADJUST_RESULT add_or_update_dep_1 (dep_t, bool, rtx, rtx); > > -#ifdef ENABLE_CHECKING > static void check_dep (dep_t, bool); > -#endif > + > > /* Return nonzero if a load of the memory reference MEM can cause a trap. */ > > @@ -1228,9 +1221,8 @@ add_or_update_dep_1 (dep_t new_dep, bool resolved_p, > gcc_assert (INSN_P (DEP_PRO (new_dep)) && INSN_P (DEP_CON (new_dep)) > && DEP_PRO (new_dep) != DEP_CON (new_dep)); > > -#ifdef ENABLE_CHECKING > - check_dep (new_dep, mem1 != NULL); > -#endif > + if (flag_checking) > + check_dep (new_dep, mem1 != NULL); > > if (true_dependency_cache != NULL) > { > @@ -1348,9 +1340,8 @@ sd_add_dep (dep_t dep, bool resolved_p) > > add_to_deps_list (DEP_NODE_BACK (n), con_back_deps); > > -#ifdef ENABLE_CHECKING > - check_dep (dep, false); > -#endif > + if (flag_checking) > + check_dep (dep, false); > > add_to_deps_list (DEP_NODE_FORW (n), pro_forw_deps); > > @@ -4515,7 +4506,6 @@ debug_ds (ds_t s) > fprintf (stderr, "\n"); > } > > -#ifdef ENABLE_CHECKING > /* Verify that dependence type and status are consistent. > If RELAXED_P is true, then skip dep_weakness checks. */ > static void > @@ -4600,7 +4590,6 @@ check_dep (dep_t dep, bool relaxed_p) > gcc_assert (ds & BEGIN_CONTROL); > } > } > -#endif /* ENABLE_CHECKING */ > > /* The following code discovers opportunities to switch a memory reference > and an increment by modifying the address. We ensure that this is done > diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c > index 8ea4dce..b109a5b 100644 > --- a/gcc/sel-sched-ir.c > +++ b/gcc/sel-sched-ir.c > @@ -954,7 +954,6 @@ return_regset_to_pool (regset rs) > regset_pool.v[regset_pool.n++] = rs; > } > > -#ifdef ENABLE_CHECKING > /* This is used as a qsort callback for sorting regset pool stacks. > X and XX are addresses of two regsets. They are never equal. */ > static int > @@ -968,44 +967,42 @@ cmp_v_in_regset_pool (const void *x, const void *xx) > return -1; > gcc_unreachable (); > } > -#endif > > -/* Free the regset pool possibly checking for memory leaks. */ > +/* Free the regset pool possibly checking for memory leaks. */ > void > free_regset_pool (void) > { > -#ifdef ENABLE_CHECKING > - { > - regset *v = regset_pool.v; > - int i = 0; > - int n = regset_pool.n; > + if (flag_checking) > + { > + regset *v = regset_pool.v; > + int i = 0; > + int n = regset_pool.n; > > - regset *vv = regset_pool.vv; > - int ii = 0; > - int nn = regset_pool.nn; > + regset *vv = regset_pool.vv; > + int ii = 0; > + int nn = regset_pool.nn; > > - int diff = 0; > + int diff = 0; > > - gcc_assert (n <= nn); > + gcc_assert (n <= nn); > > - /* Sort both vectors so it will be possible to compare them. */ > - qsort (v, n, sizeof (*v), cmp_v_in_regset_pool); > - qsort (vv, nn, sizeof (*vv), cmp_v_in_regset_pool); > + /* Sort both vectors so it will be possible to compare them. */ > + qsort (v, n, sizeof (*v), cmp_v_in_regset_pool); > + qsort (vv, nn, sizeof (*vv), cmp_v_in_regset_pool); > > - while (ii < nn) > - { > - if (v[i] == vv[ii]) > - i++; > - else > - /* VV[II] was lost. */ > - diff++; > + while (ii < nn) > + { > + if (v[i] == vv[ii]) > + i++; > + else > + /* VV[II] was lost. */ > + diff++; > > - ii++; > - } > + ii++; > + } > > - gcc_assert (diff == regset_pool.diff); > - } > -#endif > + gcc_assert (diff == regset_pool.diff); > + } > > /* If not true - we have a memory leak. */ > gcc_assert (regset_pool.diff == 0); > @@ -3623,7 +3620,6 @@ insn_is_the_only_one_in_bb_p (insn_t insn) > return sel_bb_head_p (insn) && sel_bb_end_p (insn); > } > > -#ifdef ENABLE_CHECKING > /* Check that the region we're scheduling still has at most one > backedge. */ > static void > @@ -3644,7 +3640,6 @@ verify_backedges (void) > gcc_assert (n <= 1); > } > } > -#endif > > > /* Functions to work with control flow. */ > @@ -3889,10 +3884,12 @@ tidy_control_flow (basic_block xbb, bool full_tidying) > sel_recompute_toporder (); > } > > -#ifdef ENABLE_CHECKING > - verify_backedges (); > - verify_dominators (CDI_DOMINATORS); > -#endif > + /* TODO: use separate flag for CFG checking. */ > + if (flag_checking) > + { > + verify_backedges (); > + verify_dominators (CDI_DOMINATORS); > + } > > return changed; > } > diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c > index 721013f..30fcfdb 100644 > --- a/gcc/sel-sched.c > +++ b/gcc/sel-sched.c > @@ -378,10 +378,8 @@ struct moveop_static_params > they are to be removed. */ > int uid; > > -#ifdef ENABLE_CHECKING > /* This is initialized to the insn on which the driver stopped its > traversal. */ > insn_t failed_insn; > -#endif > > /* True if we scheduled an insn with different register. */ > bool was_renamed; > @@ -1655,9 +1653,8 @@ find_best_reg_for_expr (expr_t expr, blist_t bnds, bool > *is_orig_reg_p) > collect_unavailable_regs_from_bnds (expr, bnds, used_regs, > ®_rename_data, > &original_insns); > > -#ifdef ENABLE_CHECKING > /* If after reload, make sure we're working with hard regs here. */ > - if (reload_completed) > + if (flag_checking && reload_completed) > { > reg_set_iterator rsi; > unsigned i; > @@ -1665,7 +1662,6 @@ find_best_reg_for_expr (expr_t expr, blist_t bnds, bool > *is_orig_reg_p) > EXECUTE_IF_SET_IN_REG_SET (used_regs, FIRST_PSEUDO_REGISTER, i, rsi) > gcc_unreachable (); > } > -#endif > > if (EXPR_SEPARABLE_P (expr)) > { > @@ -3593,7 +3589,6 @@ vinsn_vec_has_expr_p (vinsn_vec_t vinsn_vec, expr_t > expr) > return false; > } > > -#ifdef ENABLE_CHECKING > /* Return true if either of expressions from ORIG_OPS can be blocked > by previously created bookkeeping code. STATIC_PARAMS points to static > parameters of move_op. */ > @@ -3635,7 +3630,6 @@ av_set_could_be_blocked_by_bookkeeping_p (av_set_t > orig_ops, void *static_params > > return false; > } > -#endif > > /* Clear VINSN_VEC and detach vinsns. */ > static void > @@ -4889,11 +4883,10 @@ move_cond_jump (rtx_insn *insn, bnd_t bnd) > block_bnd = BLOCK_FOR_INSN (BND_TO (bnd)); > prev = BND_TO (bnd); > > -#ifdef ENABLE_CHECKING > /* Moving of jump should not cross any other jumps or beginnings of new > basic blocks. The only exception is when we move a jump through > mutually exclusive insns along fallthru edges. */ > - if (block_from != block_bnd) > + if (flag_checking && block_from != block_bnd) > { > bb = block_from; > for (link = PREV_INSN (insn); link != PREV_INSN (prev); > @@ -4908,7 +4901,6 @@ move_cond_jump (rtx_insn *insn, bnd_t bnd) > } > } > } > -#endif > > /* Jump is moved to the boundary. */ > next = PREV_INSN (insn); > @@ -6205,9 +6197,7 @@ move_op_orig_expr_not_found (insn_t insn, av_set_t > orig_ops ATTRIBUTE_UNUSED, > { > moveop_static_params_p sparams = (moveop_static_params_p) static_params; > > -#ifdef ENABLE_CHECKING > sparams->failed_insn = insn; > -#endif > > /* If we're scheduling separate expr, in order to generate correct code > we need to stop the search at bookkeeping code generated with the > @@ -6380,7 +6370,6 @@ code_motion_process_successors (insn_t insn, av_set_t > orig_ops, > } > } > > -#ifdef ENABLE_CHECKING > /* Here, RES==1 if original expr was found at least for one of the > successors. After the loop, RES may happen to have zero value > only if at some point the expr searched is present in av_set, but is > @@ -6388,12 +6377,10 @@ code_motion_process_successors (insn_t insn, av_set_t > orig_ops, > The exception is when the original operation is blocked by > bookkeeping generated for another fence or for another path in current > move_op. */ > - gcc_assert (res == 1 > - || (res == 0 > - && av_set_could_be_blocked_by_bookkeeping_p (orig_ops, > - static_params)) > - || res == -1); > -#endif > + gcc_checking_assert (res == 1 > + || (res == 0 > + && av_set_could_be_blocked_by_bookkeeping_p > (orig_ops, static_params)) > + || res == -1); > > /* Merge data, clean up, etc. */ > if (res != -1 && code_motion_path_driver_info->after_merge_succs) > @@ -6695,9 +6682,7 @@ move_op (insn_t insn, av_set_t orig_ops, expr_t > expr_vliw, > sparams.dest = dest; > sparams.c_expr = c_expr; > sparams.uid = INSN_UID (EXPR_INSN_RTX (expr_vliw)); > -#ifdef ENABLE_CHECKING > sparams.failed_insn = NULL; > -#endif > sparams.was_renamed = false; > lparams.e1 = NULL; > > diff --git a/gcc/ssa-iterators.h b/gcc/ssa-iterators.h > index e04b630..fa7ad3b 100644 > --- a/gcc/ssa-iterators.h > +++ b/gcc/ssa-iterators.h > @@ -344,9 +344,7 @@ first_readonly_imm_use (imm_use_iterator *imm, tree var) > { > imm->end_p = &(SSA_NAME_IMM_USE_NODE (var)); > imm->imm_use = imm->end_p->next; > -#ifdef ENABLE_CHECKING > imm->iter_node.next = imm->imm_use->next; > -#endif > if (end_readonly_imm_use_p (imm)) > return NULL_USE_OPERAND_P; > return imm->imm_use; > @@ -358,14 +356,15 @@ next_readonly_imm_use (imm_use_iterator *imm) > { > use_operand_p old = imm->imm_use; > > -#ifdef ENABLE_CHECKING > /* If this assertion fails, it indicates the 'next' pointer has changed > since the last bump. This indicates that the list is being modified > via stmt changes, or SET_USE, or somesuch thing, and you need to be > using the SAFE version of the iterator. */ > - gcc_assert (imm->iter_node.next == old->next); > - imm->iter_node.next = old->next->next; > -#endif > + if (flag_checking) > + { > + gcc_assert (imm->iter_node.next == old->next); > + imm->iter_node.next = old->next->next; > + } > > imm->imm_use = old->next; > if (end_readonly_imm_use_p (imm)) > diff --git a/gcc/store-motion.c b/gcc/store-motion.c > index ec3faa2..ed1a399 100644 > --- a/gcc/store-motion.c > +++ b/gcc/store-motion.c > @@ -644,9 +644,6 @@ compute_store_table (void) > { > int ret; > basic_block bb; > -#ifdef ENABLE_CHECKING > - unsigned regno; > -#endif > rtx_insn *insn; > rtx_insn *tmp; > df_ref def; > @@ -692,11 +689,12 @@ compute_store_table (void) > last_set_in[DF_REF_REGNO (def)] = 0; > } > > -#ifdef ENABLE_CHECKING > - /* last_set_in should now be all-zero. */ > - for (regno = 0; regno < max_gcse_regno; regno++) > - gcc_assert (!last_set_in[regno]); > -#endif > + if (flag_checking) > + { > + /* last_set_in should now be all-zero. */ > + for (unsigned regno = 0; regno < max_gcse_regno; regno++) > + gcc_assert (!last_set_in[regno]); > + } > > /* Clear temporary marks. */ > for (ptr = first_st_expr (); ptr != NULL; ptr = next_st_expr (ptr)) > diff --git a/gcc/symbol-summary.h b/gcc/symbol-summary.h > index eefbfd9..4a1a510 100644 > --- a/gcc/symbol-summary.h > +++ b/gcc/symbol-summary.h > @@ -39,14 +39,12 @@ public: > function_summary (symbol_table *symtab, bool ggc = false): m_ggc (ggc), > m_map (13, ggc), m_insertion_enabled (true), m_symtab (symtab) > { > -#ifdef ENABLE_CHECKING > - cgraph_node *node; > - > - FOR_EACH_FUNCTION (node) > - { > - gcc_checking_assert (node->summary_uid > 0); > - } > -#endif > + if (flag_checking) > + { > + cgraph_node *node; > + FOR_EACH_FUNCTION (node) > + gcc_assert (node->summary_uid > 0); > + } > > m_symtab_insertion_hook = > symtab->add_cgraph_insertion_hook > diff --git a/gcc/target.h b/gcc/target.h > index a79f424..ffc4d6a 100644 > --- a/gcc/target.h > +++ b/gcc/target.h > @@ -52,21 +52,21 @@ > #include "tm.h" > #include "hard-reg-set.h" > > -#ifdef ENABLE_CHECKING > +#if CHECKING_P > > struct cumulative_args_t { void *magic; void *p; }; > > -#else /* !ENABLE_CHECKING */ > +#else /* !CHECKING_P */ > > /* When using a GCC build compiler, we could use > __attribute__((transparent_union)) to get cumulative_args_t function > arguments passed like scalars where the ABI would mandate a less > efficient way of argument passing otherwise. However, that would come > - at the cost of less type-safe !ENABLE_CHECKING compilation. */ > + at the cost of less type-safe !CHECKING_P compilation. */ > > union cumulative_args_t { void *p; }; > > -#endif /* !ENABLE_CHECKING */ > +#endif /* !CHECKING_P */ > > /* Types used by the record_gcc_switches() target function. */ > enum print_switch_type > @@ -200,9 +200,9 @@ extern struct gcc_target targetm; > static inline CUMULATIVE_ARGS * > get_cumulative_args (cumulative_args_t arg) > { > -#ifdef ENABLE_CHECKING > +#if CHECKING_P > gcc_assert (arg.magic == CUMULATIVE_ARGS_MAGIC); > -#endif /* ENABLE_CHECKING */ > +#endif /* CHECKING_P */ > return (CUMULATIVE_ARGS *) arg.p; > } > > @@ -211,9 +211,9 @@ pack_cumulative_args (CUMULATIVE_ARGS *arg) > { > cumulative_args_t ret; > > -#ifdef ENABLE_CHECKING > +#if CHECKING_P > ret.magic = CUMULATIVE_ARGS_MAGIC; > -#endif /* ENABLE_CHECKING */ > +#endif /* CHECKING_P */ > ret.p = (void *) arg; > return ret; > } > diff --git a/gcc/timevar.c b/gcc/timevar.c > index 8249727..3543850 100644 > --- a/gcc/timevar.c > +++ b/gcc/timevar.c > @@ -22,6 +22,7 @@ along with GCC; see the file COPYING3. If not see > #include "system.h" > #include "coretypes.h" > #include "timevar.h" > +#include "options.h" > > #ifndef HAVE_CLOCK_T > typedef int clock_t; > @@ -727,10 +728,13 @@ timer::print (FILE *fp) > #endif > fprintf (fp, "%8u kB\n", (unsigned) (total->ggc_mem >> 10)); > > -#ifdef ENABLE_CHECKING > - fprintf (fp, "Extra diagnostic checks enabled; compiler may run > slowly.\n"); > - fprintf (fp, "Configure with --enable-checking=release to disable > checks.\n"); > -#endif > + if (flag_checking) > + { > + fprintf (fp, "Extra diagnostic checks enabled; " > + "compiler may run slowly.\n"); > + fprintf (fp, "Configure with --enable-checking=release " > + "to disable checks.\n"); > + } > #ifndef ENABLE_ASSERT_CHECKING > fprintf (fp, "Internal checks disabled; compiler is not suited for > release.\n"); > fprintf (fp, "Configure with --enable-checking=release to enable > checks.\n"); > diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c > index 488c20e..d0b54ef 100644 > --- a/gcc/trans-mem.c > +++ b/gcc/trans-mem.c > @@ -5341,9 +5341,7 @@ ipa_tm_execute (void) > enum availability a; > unsigned int i; > > -#ifdef ENABLE_CHECKING > - cgraph_node::verify_cgraph_nodes (); > -#endif > + cgraph_node::checking_verify_cgraph_nodes (); > > bitmap_obstack_initialize (&tm_obstack); > initialize_original_copy_tables (); > @@ -5589,9 +5587,7 @@ ipa_tm_execute (void) > FOR_EACH_FUNCTION (node) > node->aux = NULL; > > -#ifdef ENABLE_CHECKING > - cgraph_node::verify_cgraph_nodes (); > -#endif > + cgraph_node::checking_verify_cgraph_nodes (); > > return 0; > } > diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c > index 40d5eb8..df8700d 100644 > --- a/gcc/tree-cfg.c > +++ b/gcc/tree-cfg.c > @@ -6465,14 +6465,12 @@ move_stmt_op (tree *tp, int *walk_subtrees, void > *data) > || (p->orig_block == NULL_TREE > && block != NULL_TREE)) > TREE_SET_BLOCK (t, p->new_block); > -#ifdef ENABLE_CHECKING > - else if (block != NULL_TREE) > + else if (flag_checking && block != NULL_TREE) > { > while (block && TREE_CODE (block) == BLOCK && block != p->orig_block) > block = BLOCK_SUPERCONTEXT (block); > gcc_assert (block == p->orig_block); > } > -#endif > } > else if (DECL_P (t) || TREE_CODE (t) == SSA_NAME) > { > @@ -7057,9 +7055,9 @@ move_sese_region_to_fn (struct function *dest_cfun, > basic_block entry_bb, > bbs.create (0); > bbs.safe_push (entry_bb); > gather_blocks_in_sese_region (entry_bb, exit_bb, &bbs); > -#ifdef ENABLE_CHECKING > - verify_sese (entry_bb, exit_bb, &bbs); > -#endif > + > + if (flag_checking) > + verify_sese (entry_bb, exit_bb, &bbs); > > /* The blocks that used to be dominated by something in BBS will now be > dominated by the new block. */ > @@ -7901,13 +7899,11 @@ gimple_flow_call_edges_add (sbitmap blocks) > no edge to the exit block in CFG already. > Calling make_edge in such case would cause us to > mark that edge as fake and remove it later. */ > -#ifdef ENABLE_CHECKING > - if (stmt == last_stmt) > + if (flag_checking && stmt == last_stmt) > { > e = find_edge (bb, EXIT_BLOCK_PTR_FOR_FN (cfun)); > gcc_assert (e == NULL); > } > -#endif > > /* Note that the following may create a new basic block > and renumber the existing basic blocks. */ > diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c > index eeedd8a..aba8848 100644 > --- a/gcc/tree-cfgcleanup.c > +++ b/gcc/tree-cfgcleanup.c > @@ -729,9 +729,7 @@ cleanup_tree_cfg_noloop (void) > } > else > { > -#ifdef ENABLE_CHECKING > - verify_dominators (CDI_DOMINATORS); > -#endif > + checking_verify_dominators (CDI_DOMINATORS); > changed = false; > } > > @@ -740,9 +738,7 @@ cleanup_tree_cfg_noloop (void) > gcc_assert (dom_info_available_p (CDI_DOMINATORS)); > compact_blocks (); > > -#ifdef ENABLE_CHECKING > - verify_flow_info (); > -#endif > + checking_verify_flow_info (); > > timevar_pop (TV_TREE_CLEANUP_CFG); > > @@ -777,9 +773,7 @@ repair_loop_structures (void) > > BITMAP_FREE (changed_bbs); > > -#ifdef ENABLE_CHECKING > - verify_loop_structure (); > -#endif > + checking_verify_loop_structure (); > scev_reset (); > > timevar_pop (TV_REPAIR_LOOPS); > diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c > index cb1f08a..f6c2d06 100644 > --- a/gcc/tree-eh.c > +++ b/gcc/tree-eh.c > @@ -703,7 +703,7 @@ maybe_record_in_goto_queue (struct leh_state *state, > gimple *stmt) > } > > > -#ifdef ENABLE_CHECKING > +#if CHECKING_P > /* We do not process GIMPLE_SWITCHes for now. As long as the original source > was in fact structured, and we've not yet done jump threading, then none > of the labels will leave outer GIMPLE_TRY_FINALLY nodes. Verify this. */ > @@ -3921,9 +3921,8 @@ remove_unreachable_handlers (void) > sbitmap_free (r_reachable); > sbitmap_free (lp_reachable); > > -#ifdef ENABLE_CHECKING > - verify_eh_tree (cfun); > -#endif > + if (flag_checking) > + verify_eh_tree (cfun); > } > > /* Remove unreachable handlers if any landing pads have been removed after > diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c > index f201ab5..ae79f0e 100644 > --- a/gcc/tree-if-conv.c > +++ b/gcc/tree-if-conv.c > @@ -2787,13 +2787,12 @@ pass_if_conversion::execute (function *fun) > && !loop->dont_vectorize)) > todo |= tree_if_conversion (loop); > > -#ifdef ENABLE_CHECKING > - { > - basic_block bb; > - FOR_EACH_BB_FN (bb, fun) > - gcc_assert (!bb->aux); > - } > -#endif > + if (flag_checking) > + { > + basic_block bb; > + FOR_EACH_BB_FN (bb, fun) > + gcc_assert (!bb->aux); > + } > > return todo; > } > diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c > index b8269ef..00c0c84 100644 > --- a/gcc/tree-inline.c > +++ b/gcc/tree-inline.c > @@ -4481,10 +4481,8 @@ expand_call_inline (basic_block bb, gimple *stmt, > copy_body_data *id) > fn = cg_edge->callee->decl; > cg_edge->callee->get_untransformed_body (); > > -#ifdef ENABLE_CHECKING > - if (cg_edge->callee->decl != id->dst_node->decl) > + if (flag_checking && cg_edge->callee->decl != id->dst_node->decl) > cg_edge->callee->verify (); > -#endif > > /* We will be inlining this callee. */ > id->eh_lp_nr = lookup_stmt_eh_lp (stmt); > @@ -4973,7 +4971,7 @@ optimize_inline_calls (tree fn) > > pop_gimplify_context (NULL); > > -#ifdef ENABLE_CHECKING > + if (flag_checking) > { > struct cgraph_edge *e; > > @@ -4983,7 +4981,6 @@ optimize_inline_calls (tree fn) > for (e = id.dst_node->callees; e; e = e->next_callee) > gcc_assert (e->inline_failed); > } > -#endif > > /* Fold queued statements. */ > fold_marked_statements (last, id.statements_to_fold); > @@ -4999,9 +4996,8 @@ optimize_inline_calls (tree fn) > number_blocks (fn); > > delete_unreachable_blocks_update_callgraph (&id); > -#ifdef ENABLE_CHECKING > - id.dst_node->verify (); > -#endif > + if (flag_checking) > + id.dst_node->verify (); > > /* It would be nice to check SSA/CFG/statement consistency here, but it is > not possible yet - the IPA passes might make various functions to not > diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c > index 9fd698d..732a571 100644 > --- a/gcc/tree-into-ssa.c > +++ b/gcc/tree-into-ssa.c > @@ -3169,44 +3169,45 @@ update_ssa (unsigned update_flags) > if (!need_ssa_update_p (cfun)) > return; > > -#ifdef ENABLE_CHECKING > - timevar_push (TV_TREE_STMT_VERIFY); > + if (flag_checking) > + { > + timevar_push (TV_TREE_STMT_VERIFY); > > - bool err = false; > + bool err = false; > > - FOR_EACH_BB_FN (bb, cfun) > - { > - gimple_stmt_iterator gsi; > - for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) > + FOR_EACH_BB_FN (bb, cfun) > { > - gimple *stmt = gsi_stmt (gsi); > - > - ssa_op_iter i; > - use_operand_p use_p; > - FOR_EACH_SSA_USE_OPERAND (use_p, stmt, i, SSA_OP_ALL_USES) > + gimple_stmt_iterator gsi; > + for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) > { > - tree use = USE_FROM_PTR (use_p); > - if (TREE_CODE (use) != SSA_NAME) > - continue; > + gimple *stmt = gsi_stmt (gsi); > > - if (SSA_NAME_IN_FREE_LIST (use)) > + ssa_op_iter i; > + use_operand_p use_p; > + FOR_EACH_SSA_USE_OPERAND (use_p, stmt, i, SSA_OP_ALL_USES) > { > - error ("statement uses released SSA name:"); > - debug_gimple_stmt (stmt); > - fprintf (stderr, "The use of "); > - print_generic_expr (stderr, use, 0); > - fprintf (stderr," should have been replaced\n"); > - err = true; > + tree use = USE_FROM_PTR (use_p); > + if (TREE_CODE (use) != SSA_NAME) > + continue; > + > + if (SSA_NAME_IN_FREE_LIST (use)) > + { > + error ("statement uses released SSA name:"); > + debug_gimple_stmt (stmt); > + fprintf (stderr, "The use of "); > + print_generic_expr (stderr, use, 0); > + fprintf (stderr," should have been replaced\n"); > + err = true; > + } > } > } > } > - } > > - if (err) > - internal_error ("cannot update SSA form"); > + if (err) > + internal_error ("cannot update SSA form"); > > - timevar_pop (TV_TREE_STMT_VERIFY); > -#endif > + timevar_pop (TV_TREE_STMT_VERIFY); > + } > > timevar_push (TV_TREE_SSA_INCREMENTAL); > > @@ -3271,29 +3272,28 @@ update_ssa (unsigned update_flags) > placement heuristics. */ > prepare_block_for_update (start_bb, insert_phi_p); > > -#ifdef ENABLE_CHECKING > - for (i = 1; i < num_ssa_names; ++i) > - { > - tree name = ssa_name (i); > - if (!name > - || virtual_operand_p (name)) > - continue; > - > - /* For all but virtual operands, which do not have SSA names > - with overlapping life ranges, ensure that symbols marked > - for renaming do not have existing SSA names associated with > - them as we do not re-write them out-of-SSA before going > - into SSA for the remaining symbol uses. */ > - if (marked_for_renaming (SSA_NAME_VAR (name))) > - { > - fprintf (stderr, "Existing SSA name for symbol marked for " > - "renaming: "); > - print_generic_expr (stderr, name, TDF_SLIM); > - fprintf (stderr, "\n"); > - internal_error ("SSA corruption"); > - } > - } > -#endif > + if (flag_checking) > + for (i = 1; i < num_ssa_names; ++i) > + { > + tree name = ssa_name (i); > + if (!name > + || virtual_operand_p (name)) > + continue; > + > + /* For all but virtual operands, which do not have SSA names > + with overlapping life ranges, ensure that symbols marked > + for renaming do not have existing SSA names associated with > + them as we do not re-write them out-of-SSA before going > + into SSA for the remaining symbol uses. */ > + if (marked_for_renaming (SSA_NAME_VAR (name))) > + { > + fprintf (stderr, "Existing SSA name for symbol marked for " > + "renaming: "); > + print_generic_expr (stderr, name, TDF_SLIM); > + fprintf (stderr, "\n"); > + internal_error ("SSA corruption"); > + } > + } > } > else > { > diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c > index 6f86d53..18025c8 100644 > --- a/gcc/tree-loop-distribution.c > +++ b/gcc/tree-loop-distribution.c > @@ -1821,9 +1821,7 @@ out: > rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa); > } > > -#ifdef ENABLE_CHECKING > - verify_loop_structure (); > -#endif > + checking_verify_loop_structure (); > > return 0; > } > diff --git a/gcc/tree-outof-ssa.c b/gcc/tree-outof-ssa.c > index 8dc4908..1c4c63c 100644 > --- a/gcc/tree-outof-ssa.c > +++ b/gcc/tree-outof-ssa.c > @@ -841,24 +841,23 @@ eliminate_useless_phis (void) > result = gimple_phi_result (phi); > if (virtual_operand_p (result)) > { > -#ifdef ENABLE_CHECKING > - size_t i; > /* There should be no arguments which are not virtual, or the > results will be incorrect. */ > - for (i = 0; i < gimple_phi_num_args (phi); i++) > - { > - tree arg = PHI_ARG_DEF (phi, i); > - if (TREE_CODE (arg) == SSA_NAME > - && !virtual_operand_p (arg)) > - { > - fprintf (stderr, "Argument of PHI is not virtual ("); > - print_generic_expr (stderr, arg, TDF_SLIM); > - fprintf (stderr, "), but the result is :"); > - print_gimple_stmt (stderr, phi, 0, TDF_SLIM); > - internal_error ("SSA corruption"); > - } > - } > -#endif > + if (flag_checking) > + for (size_t i = 0; i < gimple_phi_num_args (phi); i++) > + { > + tree arg = PHI_ARG_DEF (phi, i); > + if (TREE_CODE (arg) == SSA_NAME > + && !virtual_operand_p (arg)) > + { > + fprintf (stderr, "Argument of PHI is not virtual ("); > + print_generic_expr (stderr, arg, TDF_SLIM); > + fprintf (stderr, "), but the result is :"); > + print_gimple_stmt (stderr, phi, 0, TDF_SLIM); > + internal_error ("SSA corruption"); > + } > + } > + > remove_phi_node (&gsi, true); > } > else > @@ -884,9 +883,11 @@ eliminate_useless_phis (void) > variable. */ > > static void > -rewrite_trees (var_map map ATTRIBUTE_UNUSED) > +rewrite_trees (var_map map) > { > -#ifdef ENABLE_CHECKING > + if (!flag_checking) > + return; > + > basic_block bb; > /* Search for PHIs where the destination has no partition, but one > or more arguments has a partition. This should not happen and can > @@ -918,7 +919,6 @@ rewrite_trees (var_map map ATTRIBUTE_UNUSED) > } > } > } > -#endif > } > > /* Given the out-of-ssa info object SA (with prepared partitions) > diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c > index 6781af4..300ec6b 100644 > --- a/gcc/tree-parloops.c > +++ b/gcc/tree-parloops.c > @@ -2784,9 +2784,7 @@ pass_parallelize_loops::execute (function *fun) > { > fun->curr_properties &= ~(PROP_gimple_eomp); > > -#ifdef ENABLE_CHECKING > - verify_loop_structure (); > -#endif > + checking_verify_loop_structure (); > > return TODO_update_ssa; > } > diff --git a/gcc/tree-predcom.c b/gcc/tree-predcom.c > index 4abac13..5f6e1b0 100644 > --- a/gcc/tree-predcom.c > +++ b/gcc/tree-predcom.c > @@ -896,13 +896,9 @@ suitable_component_p (struct loop *loop, struct > component *comp) > if (!determine_offset (first->ref, a->ref, &a->offset)) > return false; > > -#ifdef ENABLE_CHECKING > - { > - enum ref_step_type a_step; > - ok = suitable_reference_p (a->ref, &a_step); > - gcc_assert (ok && a_step == comp->comp_step); > - } > -#endif > + enum ref_step_type a_step; > + gcc_checking_assert (suitable_reference_p (a->ref, &a_step) > + && a_step == comp->comp_step); > } > > /* If there is a write inside the component, we must know whether the > diff --git a/gcc/tree-profile.c b/gcc/tree-profile.c > index 0d33c87..54bc644 100644 > --- a/gcc/tree-profile.c > +++ b/gcc/tree-profile.c > @@ -461,9 +461,8 @@ gimple_gen_const_delta_profiler (histogram_value value > ATTRIBUTE_UNUSED, > unsigned base ATTRIBUTE_UNUSED) > { > /* FIXME implement this. */ > -#ifdef ENABLE_CHECKING > - internal_error ("unimplemented functionality"); > -#endif > + if (flag_checking) > + internal_error ("unimplemented functionality"); > gcc_unreachable (); > } > > diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c > index 3b8d594..a5bd831 100644 > --- a/gcc/tree-ssa-alias.c > +++ b/gcc/tree-ssa-alias.c > @@ -1442,12 +1442,7 @@ refs_may_alias_p_1 (ao_ref *ref1, ao_ref *ref2, bool > tbaa_p) > ao_ref_alias_set (ref2), -1, > tbaa_p); > > - /* We really do not want to end up here, but returning true is safe. */ > -#ifdef ENABLE_CHECKING > gcc_unreachable (); > -#else > - return true; > -#endif > } > > static bool > diff --git a/gcc/tree-ssa-live.c b/gcc/tree-ssa-live.c > index 25b548b..a61026d 100644 > --- a/gcc/tree-ssa-live.c > +++ b/gcc/tree-ssa-live.c > @@ -52,9 +52,7 @@ along with GCC; see the file COPYING3. If not see > #include "ipa-utils.h" > #include "cfgloop.h" > > -#ifdef ENABLE_CHECKING > -static void verify_live_on_entry (tree_live_info_p); > -#endif > +static void verify_live_on_entry (tree_live_info_p); > > > /* VARMAP maintains a mapping from SSA version number to real variables. > @@ -1153,9 +1151,8 @@ calculate_live_ranges (var_map map, bool want_livein) > > live_worklist (live); > > -#ifdef ENABLE_CHECKING > - verify_live_on_entry (live); > -#endif > + if (flag_checking) > + verify_live_on_entry (live); > > calculate_live_on_exit (live); > > @@ -1292,7 +1289,6 @@ debug (tree_live_info_d *ptr) > } > > > -#ifdef ENABLE_CHECKING > /* Verify that SSA_VAR is a non-virtual SSA_NAME. */ > > void > @@ -1422,4 +1418,3 @@ verify_live_on_entry (tree_live_info_p live) > } > gcc_assert (num <= 0); > } > -#endif > diff --git a/gcc/tree-ssa-live.h b/gcc/tree-ssa-live.h > index 1f88358..0cb3a1a 100644 > --- a/gcc/tree-ssa-live.h > +++ b/gcc/tree-ssa-live.h > @@ -80,9 +80,7 @@ extern void remove_unused_locals (void); > extern void dump_var_map (FILE *, var_map); > extern void debug (_var_map &ref); > extern void debug (_var_map *ptr); > -#ifdef ENABLE_CHECKING > extern void register_ssa_partition_check (tree ssa_var); > -#endif > > > /* Return number of partitions in MAP. */ > @@ -181,12 +179,10 @@ num_basevars (var_map map) > partitions may be filtered out by a view later. */ > > static inline void > -register_ssa_partition (var_map map ATTRIBUTE_UNUSED, > - tree ssa_var ATTRIBUTE_UNUSED) > +register_ssa_partition (var_map map ATTRIBUTE_UNUSED, tree ssa_var) > { > -#if defined ENABLE_CHECKING > - register_ssa_partition_check (ssa_var); > -#endif > + if (flag_checking) > + register_ssa_partition_check (ssa_var); > } > > > diff --git a/gcc/tree-ssa-loop-ivcanon.c b/gcc/tree-ssa-loop-ivcanon.c > index 38f7c3f..25f297c 100644 > --- a/gcc/tree-ssa-loop-ivcanon.c > +++ b/gcc/tree-ssa-loop-ivcanon.c > @@ -1376,10 +1376,8 @@ tree_unroll_loops_completely (bool may_increase_size, > bool unroll_outer) > /* Clean up the information about numbers of iterations, since > complete unrolling might have invalidated it. */ > scev_reset (); > -#ifdef ENABLE_CHECKING > - if (loops_state_satisfies_p (LOOP_CLOSED_SSA)) > + if (flag_checking && loops_state_satisfies_p (LOOP_CLOSED_SSA)) > verify_loop_closed_ssa (true); > -#endif > } > if (loop_closed_ssa_invalidated) > BITMAP_FREE (loop_closed_ssa_invalidated); > diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c > index 27ba275..ba2340f 100644 > --- a/gcc/tree-ssa-loop-manip.c > +++ b/gcc/tree-ssa-loop-manip.c > @@ -278,22 +278,22 @@ add_exit_phi (basic_block exit, tree var) > edge e; > edge_iterator ei; > > -#ifdef ENABLE_CHECKING > /* Check that at least one of the edges entering the EXIT block exits > the loop, or a superloop of that loop, that VAR is defined in. */ > - gimple *def_stmt = SSA_NAME_DEF_STMT (var); > - basic_block def_bb = gimple_bb (def_stmt); > - FOR_EACH_EDGE (e, ei, exit->preds) > + if (flag_checking) > { > - struct loop *aloop = find_common_loop (def_bb->loop_father, > - e->src->loop_father); > - if (!flow_bb_inside_loop_p (aloop, e->dest)) > - break; > + gimple *def_stmt = SSA_NAME_DEF_STMT (var); > + basic_block def_bb = gimple_bb (def_stmt); > + FOR_EACH_EDGE (e, ei, exit->preds) > + { > + struct loop *aloop = find_common_loop (def_bb->loop_father, > + e->src->loop_father); > + if (!flow_bb_inside_loop_p (aloop, e->dest)) > + break; > + } > + gcc_assert (e); > } > > - gcc_checking_assert (e); > -#endif > - > phi = create_phi_node (NULL_TREE, exit); > create_new_def_for (var, phi, gimple_phi_result_ptr (phi)); > FOR_EACH_EDGE (e, ei, exit->preds) > @@ -1368,11 +1368,9 @@ tree_transform_and_unroll_loop (struct loop *loop, > unsigned factor, > gimple_cond_set_rhs (exit_if, exit_bound); > update_stmt (exit_if); > > -#ifdef ENABLE_CHECKING > - verify_flow_info (); > - verify_loop_structure (); > - verify_loop_closed_ssa (true); > -#endif > + checking_verify_flow_info (); > + checking_verify_loop_structure (); > + checking_verify_loop_closed_ssa (true); > } > > /* Wrapper over tree_transform_and_unroll_loop for case we do not > diff --git a/gcc/tree-ssa-loop-manip.h b/gcc/tree-ssa-loop-manip.h > index 9285718..96b02a6 100644 > --- a/gcc/tree-ssa-loop-manip.h > +++ b/gcc/tree-ssa-loop-manip.h > @@ -27,6 +27,14 @@ extern void create_iv (tree, tree, tree, struct loop *, > gimple_stmt_iterator *, > extern void rewrite_into_loop_closed_ssa (bitmap, unsigned); > extern void rewrite_virtuals_into_loop_closed_ssa (struct loop *); > extern void verify_loop_closed_ssa (bool); > + > +static inline void > +checking_verify_loop_closed_ssa (bool verify_ssa_p) > +{ > + if (flag_checking) > + verify_loop_closed_ssa (verify_ssa_p); > +} > + > extern basic_block split_loop_exit_edge (edge); > extern basic_block ip_end_pos (struct loop *); > extern basic_block ip_normal_pos (struct loop *); > diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c > index 9223642..cb6c749 100644 > --- a/gcc/tree-ssa-math-opts.c > +++ b/gcc/tree-ssa-math-opts.c > @@ -541,10 +541,9 @@ pass_cse_reciprocals::execute (function *fun) > calculate_dominance_info (CDI_DOMINATORS); > calculate_dominance_info (CDI_POST_DOMINATORS); > > -#ifdef ENABLE_CHECKING > - FOR_EACH_BB_FN (bb, fun) > - gcc_assert (!bb->aux); > -#endif > + if (flag_checking) > + FOR_EACH_BB_FN (bb, fun) > + gcc_assert (!bb->aux); > > for (arg = DECL_ARGUMENTS (fun->decl); arg; arg = DECL_CHAIN (arg)) > if (FLOAT_TYPE_P (TREE_TYPE (arg)) > diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c > index 544e9df..92d1ab2 100644 > --- a/gcc/tree-ssa-operands.c > +++ b/gcc/tree-ssa-operands.c > @@ -881,12 +881,13 @@ get_expr_operands (struct function *fn, gimple *stmt, > tree *expr_p, int flags) > } > > /* If we get here, something has gone wrong. */ > -#ifdef ENABLE_CHECKING > - fprintf (stderr, "unhandled expression in get_expr_operands():\n"); > - debug_tree (expr); > - fputs ("\n", stderr); > -#endif > - gcc_unreachable (); > + if (flag_checking) > + { > + fprintf (stderr, "unhandled expression in get_expr_operands():\n"); > + debug_tree (expr); > + fputs ("\n", stderr); > + gcc_unreachable (); > + } > } > > > diff --git a/gcc/tree-ssa-propagate.c b/gcc/tree-ssa-propagate.c > index fbe41f9..363f439 100644 > --- a/gcc/tree-ssa-propagate.c > +++ b/gcc/tree-ssa-propagate.c > @@ -1501,14 +1501,14 @@ static void > replace_exp_1 (use_operand_p op_p, tree val, > bool for_propagation ATTRIBUTE_UNUSED) > { > -#if defined ENABLE_CHECKING > - tree op = USE_FROM_PTR (op_p); > - > - gcc_assert (!(for_propagation > - && TREE_CODE (op) == SSA_NAME > - && TREE_CODE (val) == SSA_NAME > - && !may_propagate_copy (op, val))); > -#endif > + if (flag_checking) > + { > + tree op = USE_FROM_PTR (op_p); > + gcc_assert (!(for_propagation > + && TREE_CODE (op) == SSA_NAME > + && TREE_CODE (val) == SSA_NAME > + && !may_propagate_copy (op, val))); > + } > > if (TREE_CODE (val) == SSA_NAME) > SET_USE (op_p, val); > diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c > index 5e070bc..52b0813 100644 > --- a/gcc/tree-ssa-structalias.c > +++ b/gcc/tree-ssa-structalias.c > @@ -2544,10 +2544,11 @@ rewrite_constraints (constraint_graph_t graph, > int i; > constraint_t c; > > -#ifdef ENABLE_CHECKING > - for (unsigned int j = 0; j < graph->size; j++) > - gcc_assert (find (j) == j); > -#endif > + if (flag_checking) > + { > + for (unsigned int j = 0; j < graph->size; j++) > + gcc_assert (find (j) == j); > + } > > FOR_EACH_VEC_ELT (constraints, i, c) > { > diff --git a/gcc/tree-ssa-ter.c b/gcc/tree-ssa-ter.c > index 7a7bcc9..b2d19ed 100644 > --- a/gcc/tree-ssa-ter.c > +++ b/gcc/tree-ssa-ter.c > @@ -182,9 +182,7 @@ struct temp_expr_table > /* A place for the many, many bitmaps we create. */ > static bitmap_obstack ter_bitmap_obstack; > > -#ifdef ENABLE_CHECKING > extern void debug_ter (FILE *, temp_expr_table *); > -#endif > > > /* Create a new TER table for MAP. */ > @@ -232,16 +230,16 @@ free_temp_expr_table (temp_expr_table *t) > { > bitmap ret = NULL; > > -#ifdef ENABLE_CHECKING > - unsigned x; > - for (x = 0; x <= num_var_partitions (t->map); x++) > - gcc_assert (!t->kill_list[x]); > - for (x = 0; x < num_ssa_names; x++) > + if (flag_checking) > { > - gcc_assert (t->expr_decl_uids[x] == NULL); > - gcc_assert (t->partition_dependencies[x] == NULL); > + for (unsigned x = 0; x <= num_var_partitions (t->map); x++) > + gcc_assert (!t->kill_list[x]); > + for (unsigned x = 0; x < num_ssa_names; x++) > + { > + gcc_assert (t->expr_decl_uids[x] == NULL); > + gcc_assert (t->partition_dependencies[x] == NULL); > + } > } > -#endif > > BITMAP_FREE (t->partition_in_use); > BITMAP_FREE (t->new_replaceable_dependencies); > @@ -748,7 +746,6 @@ dump_replaceable_exprs (FILE *f, bitmap expr) > } > > > -#ifdef ENABLE_CHECKING > /* Dump the status of the various tables in the expression table. This is > used > exclusively to debug TER. F is the place to send debug info and T is the > table being debugged. */ > @@ -796,4 +793,3 @@ debug_ter (FILE *f, temp_expr_table *t) > > fprintf (f, "\n----------\n"); > } > -#endif > diff --git a/gcc/tree-ssa-threadupdate.c b/gcc/tree-ssa-threadupdate.c > index 8e3437a..90a9172 100644 > --- a/gcc/tree-ssa-threadupdate.c > +++ b/gcc/tree-ssa-threadupdate.c > @@ -2510,9 +2510,8 @@ duplicate_thread_path (edge entry, edge exit, > scale_bbs_frequencies_int (region_copy, n_region, entry_freq, > total_freq); > } > > -#ifdef ENABLE_CHECKING > - verify_jump_thread (region_copy, n_region); > -#endif > + if (flag_checking) > + verify_jump_thread (region_copy, n_region); > > /* Remove the last branch in the jump thread path. */ > remove_ctrl_stmt_and_useless_edges (region_copy[n_region - 1], exit->dest); > diff --git a/gcc/tree-ssa.h b/gcc/tree-ssa.h > index a2c90a0..5a409e5 100644 > --- a/gcc/tree-ssa.h > +++ b/gcc/tree-ssa.h > @@ -77,5 +77,13 @@ redirect_edge_var_map_location (edge_var_map *v) > return v->locus; > } > > +/* Verify SSA invariants, if internal consistency checks are enabled. */ > + > +static inline void > +checking_verify_ssa (bool check_modified_stmt, bool check_ssa_operands) > +{ > + if (flag_checking) > + verify_ssa (check_modified_stmt, check_ssa_operands); > +} > > #endif /* GCC_TREE_SSA_H */ > diff --git a/gcc/tree-ssanames.c b/gcc/tree-ssanames.c > index 804ec62..90d75b6 100644 > --- a/gcc/tree-ssanames.c > +++ b/gcc/tree-ssanames.c > @@ -336,9 +336,8 @@ release_ssa_name_fn (struct function *fn, tree var) > if (MAY_HAVE_DEBUG_STMTS) > insert_debug_temp_for_var_def (NULL, var); > > -#ifdef ENABLE_CHECKING > - verify_imm_links (stderr, var); > -#endif > + if (flag_checking) > + verify_imm_links (stderr, var); > while (imm->next != imm) > delink_imm_use (imm->next); > > diff --git a/gcc/tree-stdarg.c b/gcc/tree-stdarg.c > index 3e6d98c..a38443d 100644 > --- a/gcc/tree-stdarg.c > +++ b/gcc/tree-stdarg.c > @@ -1107,13 +1107,14 @@ expand_ifn_va_arg (function *fun) > if ((fun->curr_properties & PROP_gimple_lva) == 0) > expand_ifn_va_arg_1 (fun); > > -#if ENABLE_CHECKING > - basic_block bb; > - gimple_stmt_iterator i; > - FOR_EACH_BB_FN (bb, fun) > - for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i)) > - gcc_assert (!gimple_call_ifn_va_arg_p (gsi_stmt (i))); > -#endif > + if (flag_checking) > + { > + basic_block bb; > + gimple_stmt_iterator i; > + FOR_EACH_BB_FN (bb, fun) > + for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i)) > + gcc_assert (!gimple_call_ifn_va_arg_p (gsi_stmt (i))); > + } > } > > namespace { > diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c > index 11c3ae2..d9d01ec 100644 > --- a/gcc/tree-vect-loop-manip.c > +++ b/gcc/tree-vect-loop-manip.c > @@ -919,9 +919,7 @@ slpeel_tree_duplicate_loop_to_edge_cfg (struct loop *loop, > free (new_bbs); > free (bbs); > > -#ifdef ENABLE_CHECKING > - verify_dominators (CDI_DOMINATORS); > -#endif > + checking_verify_dominators (CDI_DOMINATORS); > > return new_loop; > } > @@ -1003,11 +1001,13 @@ slpeel_can_duplicate_loop_p (const struct loop *loop, > const_edge e) > return true; > } > > -#ifdef ENABLE_CHECKING > static void > -slpeel_verify_cfg_after_peeling (struct loop *first_loop, > - struct loop *second_loop) > +slpeel_checking_verify_cfg_after_peeling (struct loop *first_loop, > + struct loop *second_loop) > { > + if (!flag_checking) > + return; > + > basic_block loop1_exit_bb = single_exit (first_loop)->dest; > basic_block loop2_entry_bb = loop_preheader_edge (second_loop)->src; > basic_block loop1_entry_bb = loop_preheader_edge (first_loop)->src; > @@ -1035,7 +1035,6 @@ slpeel_verify_cfg_after_peeling (struct loop > *first_loop, > second_loop. */ > /* TODO */ > } > -#endif > > /* If the run time cost model check determines that vectorization is > not profitable and hence scalar loop should be generated then set > @@ -1773,9 +1772,7 @@ vect_do_peeling_for_loop_bound (loop_vec_info > loop_vinfo, > 0, LOOP_VINFO_VECT_FACTOR (loop_vinfo)); > gcc_assert (new_loop); > gcc_assert (loop_num == loop->num); > -#ifdef ENABLE_CHECKING > - slpeel_verify_cfg_after_peeling (loop, new_loop); > -#endif > + slpeel_checking_verify_cfg_after_peeling (loop, new_loop); > > /* A guard that controls whether the new_loop is to be executed or skipped > is placed in LOOP->exit. LOOP->exit therefore has two successors - one > @@ -2032,9 +2029,7 @@ vect_do_peeling_for_alignment (loop_vec_info > loop_vinfo, tree ni_name, > bound, 0); > > gcc_assert (new_loop); > -#ifdef ENABLE_CHECKING > - slpeel_verify_cfg_after_peeling (new_loop, loop); > -#endif > + slpeel_checking_verify_cfg_after_peeling (new_loop, loop); > /* For vectorization factor N, we need to copy at most N-1 values > for alignment and this means N-2 loopback edge executions. */ > max_iter = LOOP_VINFO_VECT_FACTOR (loop_vinfo) - 2; > diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c > index 0a47d35..3138ae7 100644 > --- a/gcc/tree-vrp.c > +++ b/gcc/tree-vrp.c > @@ -242,9 +242,7 @@ static inline bool > supports_overflow_infinity (const_tree type) > { > tree min = vrp_val_min (type), max = vrp_val_max (type); > -#ifdef ENABLE_CHECKING > - gcc_assert (needs_overflow_infinity (type)); > -#endif > + gcc_checking_assert (needs_overflow_infinity (type)); > return (min != NULL_TREE > && CONSTANT_CLASS_P (min) > && max != NULL_TREE > @@ -373,9 +371,9 @@ static void > set_value_range (value_range *vr, enum value_range_type t, tree min, > tree max, bitmap equiv) > { > -#if defined ENABLE_CHECKING > /* Check the validity of the range. */ > - if (t == VR_RANGE || t == VR_ANTI_RANGE) > + if (flag_checking > + && (t == VR_RANGE || t == VR_ANTI_RANGE)) > { > int cmp; > > @@ -395,12 +393,12 @@ set_value_range (value_range *vr, enum value_range_type > t, tree min, > || !is_overflow_infinity (max)); > } > > - if (t == VR_UNDEFINED || t == VR_VARYING) > - gcc_assert (min == NULL_TREE && max == NULL_TREE); > - > - if (t == VR_UNDEFINED || t == VR_VARYING) > - gcc_assert (equiv == NULL || bitmap_empty_p (equiv)); > -#endif > + if (flag_checking > + && (t == VR_UNDEFINED || t == VR_VARYING)) > + { > + gcc_assert (min == NULL_TREE && max == NULL_TREE); > + gcc_assert (equiv == NULL || bitmap_empty_p (equiv)); > + } > > vr->type = t; > vr->min = min; > diff --git a/gcc/tree.c b/gcc/tree.c > index e77d4b8..530e7a9 100644 > --- a/gcc/tree.c > +++ b/gcc/tree.c > @@ -5952,10 +5952,11 @@ free_lang_data_in_cgraph (void) > /* Traverse every type found freeing its language data. */ > FOR_EACH_VEC_ELT (fld.types, i, t) > free_lang_data_in_type (t); > -#ifdef ENABLE_CHECKING > - FOR_EACH_VEC_ELT (fld.types, i, t) > - verify_type (t); > -#endif > + if (flag_checking) > + { > + FOR_EACH_VEC_ELT (fld.types, i, t) > + verify_type (t); > + } > > delete fld.pset; > fld.worklist.release (); > diff --git a/gcc/value-prof.c b/gcc/value-prof.c > index efdb434..e371c24 100644 > --- a/gcc/value-prof.c > +++ b/gcc/value-prof.c > @@ -230,9 +230,8 @@ gimple_remove_histogram_value (struct function *fun, > gimple *stmt, > hist2->hvalue.next = hist->hvalue.next; > } > free (hist->hvalue.counters); > -#ifdef ENABLE_CHECKING > - memset (hist, 0xab, sizeof (*hist)); > -#endif > + if (flag_checking) > + memset (hist, 0xab, sizeof (*hist)); > free (hist); > } > > @@ -595,9 +594,8 @@ free_hist (void **slot, void *data ATTRIBUTE_UNUSED) > { > histogram_value hist = *(histogram_value *) slot; > free (hist->hvalue.counters); > -#ifdef ENABLE_CHECKING > - memset (hist, 0xab, sizeof (*hist)); > -#endif > + if (flag_checking) > + memset (hist, 0xab, sizeof (*hist)); > free (hist); > return 1; > } > diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c > index 8010ce1..60c0320 100644 > --- a/gcc/var-tracking.c > +++ b/gcc/var-tracking.c > @@ -399,7 +399,7 @@ struct variable > /* Macro to access MEM_OFFSET as an HOST_WIDE_INT. Evaluates MEM twice. */ > #define INT_MEM_OFFSET(mem) (MEM_OFFSET_KNOWN_P (mem) ? MEM_OFFSET (mem) : 0) > > -#if ENABLE_CHECKING && (GCC_VERSION >= 2007) > +#if CHECKING_P && (GCC_VERSION >= 2007) > > /* Access VAR's Ith part's offset, checking that it's not a one-part > variable. */ > @@ -3571,7 +3571,6 @@ loc_cmp (rtx x, rtx y) > return 0; > } > > -#if ENABLE_CHECKING > /* Check the order of entries in one-part variables. */ > > int > @@ -3603,7 +3602,6 @@ canonicalize_loc_order_check (variable **slot, > > return 1; > } > -#endif > > /* Mark with VALUE_RECURSED_INTO values that have neighbors that are > more likely to be chosen as canonical for an equivalence set. > @@ -3832,17 +3830,16 @@ canonicalize_values_star (variable **slot, > dataflow_set *set) > else > gcc_unreachable (); > > -#if ENABLE_CHECKING > - while (list) > - { > - if (list->offset == 0 > - && (dv_as_opaque (list->dv) == dv_as_opaque (dv) > - || dv_as_opaque (list->dv) == dv_as_opaque (cdv))) > - gcc_unreachable (); > + if (flag_checking) > + while (list) > + { > + if (list->offset == 0 > + && (dv_as_opaque (list->dv) == dv_as_opaque (dv) > + || dv_as_opaque (list->dv) == dv_as_opaque (cdv))) > + gcc_unreachable (); > > - list = list->next; > - } > -#endif > + list = list->next; > + } > } > } > > @@ -6930,10 +6927,9 @@ compute_bb_dataflow (basic_block bb) > ->traverse <dataflow_set *, canonicalize_values_mark> (out); > shared_hash_htab (out->vars) > ->traverse <dataflow_set *, canonicalize_values_star> (out); > -#if ENABLE_CHECKING > - shared_hash_htab (out->vars) > - ->traverse <dataflow_set *, canonicalize_loc_order_check> (out); > -#endif > + if (flag_checking) > + shared_hash_htab (out->vars) > + ->traverse <dataflow_set *, canonicalize_loc_order_check> (out); > } > changed = dataflow_set_different (&old_out, out); > dataflow_set_destroy (&old_out); > @@ -7038,13 +7034,14 @@ vt_find_locations (void) > if (adjust) > { > dataflow_post_merge_adjust (in, &VTI (bb)->permp); > -#if ENABLE_CHECKING > - /* Merge and merge_adjust should keep entries in > - canonical order. */ > - shared_hash_htab (in->vars) > - ->traverse <dataflow_set *, > - canonicalize_loc_order_check> (in); > -#endif > + > + if (flag_checking) > + /* Merge and merge_adjust should keep entries in > + canonical order. */ > + shared_hash_htab (in->vars) > + ->traverse <dataflow_set *, > + canonicalize_loc_order_check> (in); > + > if (dst_can_be_shared) > { > shared_hash_destroy (in->vars); > @@ -9465,11 +9462,12 @@ vt_emit_notes (void) > again. */ > dataflow_set_clear (&VTI (bb)->in); > } > -#ifdef ENABLE_CHECKING > - shared_hash_htab (cur.vars) > - ->traverse <variable_table_type *, emit_notes_for_differences_1> > - (shared_hash_htab (empty_shared_hash)); > -#endif > + > + if (flag_checking) > + shared_hash_htab (cur.vars) > + ->traverse <variable_table_type *, emit_notes_for_differences_1> > + (shared_hash_htab (empty_shared_hash)); > + > dataflow_set_destroy (&cur); > > if (MAY_HAVE_DEBUG_INSNS)