On Wed, May 27, 2026 at 5:51 AM Daniel Barboza
<[email protected]> wrote:
>
> fold_undefer_overflow_warnings () is one of the last few places where
> Wstrict_overflow warnings are issued.  It uses a
> fold_deferring_overflow_warnings int to determine whether the warning should
> be shown, a fold_defer_overflow_warnings helper that increments it,
> a fold_deferred_overflow_warning string that stores the
> deferred warning, an enum for the warning level of the deferred warning.
>
> Remove all of them along with any related logic.
>
> gcc/c-family/ChangeLog:
>
>         * c-common.cc (pointer_int_sum): Removed
>         fold_*_overflow_warnings uses.
>
> gcc/c/ChangeLog:
>
>         * c-fold.cc (c_disable_warnings): Likewise.
>         (c_enable_warnings): Likewise.
>
> gcc/ChangeLog:
>
>         * flags.h (issue_strict_overflow_warning): Removed.
>         * fold-const.cc (fold_defer_overflow_warnings): Removed.
>         (fold_undefer_overflow_warnings): Removed.
>         (fold_undefer_and_ignore_overflow_warnings): Removed.
>         (fold_deferring_overflow_warnings_p): Removed.
>         * fold-const.h (fold_defer_overflow_warnings): Removed.
>         (fold_undefer_overflow_warnings): Removed.
>         (fold_undefer_and_ignore_overflow_warnings): Removed.
>         (fold_deferring_overflow_warnings_p): Removed.
>         * gimple-fold.cc (fold_stmt_1): Removed
>         fold_*_overflow_warnings uses and all related logic.
>         * passes.cc (verify_interpass_invariants): Likewise.
>         (execute_one_ipa_transform_pass): Likewise.
>         (execute_one_pass): Likewise.
>         * tree-cfgcleanup.cc (cleanup_control_expr_graph): Likewise.
>         * tree-data-ref.cc (create_runtime_alias_checks): Likewise.
>         * tree-ssa-ccp.cc (evaluate_stmt): Likewise.
>         * tree-ssa-forwprop.cc (combine_cond_expr_cond): Likewise.
>         * tree-ssa-loop-niter.cc (expand_simple_operations): Likewise.
>         (number_of_iterations_exit_assumptions): Likewise.
>         (loop_niter_by_eval): Likewise.
>         (estimate_numbers_of_iterations): Likewise.
>         (loop_exits_before_overflow): Likewise.
>         * tree-ssa-threadedge.cc: Likewise.
>         * tree-vrp.cc (compare_values): Likewise.

Ok.

> ---
>  gcc/c-family/c-common.cc   | 10 ----
>  gcc/c/c-fold.cc            |  2 -
>  gcc/flags.h                |  3 --
>  gcc/fold-const.cc          | 99 --------------------------------------
>  gcc/fold-const.h           |  4 --
>  gcc/gimple-fold.cc         |  5 --
>  gcc/passes.cc              | 12 -----
>  gcc/tree-cfgcleanup.cc     | 17 +------
>  gcc/tree-data-ref.cc       |  2 -
>  gcc/tree-ssa-ccp.cc        |  7 +--
>  gcc/tree-ssa-forwprop.cc   | 14 +-----
>  gcc/tree-ssa-loop-niter.cc | 40 ++-------------
>  gcc/tree-ssa-threadedge.cc |  7 ---
>  gcc/tree-vrp.cc            | 13 +----
>  14 files changed, 9 insertions(+), 226 deletions(-)
>
> diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc
> index 874530f065d..34bade53f6a 100644
> --- a/gcc/c-family/c-common.cc
> +++ b/gcc/c-family/c-common.cc
> @@ -3422,12 +3422,6 @@ pointer_int_sum (location_t loc, enum tree_code 
> resultcode,
>         }
>      }
>
> -  /* We are manipulating pointer values, so we don't need to warn
> -     about relying on undefined signed overflow.  We disable the
> -     warning here because we use integer types so fold won't know that
> -     they are really pointers.  */
> -  fold_defer_overflow_warnings ();
> -
>    /* If what we are about to multiply by the size of the elements
>       contains a constant term, apply distributive law
>       and multiply that constant term separately.
> @@ -3476,8 +3470,6 @@ pointer_int_sum (location_t loc, enum tree_code 
> resultcode,
>
>        ret = fold_build_pointer_plus_loc (loc, ptrop, intop);
>
> -      fold_undefer_and_ignore_overflow_warnings ();
> -
>        return ret;
>      }
>
> @@ -3506,8 +3498,6 @@ pointer_int_sum (location_t loc, enum tree_code 
> resultcode,
>
>    ret = fold_build_pointer_plus_loc (loc, ptrop, intop);
>
> -  fold_undefer_and_ignore_overflow_warnings ();
> -
>    return ret;
>  }
>
> diff --git a/gcc/c/c-fold.cc b/gcc/c/c-fold.cc
> index 122049daf87..42f8a6fb33d 100644
> --- a/gcc/c/c-fold.cc
> +++ b/gcc/c/c-fold.cc
> @@ -40,7 +40,6 @@ c_disable_warnings (bool disable)
>    if (disable)
>      {
>        ++c_inhibit_evaluation_warnings;
> -      fold_defer_overflow_warnings ();
>      }
>  }
>
> @@ -52,7 +51,6 @@ c_enable_warnings (bool enable)
>    if (enable)
>      {
>        --c_inhibit_evaluation_warnings;
> -      fold_undefer_and_ignore_overflow_warnings ();
>      }
>  }
>
> diff --git a/gcc/flags.h b/gcc/flags.h
> index c92a7bdfa6f..2b744be72a3 100644
> --- a/gcc/flags.h
> +++ b/gcc/flags.h
> @@ -113,9 +113,6 @@ extern class target_flag_state *this_target_flag_state;
>  #define abi_version_at_least(N) \
>    (flag_abi_version == 0 || flag_abi_version >= (N))
>
> -/* Whether to emit an overflow warning whose code is C.  */
> -#define issue_strict_overflow_warning(c) (warn_strict_overflow >= (int) (c))
> -
>  #endif /* ! in target library */
>
>  #endif /* ! GCC_FLAGS_H */
> diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc
> index 352083e146b..fc215828b34 100644
> --- a/gcc/fold-const.cc
> +++ b/gcc/fold-const.cc
> @@ -264,105 +264,6 @@ protected_set_expr_location_unshare (tree x, location_t 
> loc)
>      }
>    return x;
>  }
> -
> -/* This is nonzero if we should defer warnings about undefined
> -   overflow.  This facility exists because these warnings are a
> -   special case.  The code to estimate loop iterations does not want
> -   to issue any warnings, since it works with expressions which do not
> -   occur in user code.  Various bits of cleanup code call fold(), but
> -   only use the result if it has certain characteristics (e.g., is a
> -   constant); that code only wants to issue a warning if the result is
> -   used.  */
> -
> -static int fold_deferring_overflow_warnings;
> -
> -/* If a warning about undefined overflow is deferred, this is the
> -   warning.  Note that this may cause us to turn two warnings into
> -   one, but that is fine since it is sufficient to only give one
> -   warning per expression.  */
> -
> -static const char* fold_deferred_overflow_warning;
> -
> -/* If a warning about undefined overflow is deferred, this is the
> -   level at which the warning should be emitted.  */
> -
> -static enum warn_strict_overflow_code fold_deferred_overflow_code;
> -
> -/* Start deferring overflow warnings.  We could use a stack here to
> -   permit nested calls, but at present it is not necessary.  */
> -
> -void
> -fold_defer_overflow_warnings (void)
> -{
> -  ++fold_deferring_overflow_warnings;
> -}
> -
> -/* Stop deferring overflow warnings.  If there is a pending warning,
> -   and ISSUE is true, then issue the warning if appropriate.  STMT is
> -   the statement with which the warning should be associated (used for
> -   location information); STMT may be NULL.  CODE is the level of the
> -   warning--a warn_strict_overflow_code value.  This function will use
> -   the smaller of CODE and the deferred code when deciding whether to
> -   issue the warning.  CODE may be zero to mean to always use the
> -   deferred code.  */
> -
> -void
> -fold_undefer_overflow_warnings (bool issue, const gimple *stmt, int code)
> -{
> -  const char *warnmsg;
> -  location_t locus;
> -
> -  gcc_assert (fold_deferring_overflow_warnings > 0);
> -  --fold_deferring_overflow_warnings;
> -  if (fold_deferring_overflow_warnings > 0)
> -    {
> -      if (fold_deferred_overflow_warning != NULL
> -         && code != 0
> -         && code < (int) fold_deferred_overflow_code)
> -       fold_deferred_overflow_code = (enum warn_strict_overflow_code) code;
> -      return;
> -    }
> -
> -  warnmsg = fold_deferred_overflow_warning;
> -  fold_deferred_overflow_warning = NULL;
> -
> -  if (!issue || warnmsg == NULL)
> -    return;
> -
> -  if (warning_suppressed_p (stmt, OPT_Wstrict_overflow))
> -    return;
> -
> -  /* Use the smallest code level when deciding to issue the
> -     warning.  */
> -  if (code == 0 || code > (int) fold_deferred_overflow_code)
> -    code = fold_deferred_overflow_code;
> -
> -  if (!issue_strict_overflow_warning (code))
> -    return;
> -
> -  if (stmt == NULL)
> -    locus = input_location;
> -  else
> -    locus = gimple_location (stmt);
> -  warning_at (locus, OPT_Wstrict_overflow, "%s", warnmsg);
> -}
> -
> -/* Stop deferring overflow warnings, ignoring any deferred
> -   warnings.  */
> -
> -void
> -fold_undefer_and_ignore_overflow_warnings (void)
> -{
> -  fold_undefer_overflow_warnings (false, NULL, 0);
> -}
> -
> -/* Whether we are deferring overflow warnings.  */
> -
> -bool
> -fold_deferring_overflow_warnings_p (void)
> -{
> -  return fold_deferring_overflow_warnings > 0;
> -}
>
>  /* Return true if the built-in mathematical function specified by CODE
>     is odd, i.e. -f(x) == f(-x).  */
> diff --git a/gcc/fold-const.h b/gcc/fold-const.h
> index ca464ce60af..592b42c72df 100644
> --- a/gcc/fold-const.h
> +++ b/gcc/fold-const.h
> @@ -99,10 +99,6 @@ extern tree fold_convert_loc (location_t, tree, tree);
>  extern tree fold_ignored_result (tree);
>  extern tree fold_abs_const (tree, tree);
>  extern tree fold_indirect_ref_1 (location_t, tree, tree);
> -extern void fold_defer_overflow_warnings (void);
> -extern void fold_undefer_overflow_warnings (bool, const gimple *, int);
> -extern void fold_undefer_and_ignore_overflow_warnings (void);
> -extern bool fold_deferring_overflow_warnings_p (void);
>  extern enum tree_code fold_div_compare (enum tree_code, tree, tree,
>                                         tree *, tree *, bool *);
>  extern bool operand_equal_p (const_tree, const_tree, unsigned int flags = 0);
> diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc
> index a2f9de53855..effea60f827 100644
> --- a/gcc/gimple-fold.cc
> +++ b/gcc/gimple-fold.cc
> @@ -6723,9 +6723,7 @@ fold_stmt_1 (gimple_stmt_iterator *gsi, bool inplace, 
> tree (*valueize) (tree),
>  {
>    bool changed = false;
>    gimple *stmt = gsi_stmt (*gsi);
> -  bool nowarning = warning_suppressed_p (stmt, OPT_Wstrict_overflow);
>    unsigned i;
> -  fold_defer_overflow_warnings ();
>
>    /* First do required canonicalization of [TARGET_]MEM_REF addresses
>       after propagation.
> @@ -7000,9 +6998,6 @@ fold_stmt_1 (gimple_stmt_iterator *gsi, bool inplace, 
> tree (*valueize) (tree),
>      default:;
>      }
>
> -  stmt = gsi_stmt (*gsi);
> -
> -  fold_undefer_overflow_warnings (changed && !nowarning, stmt, 0);
>    return changed;
>  }
>
> diff --git a/gcc/passes.cc b/gcc/passes.cc
> index 9ec37eeb2a9..a2f0d694b8b 100644
> --- a/gcc/passes.cc
> +++ b/gcc/passes.cc
> @@ -2181,15 +2181,6 @@ execute_todo (unsigned int flags)
>      df_finish_pass ((flags & TODO_df_verify) != 0);
>  }
>
> -/* Verify invariants that should hold between passes.  This is a place
> -   to put simple sanity checks.  */
> -
> -static void
> -verify_interpass_invariants (void)
> -{
> -  gcc_checking_assert (!fold_deferring_overflow_warnings_p ());
> -}

I was going to suggest we keep verify_interpass_invariants but have it empty.
But we already have other places which verify the other invariants in
execute_function_todo via TODO_verify_il which is now done by all
passes now.


> -
>  /* Helper function. Verify that the properties has been turn into the
>     properties expected by the pass.  */
>
> @@ -2338,7 +2329,6 @@ execute_one_ipa_transform_pass (struct cgraph_node 
> *node,
>    /* Run post-pass cleanup.  */
>    gcc_checking_assert (!(todo_after & TODO_verify_il));
>    execute_todo (todo_after);
> -  verify_interpass_invariants ();
>
>    /* Stop timevar.  */
>    if (pass->tv_id != TV_NONE)
> @@ -2714,8 +2704,6 @@ execute_one_pass (opt_pass *pass)
>         }
>      }
>
> -  verify_interpass_invariants ();
> -
>    /* Stop timevar.  */
>    if (pass->tv_id != TV_NONE)
>      timevar_pop (pass->tv_id);
> diff --git a/gcc/tree-cfgcleanup.cc b/gcc/tree-cfgcleanup.cc
> index 85b9a3cedaa..84a40e8d5f1 100644
> --- a/gcc/tree-cfgcleanup.cc
> +++ b/gcc/tree-cfgcleanup.cc
> @@ -173,7 +173,6 @@ cleanup_control_expr_graph (basic_block bb, 
> gimple_stmt_iterator gsi)
>      {
>        edge e;
>        edge_iterator ei;
> -      bool warned;
>        tree val = NULL_TREE;
>
>        /* Try to convert a switch with just a single non-default case to
> @@ -185,7 +184,6 @@ cleanup_control_expr_graph (basic_block bb, 
> gimple_stmt_iterator gsi)
>        if (gimple_code (stmt) == GIMPLE_COND)
>         canonicalize_bool_cond (as_a<gcond*> (stmt), bb);
>
> -      fold_defer_overflow_warnings ();
>        switch (gimple_code (stmt))
>         {
>         case GIMPLE_COND:
> @@ -207,24 +205,13 @@ cleanup_control_expr_graph (basic_block bb, 
> gimple_stmt_iterator gsi)
>         }
>        taken_edge = find_taken_edge (bb, val);
>        if (!taken_edge)
> -       {
> -         fold_undefer_and_ignore_overflow_warnings ();
> -         return false;
> -       }
> +       return false;
>
>        /* Remove all the edges except the one that is always executed.  */
> -      warned = false;
>        for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); )
>         {
>           if (e != taken_edge)
>             {
> -             if (!warned)
> -               {
> -                 fold_undefer_overflow_warnings
> -                   (true, stmt, WARN_STRICT_OVERFLOW_CONDITIONAL);
> -                 warned = true;
> -               }
> -
>               taken_edge->probability += e->probability;
>               remove_edge_and_dominated_blocks (e);
>               retval = true;
> @@ -232,8 +219,6 @@ cleanup_control_expr_graph (basic_block bb, 
> gimple_stmt_iterator gsi)
>           else
>             ei_next (&ei);
>         }
> -      if (!warned)
> -       fold_undefer_and_ignore_overflow_warnings ();
>      }
>    else
>      taken_edge = single_succ_edge (bb);
> diff --git a/gcc/tree-data-ref.cc b/gcc/tree-data-ref.cc
> index e60039b4776..a0c727ff83c 100644
> --- a/gcc/tree-data-ref.cc
> +++ b/gcc/tree-data-ref.cc
> @@ -2676,7 +2676,6 @@ create_runtime_alias_checks (class loop *loop,
>  {
>    tree part_cond_expr;
>
> -  fold_defer_overflow_warnings ();
>    for (const dr_with_seg_len_pair_t &alias_pair : alias_pairs)
>      {
>        gcc_assert (alias_pair.flags);
> @@ -2694,7 +2693,6 @@ create_runtime_alias_checks (class loop *loop,
>        else
>         *cond_expr = part_cond_expr;
>      }
> -  fold_undefer_and_ignore_overflow_warnings ();
>  }
>
>  /* Check if OFFSET1 and OFFSET2 (DR_OFFSETs of some data-refs) are identical
> diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc
> index d9a41c2e135..a9508b0827c 100644
> --- a/gcc/tree-ssa-ccp.cc
> +++ b/gcc/tree-ssa-ccp.cc
> @@ -2263,7 +2263,6 @@ evaluate_stmt (gimple *stmt)
>       not attempt to fold them, including builtins that may profit.  */
>    if (likelyvalue == CONSTANT)
>      {
> -      fold_defer_overflow_warnings ();
>        simplified = ccp_fold (stmt);
>        if (simplified
>           && TREE_CODE (simplified) == SSA_NAME)
> @@ -2275,10 +2274,7 @@ evaluate_stmt (gimple *stmt)
>             {
>               ccp_prop_value_t *val = get_value (simplified);
>               if (val && val->lattice_val != VARYING)
> -               {
> -                 fold_undefer_overflow_warnings (true, stmt, 0);
> -                 return *val;
> -               }
> +               return *val;
>             }
>           else
>             /* We may also not place a non-valueized copy in the lattice
> @@ -2286,7 +2282,6 @@ evaluate_stmt (gimple *stmt)
>             simplified = NULL_TREE;
>         }
>        is_constant = simplified && is_gimple_min_invariant (simplified);
> -      fold_undefer_overflow_warnings (is_constant, stmt, 0);
>        if (is_constant)
>         {
>           /* The statement produced a constant value.  */
> diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc
> index 06eb81b9a28..4fbdaf7c16b 100644
> --- a/gcc/tree-ssa-forwprop.cc
> +++ b/gcc/tree-ssa-forwprop.cc
> @@ -407,13 +407,9 @@ combine_cond_expr_cond (gimple *stmt, enum tree_code 
> code, tree type,
>
>    gcc_assert (TREE_CODE_CLASS (code) == tcc_comparison);
>
> -  fold_defer_overflow_warnings ();
>    t = fold_binary_loc (gimple_location (stmt), code, type, op0, op1);
>    if (!t)
> -    {
> -      fold_undefer_overflow_warnings (false, NULL, 0);
> -      return NULL_TREE;
> -    }
> +    return NULL_TREE;
>
>    /* Require that we got a boolean type out if we put one in.  */
>    gcc_assert (TREE_CODE (TREE_TYPE (t)) == TREE_CODE (type));
> @@ -423,13 +419,7 @@ combine_cond_expr_cond (gimple *stmt, enum tree_code 
> code, tree type,
>
>    /* Bail out if we required an invariant but didn't get one.  */
>    if (!t || (invariant_only && !is_gimple_min_invariant (t)))
> -    {
> -      fold_undefer_overflow_warnings (false, NULL, 0);
> -      return NULL_TREE;
> -    }
> -
> -  bool nowarn = warning_suppressed_p (stmt, OPT_Wstrict_overflow);
> -  fold_undefer_overflow_warnings (!nowarn, stmt, 0);
> +    return NULL_TREE;
>
>    return t;
>  }
> diff --git a/gcc/tree-ssa-loop-niter.cc b/gcc/tree-ssa-loop-niter.cc
> index f179be1ffc7..13b0b5bf201 100644
> --- a/gcc/tree-ssa-loop-niter.cc
> +++ b/gcc/tree-ssa-loop-niter.cc
> @@ -2842,9 +2842,7 @@ expand_simple_operations (tree expr, tree stop, 
> hash_map<tree, tree> &cache)
>        if (!ret)
>         return expr;
>
> -      fold_defer_overflow_warnings ();
>        ret = fold (ret);
> -      fold_undefer_and_ignore_overflow_warnings ();
>        return ret;
>      }
>
> @@ -3288,10 +3286,6 @@ number_of_iterations_exit_assumptions (class loop 
> *loop, edge exit,
>    if (iv0_niters && iv1_niters)
>      return false;
>
> -  /* We don't want to see undefined signed overflow warnings while
> -     computing the number of iterations.  */
> -  fold_defer_overflow_warnings ();
> -
>    iv0.base = expand_simple_operations (iv0.base);
>    iv1.base = expand_simple_operations (iv1.base);
>    bool body_from_caller = true;
> @@ -3306,7 +3300,6 @@ number_of_iterations_exit_assumptions (class loop 
> *loop, edge exit,
>    if (!number_of_iterations_cond (loop, type, &iv0, code, &iv1, niter,
>                                   only_exit_p, safe))
>      {
> -      fold_undefer_and_ignore_overflow_warnings ();
>        return false;
>      }
>
> @@ -3349,8 +3342,6 @@ number_of_iterations_exit_assumptions (class loop 
> *loop, edge exit,
>           = simplify_using_initial_conditions (loop,
>                                                niter->may_be_zero);
>
> -  fold_undefer_and_ignore_overflow_warnings ();
> -
>    /* If NITER has simplified into a constant, update MAX.  */
>    if (TREE_CODE (niter->niter) == INTEGER_CST)
>      niter->max = wi::to_widest (niter->niter);
> @@ -3747,9 +3738,6 @@ loop_niter_by_eval (class loop *loop, edge exit)
>         }
>      }
>
> -  /* Don't issue signed overflow warnings.  */
> -  fold_defer_overflow_warnings ();
> -
>    for (i = 0; i < MAX_ITERATIONS_TO_TRACK; i++)
>      {
>        for (j = 0; j < 2; j++)
> @@ -3758,7 +3746,6 @@ loop_niter_by_eval (class loop *loop, edge exit)
>        acnd = fold_binary (cmp, boolean_type_node, aval[0], aval[1]);
>        if (acnd && integer_zerop (acnd))
>         {
> -         fold_undefer_and_ignore_overflow_warnings ();
>           if (dump_file && (dump_flags & TDF_DETAILS))
>             fprintf (dump_file,
>                      "Proved that loop %d iterates %d times using brute 
> force.\n",
> @@ -3771,10 +3758,7 @@ loop_niter_by_eval (class loop *loop, edge exit)
>           aval[j] = val[j];
>           val[j] = get_val_for (next[j], val[j]);
>           if (!is_gimple_min_invariant (val[j]))
> -           {
> -             fold_undefer_and_ignore_overflow_warnings ();
> -             return chrec_dont_know;
> -           }
> +           return chrec_dont_know;
>         }
>
>        /* If the next iteration would use the same base values
> @@ -3784,8 +3768,6 @@ loop_niter_by_eval (class loop *loop, edge exit)
>         break;
>      }
>
> -  fold_undefer_and_ignore_overflow_warnings ();
> -
>    return chrec_dont_know;
>  }
>
> @@ -5242,14 +5224,8 @@ estimated_stmt_executions (class loop *loop, 
> widest_int *nit)
>  void
>  estimate_numbers_of_iterations (function *fn)
>  {
> -  /* We don't want to issue signed overflow warnings while getting
> -     loop iteration estimates.  */
> -  fold_defer_overflow_warnings ();
> -
>    for (auto loop : loops_list (fn, 0))
>      estimate_numbers_of_iterations (loop);
> -
> -  fold_undefer_and_ignore_overflow_warnings ();
>  }
>
>  /* Returns true if statement S1 dominates statement S2.  */
> @@ -5394,9 +5370,6 @@ loop_exits_before_overflow (tree base, tree step,
>    tree type = TREE_TYPE (step);
>    tree unsigned_type, valid_niter;
>
> -  /* Don't issue signed overflow warnings.  */
> -  fold_defer_overflow_warnings ();
> -
>    /* Compute the number of iterations before we reach the bound of the
>       type, and verify that the loop is exited before this occurs.  */
>    unsigned_type = unsigned_type_for (type);
> @@ -5428,20 +5401,13 @@ loop_exits_before_overflow (tree base, tree step,
>                            wide_int_to_tree (TREE_TYPE (valid_niter),
>                                              niter))) != NULL
>        && integer_nonzerop (e))
> -    {
> -      fold_undefer_and_ignore_overflow_warnings ();
> -      return true;
> -    }
> +    return true;
>    if (at_stmt)
>      for (bound = loop->bounds; bound; bound = bound->next)
>        {
>         if (n_of_executions_at_most (at_stmt, bound, valid_niter))
> -         {
> -           fold_undefer_and_ignore_overflow_warnings ();
> -           return true;
> -         }
> +         return true;
>        }
> -  fold_undefer_and_ignore_overflow_warnings ();
>
>    /* Try to prove loop is exited before {base, step} overflows with the
>       help of analyzed loop control IV.  This is done only for IVs with
> diff --git a/gcc/tree-ssa-threadedge.cc b/gcc/tree-ssa-threadedge.cc
> index 9fc0c5ed2a2..3996730d937 100644
> --- a/gcc/tree-ssa-threadedge.cc
> +++ b/gcc/tree-ssa-threadedge.cc
> @@ -500,18 +500,11 @@ jump_threader::simplify_control_stmt_condition_1
>    gimple_cond_set_lhs (dummy_cond, op0);
>    gimple_cond_set_rhs (dummy_cond, op1);
>
> -  /* We absolutely do not care about any type conversions
> -     we only care about a zero/nonzero value.  */
> -  fold_defer_overflow_warnings ();
> -
>    tree res = fold_binary (cond_code, boolean_type_node, op0, op1);
>    if (res)
>      while (CONVERT_EXPR_P (res))
>        res = TREE_OPERAND (res, 0);
>
> -  fold_undefer_overflow_warnings ((res && is_gimple_min_invariant (res)),
> -                                 stmt, WARN_STRICT_OVERFLOW_CONDITIONAL);
> -
>    /* If we have not simplified the condition down to an invariant,
>       then use the pass specific callback to simplify the condition.  */
>    if (!res
> diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc
> index a112e5e1be2..4b09f18126b 100644
> --- a/gcc/tree-vrp.cc
> +++ b/gcc/tree-vrp.cc
> @@ -670,27 +670,18 @@ compare_values (tree val1, tree val2)
>        if (operand_equal_p (val1, val2, 0))
>         return 0;
>
> -      fold_defer_overflow_warnings ();
> -
>        /* If VAL1 is a lower address than VAL2, return -1.  */
>        tree t = fold_binary_to_constant (LT_EXPR, boolean_type_node, val1, 
> val2);
>        if (t && integer_onep (t))
> -       {
> -         fold_undefer_and_ignore_overflow_warnings ();
> -         return -1;
> -       }
> +       return -1;
>
>        /* If VAL1 is a higher address than VAL2, return +1.  */
>        t = fold_binary_to_constant (LT_EXPR, boolean_type_node, val2, val1);
>        if (t && integer_onep (t))
> -       {
> -         fold_undefer_and_ignore_overflow_warnings ();
> -         return 1;
> -       }
> +       return 1;
>
>        /* If VAL1 is different than VAL2, return +2.  */
>        t = fold_binary_to_constant (NE_EXPR, boolean_type_node, val1, val2);
> -      fold_undefer_and_ignore_overflow_warnings ();
>        if (t && integer_onep (t))
>         return 2;
>
> --
> 2.43.0
>

Reply via email to