[Bug middle-end/126775] [17 Regression] ICE: tree check: expected real_cst, have vector_cst in generic_simplify_MINUS_EXPR, at generic-match-6.cc:7470 with -ffinite-math-only since r17-3158

"cvs-commit at gcc dot gnu.org via Gcc-bugs" <[email protected]>
Newsgroups gmane.comp.gcc.bugs
Message-ID <[email protected]/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126775

--- Comment #4 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Roger Sayle <[email protected]>:

https://gcc.gnu.org/g:579349b0f12681ffcbfd14eafe6efdc8da67a1f2

commit r17-3466-g579349b0f12681ffcbfd14eafe6efdc8da67a1f2
Author: Roger Sayle <[email protected]>
Date:   Thu Aug 20 09:31:48 2026 +0100

    PR middle-end/126775: ICE optimizing (T)0.0 - x with -ffinite-math-only

    This patch fixes PR middle-end/126775, an ICE caused by my recent change
    to match.pd around tweaking the conditions under which 0.0 - x can
    safely be transformed into -x.  Unfortunately, that change assumed
    that real_zerop@0 implies that TREE_CODE(@0) == REAL_CST.  Alas things
    aren't that simple, so this fix introduces a new real_negzerop predicate
    that in addition to REAL_CST also handles VECTOR_CST and COMPLEX_CST,
    and most importantly fails gracefully on TREE_CODEs that it isn't
    expecting.

    2026-08-20  Roger Sayle  <[email protected]>

    gcc/ChangeLog
            PR middle-end/126775
            * match.pd (0.0 - x -> -x): Use new real_negzerop function.
            * tree.cc (real_negzerop): New predicate function to test if
            a tree expression is -0.0 or equivalent (like real_zerop).
            * tree.h (real_negzerop): Prototype here.

    gcc/testsuite/ChangeLog
            PR middle-end/126775
            * gcc.dg/pr126775.c: New test case.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.