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

            Bug ID: 106990
           Summary: Missing TYPE_OVERFLOW_SANITIZED checks in match.pd
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: kristerw at gcc dot gnu.org
  Target Milestone: ---

When UBSan is used, match.pd disables simplifications that can remove UB. But
two simplifications are missing TYPE_OVERFLOW_SANITIZED checks, making the two
tests below fail to report UB when compiled with -fsanitize=undefined.

/* (~X - ~Y) -> Y - X.  */
int main(void)
{
  volatile int x = -1956816001;
  volatile int y = 1999200512;
  return ~x - ~y;
}

/* -x & 1 -> x & 1.  */
int main(void)
{
  volatile int x = 0x80000000;
  return -x & 1;
}

Reply via email to