https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125588

--- Comment #9 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Andrew Pinski <[email protected]>:

https://gcc.gnu.org/g:7ec15f8a0b357e33a9c93ad25e4401dd75b7d466

commit r17-1280-g7ec15f8a0b357e33a9c93ad25e4401dd75b7d466
Author: Andrew Pinski <[email protected]>
Date:   Wed Jun 3 17:18:56 2026 -0700

    match: Disable `if (cond) (A | CST1) : (A & ~CST1)` pattern for non-GIMPLE
[PR125588]

    r17-265-gf6f33ca83cb6b8 added a new pattern that converts:
    cond ? (A | CST1) : (A & ~CST1)
    into `(A & ~CST1) | (cond * CST1)` but fold (partly via
    fold_binary_op_with_conditional_arg) will turn
    that back into `cond ? (A | CST1) : (A & ~CST1)` in some
    cases. In those cases we get an infinite loop and a stack overflow crash.

    This fixes the problem by enabling this pattern for GIMPLE only.

    Pushed as obvious after bootstrap/test on x86_64-linux-gnu.

            PR middle-end/125588

    gcc/ChangeLog:

            * match.pd (`if (cond) (A | CST1) : (A & ~CST1)`): Enable
            for GIMPLE only.

    gcc/testsuite/ChangeLog:

            * gcc.dg/pr125588-1.c: New test.

    Signed-off-by: Andrew Pinski <[email protected]>

Reply via email to