[Bug middle-end/91450] __builtin_mul_overflow(A,B,R) wrong code if product < 0, *R is unsigned, and !(A&B)

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Nov 19 09:27:00 GMT 2019


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

--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Author: jakub
Date: Tue Nov 19 09:26:23 2019
New Revision: 278438

URL: https://gcc.gnu.org/viewcvs?rev=278438&root=gcc&view=rev
Log:
        PR middle-end/91450
        * internal-fn.c (expand_mul_overflow): For s1 * s2 -> ur, if one
        operand is negative and one non-negative, compare the non-negative
        one against 0 rather than comparing s1 & s2 against 0.  Otherwise,
        don't compare (s1 & s2) == 0, but compare separately both s1 == 0
        and s2 == 0, unless one of them is known to be negative.  Remove
        tem2 variable, use tem where tem2 has been used before.

        * gcc.c-torture/execute/pr91450-1.c: New test.
        * gcc.c-torture/execute/pr91450-2.c: New test.

Added:
    branches/gcc-9-branch/gcc/testsuite/gcc.c-torture/execute/pr91450-1.c
    branches/gcc-9-branch/gcc/testsuite/gcc.c-torture/execute/pr91450-2.c
Modified:
    branches/gcc-9-branch/gcc/ChangeLog
    branches/gcc-9-branch/gcc/internal-fn.c
    branches/gcc-9-branch/gcc/testsuite/ChangeLog


More information about the Gcc-bugs mailing list