https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114700
Bug ID: 114700 Summary: Front-end optimization generates wrong code with -ftrapv. Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: lin1.hu at intel dot com Target Milestone: --- We test GCC vs Clang with -ftrapv, and test is z = c - y - c + a + y - b; https://godbolt.org/z/EW1xTsazG We think the clang is right, the overflow judgment should be performed after each operation. But the front-end generates a - b directly, looks like there's a bug in the front-end's handling of -ftrapv. -ftrapv This option generates traps for signed overflow on addition, subtraction, multiplication operations. The options -ftrapv and -fwrapv override each other, so using -ftrapv -fwrapv on the command-line results in -fwrapv being effective. Note that only active options override, so using -ftrapv -fwrapv -fno-wrapv on the command-line results in -ftrapv being effective. We have another question, we found the front-end won't optimize z = c - y + a - c, while z = c - y - c + a will, is this for any particular reason or is it a bug?