On Wed, May 27, 2026 at 5:51 AM Daniel Barboza <[email protected]> wrote: > > Hello, > > This is a follow-up of the merged series [1] where we started the > process to deprecate -Wstrict-overflow. I'll copy/paste the motivations > for this effort from [1] for easier reference: > > "The idea from this work is inspired by Bugzilla 80511, suggested by > Andrew in > > https://gcc.gnu.org/pipermail/gcc-patches/2026-January/705746.html > > and also by Richard comments about the current state of Wstrict-overflow > here: > > https://gcc.gnu.org/pipermail/gcc-patches/2026-January/705482.html > > '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).' " > > In this series the idea is to deprecate -Wstrict-overflow by removing > all its remaining logic, any related testcases and make the option a > no-op (does nothing if set). > > Note that "Wstrict-overflow" and variants are still greppable in the > code, in particular because we can't just remove the option entirely. > If there's something else that we should be removing let me know and I'm > happy to shave off more lines. > > Bootstrapped and regtested on x86_64 and aarch64. > > [1] https://gcc.gnu.org/pipermail/gcc-patches/2026-January/706112.html
There is one main thing missing from this set of patches; an update to the docs; doc/invoke.texi needs an update. Also note this warning option has actually been deprecated since GCC 8, from https://gcc.gnu.org/gcc-8/changes.html : -fno-strict-overflow is now mapped to -fwrapv -fwrapv-pointer and signed integer overflow is now undefined by default at all optimization levels. Using -fsanitize=signed-integer-overflow is now the preferred way to audit code, -Wstrict-overflow is deprecated. Maybe not the most obvious place for the deprecation but it was there. https://gcc.gnu.org/cgit/gcc-wwwdocs/commit/htdocs/gcc-8/changes.html?id=d2b33d4e76103b54336dd1198aa5a84b11cc29e3 Thanks, Andrea > > Daniel Barboza (8): > tree-ssa-reassoc: remove strict_overflow_p from range_entry > tree-vrp: remove compare_values_warnv () > gcc/expr.cc: remove Wstrict-overflow from maybe_optimize_sub_cmp_0 > tree-ssa-loop-ch.cc remove strict_overflow logic > gcc/fold-const: remove fold_*_overflow_warnings > testsuite: remove all Wstrict-overflow tests > testsuite: remove Wstrict-overflow related tests > gcc: deprecate -Wstrict-overflow > > gcc/c-family/c-common.cc | 10 --- > gcc/c/c-fold.cc | 2 - > gcc/common.opt | 2 +- > gcc/coretypes.h | 24 ------ > gcc/expr.cc | 6 -- > gcc/flags.h | 3 - > gcc/fold-const.cc | 99 ---------------------- > gcc/fold-const.h | 4 - > gcc/gimple-fold.cc | 5 -- > gcc/opts.cc | 4 +- > gcc/passes.cc | 12 --- > gcc/testsuite/gcc.dg/Wstrict-overflow-10.c | 10 --- > gcc/testsuite/gcc.dg/Wstrict-overflow-11.c | 19 ----- > gcc/testsuite/gcc.dg/Wstrict-overflow-12.c | 16 ---- > gcc/testsuite/gcc.dg/Wstrict-overflow-13.c | 18 ---- > gcc/testsuite/gcc.dg/Wstrict-overflow-14.c | 15 ---- > gcc/testsuite/gcc.dg/Wstrict-overflow-15.c | 15 ---- > gcc/testsuite/gcc.dg/Wstrict-overflow-16.c | 11 --- > gcc/testsuite/gcc.dg/Wstrict-overflow-17.c | 20 ----- > gcc/testsuite/gcc.dg/Wstrict-overflow-18.c | 23 ----- > gcc/testsuite/gcc.dg/Wstrict-overflow-19.c | 15 ---- > gcc/testsuite/gcc.dg/Wstrict-overflow-2.c | 13 --- > gcc/testsuite/gcc.dg/Wstrict-overflow-20.c | 15 ---- > gcc/testsuite/gcc.dg/Wstrict-overflow-21.c | 12 --- > gcc/testsuite/gcc.dg/Wstrict-overflow-23.c | 31 ------- > gcc/testsuite/gcc.dg/Wstrict-overflow-25.c | 11 --- > gcc/testsuite/gcc.dg/Wstrict-overflow-26.c | 16 ---- > gcc/testsuite/gcc.dg/Wstrict-overflow-27.c | 28 ------ > gcc/testsuite/gcc.dg/Wstrict-overflow-4.c | 13 --- > gcc/testsuite/gcc.dg/Wstrict-overflow-6.c | 13 --- > gcc/testsuite/gcc.dg/Wstrict-overflow-7.c | 10 --- > gcc/testsuite/gcc.dg/Wstrict-overflow-8.c | 10 --- > gcc/testsuite/gcc.dg/pr36227.c | 14 --- > gcc/testsuite/gcc.dg/pr48022-1.c | 14 --- > gcc/testsuite/gcc.dg/pr48022-2.c | 11 --- > gcc/testsuite/gcc.dg/pr49705.c | 19 ----- > gcc/testsuite/gcc.dg/pr52904.c | 20 ----- > gcc/testsuite/gcc.dg/pr81592.c | 2 +- > gcc/testsuite/gcc.dg/pragma-diag-3.c | 19 +---- > 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-ch.cc | 44 ---------- > gcc/tree-ssa-loop-niter.cc | 40 +-------- > gcc/tree-ssa-reassoc.cc | 45 ++-------- > gcc/tree-ssa-reassoc.h | 1 - > gcc/tree-ssa-threadedge.cc | 7 -- > gcc/tree-vrp.cc | 44 +--------- > gcc/tree-vrp.h | 1 - > gcc/vr-values.cc | 11 +-- > 51 files changed, 25 insertions(+), 812 deletions(-) > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-10.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-11.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-12.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-13.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-14.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-15.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-16.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-17.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-18.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-19.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-2.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-20.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-21.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-23.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-25.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-26.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-27.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-4.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-6.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-7.c > delete mode 100644 gcc/testsuite/gcc.dg/Wstrict-overflow-8.c > delete mode 100644 gcc/testsuite/gcc.dg/pr36227.c > delete mode 100644 gcc/testsuite/gcc.dg/pr48022-1.c > delete mode 100644 gcc/testsuite/gcc.dg/pr48022-2.c > delete mode 100644 gcc/testsuite/gcc.dg/pr49705.c > delete mode 100644 gcc/testsuite/gcc.dg/pr52904.c > > -- > 2.43.0 >
