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]>
