On Tue, Jan 13, 2026 at 3:16 AM Daniel Barboza
<[email protected]> wrote:
>
> During ML discussions of a match.pd pattern that was introducing a new
> instance of 'warn_strict_overflow', Richard mentioned that this use
> should be discouraged [1]. After pointing out that this usage was
> documented in tree.h he then explained that we should remove the note
> from the header [2]. Here's the reasoning:
>
> "Ah, we should remove that note.  -Wstrict-overflow proved useless IMO,
> it's way too noisy as it diagnoses when the compiler relies on overflow
> not happening, not diagnosing when it possibly happens.  That's not a
> very useful diagnostic to have - it does not point to a possible problem
> in the code (we could as well diagnose _all_ signed arithmetic
> operations for the same argument that we might eventually rely on
> overflow not happening)."
>
> Aside from removing the tree.h node we're also removing the 2 references
> in match.pd. match.pd patterns tend to be copied around to serve as a
> base for new patterns (like I did in [3] adding a
> 'fold_overflow_warning'), and if we want to discourage the use avoiding
> its spread is a good start.
>
> Note that there are a lot of references left, most of them in
> gcc/fold-const.cc. Some references are using in nested helpers inside
> the file, entangled with code that does other things. Removing all
> references from the project is out of scope for this quick patch.
>
> [1] https://gcc.gnu.org/pipermail/gcc-patches/2026-January/705320.html
> [2] https://gcc.gnu.org/pipermail/gcc-patches/2026-January/705482.html
> [3] https://gcc.gnu.org/pipermail/gcc-patches/2026-January/704992.html
>
> gcc/ChangeLog:
>
>         * match.pd: remove 'fold_overflow_warning' references.
>         * tree.h (TYPE_OVERFLOW_UNDEFINED): remove note telling
>           that we must use warn_strict_overflow for every optimization
>           based on TYPE_OVERFLOW_UNDEFINED.
>
> Signed-off-by: Daniel Barboza <[email protected]>
> ---
>  gcc/match.pd                              | 12 +-----------
>  gcc/testsuite/gcc.dg/Wstrict-overflow-1.c | 13 -------------

Since you are doing some cleanup with respect to -Wstrict-overflow.
You want to handle https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80511
?
In that bug report case I think it is only the testcases that need to
be cleaned up.

Thanks,
Andrew

>  gcc/tree.h                                |  8 +-------
>  3 files changed, 2 insertions(+), 31 deletions(-)
>  delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-1.c
>
> diff --git a/gcc/match.pd b/gcc/match.pd
> index 08d0810e986..a06a26a93d7 100644
> --- a/gcc/match.pd
> +++ b/gcc/match.pd
> @@ -9824,9 +9824,6 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
>      (with { tree res = int_const_binop (rop, @2, @1); }
>       (if (TREE_OVERFLOW (res))
>        {
> -       fold_overflow_warning (("assuming signed overflow does not occur "
> -                               "when simplifying conditional to constant"),
> -                              WARN_STRICT_OVERFLOW_CONDITIONAL);
>          bool less = cmp == LE_EXPR || cmp == LT_EXPR;
>         /* wi::ges_p (@2, 0) should be sufficient for a signed type.  */
>         bool ovf_high = wi::lt_p (wi::to_wide (@1), 0,
> @@ -9835,14 +9832,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
>         constant_boolean_node (less == ovf_high, type);
>        }
>        (if (single_use (@3))
> -       (with
> -       {
> -         fold_overflow_warning (("assuming signed overflow does not occur "
> -                                 "when changing X +- C1 cmp C2 to "
> -                                 "X cmp C2 -+ C1"),
> -                                WARN_STRICT_OVERFLOW_COMPARISON);
> -       }
> -       (cmp @0 { res; })))))
> +       (cmp @0 { res; }))))
>  /* For wrapping types, simplify the following cases of X +- C1 CMP C2:
>
>     (a) If CMP is <= and C2 -+ C1 == +INF (1), simplify to X >= -INF -+ C1
> diff --git a/gcc/testsuite/gcc.dg/Wstrict-overflow-1.c 
> b/gcc/testsuite/gcc.dg/Wstrict-overflow-1.c
> deleted file mode 100644
> index 068bfe49446..00000000000
> --- a/gcc/testsuite/gcc.dg/Wstrict-overflow-1.c
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -/* { dg-do compile } */
> -/* { dg-options "-fstrict-overflow -O2 -Wstrict-overflow=3" } */
> -
> -/* Source: Ian Lance Taylor.  Based on strict-overflow-1.c.  */
> -
> -/* We can only simplify the conditional when using strict overflow
> -   semantics.  */
> -
> -int
> -foo (int i)
> -{
> -  return i - 5 < 10; /* { dg-warning "assuming signed overflow does not 
> occur" "correct warning" } */
> -}
> diff --git a/gcc/tree.h b/gcc/tree.h
> index 120f37ba0db..1adc66336d3 100644
> --- a/gcc/tree.h
> +++ b/gcc/tree.h
> @@ -974,13 +974,7 @@ extern void omp_clause_range_check_failed (const_tree, 
> const char *, int,
>        || flag_wrapv))
>
>  /* True if overflow is undefined for the given integral or pointer type.
> -   We may optimize on the assumption that values in the type never overflow.
> -
> -   IMPORTANT NOTE: Any optimization based on TYPE_OVERFLOW_UNDEFINED
> -   must issue a warning based on warn_strict_overflow.  In some cases
> -   it will be appropriate to issue the warning immediately, and in
> -   other cases it will be appropriate to simply set a flag and let the
> -   caller decide whether a warning is appropriate or not.  */
> +   We may optimize on the assumption that values in the type never overflow. 
>  */
>  #define TYPE_OVERFLOW_UNDEFINED(TYPE)                          \
>    (POINTER_TYPE_P (TYPE)                                       \
>     ? !flag_wrapv_pointer                                       \
> --
> 2.43.0
>

Reply via email to