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

--- Comment #10 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Richard Biener <rgue...@gcc.gnu.org>:

https://gcc.gnu.org/g:b07f8a301158e53717b8688cc8ea430b6f02574c

commit r15-3087-gb07f8a301158e53717b8688cc8ea430b6f02574c
Author: Andrew Pinski <quic_apin...@quicinc.com>
Date:   Wed Aug 21 17:41:38 2024 -0700

    fold: Fix `a * 1j` if a has side effects [PR116454]

    The problem here was a missing save_expr around arg0 since
    it is used twice, once in REALPART_EXPR and once in IMAGPART_EXPR.
    Thia adds the save_expr and reformats the code slightly so it is a
    little easier to understand.  It excludes the case when arg0 is
    a COMPLEX_EXPR since in that case we'll end up with the distinct
    real and imaginary parts.  This is important to retain early
    optimization in some testcases.

    Bootstapped and tested on x86_64-linux-gnu with no regressions.

            PR middle-end/116454

    gcc/ChangeLog:

            * fold-const.cc (fold_binary_loc): Fix `a * +-1i`
            by wrapping arg0 with save_expr when it is not COMPLEX_EXPR.

    gcc/testsuite/ChangeLog:

            * gcc.dg/torture/pr116454-1.c: New test.
            * gcc.dg/torture/pr116454-2.c: New test.

    Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>
    Co-Authored-By: Richard Biener  <rguent...@suse.de>

Reply via email to