https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106885
Bug ID: 106885 Summary: -(a-b) is folded to b-a before the UBSAN pass is run Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: sanitizer Assignee: unassigned at gcc dot gnu.org Reporter: kristerw at gcc dot gnu.org CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org, jakub at gcc dot gnu.org, kcc at gcc dot gnu.org, marxin at gcc dot gnu.org Target Milestone: --- GCC is folding -(a-b) to b-a before the UBSAN pass is run, which may hide undefined behavior from the sanitizer. This can be seen by the following program, which invokes undefined behavior that is not detected by -fsanitize=undefined int main(void) { volatile int a = 0; volatile int b = 0x80000000; return -(a - b); }