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

            Bug ID: 102922
           Summary: [12 Regression] Wrong code at -O3 caused by
                    r12-4625-gfe8475c500939011
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: marxin at gcc dot gnu.org
                CC: rguenth at gcc dot gnu.org
  Target Milestone: ---

The following is miscompiled:

$ cat driver.cpp
long long int var1, var2;

void
__attribute__((noipa))
test(bool cond, bool cond2, signed char val) {
  for (unsigned i = 0; i < 1; i++)
    for (signed j = 0; j < 1; j++)
      if (cond) {
        for (int i_44 = 0; i_44 < 100; i_44++)
          if (cond2)
            var1 = (bool)val;
          else
            var2 = (bool)val;
      }
}

int main() {
  test(true, true, 1);
  if (var1 != 1)
    __builtin_abort ();
  return 0;
}

$ g++ driver.cpp -O3 && ./a.out
Aborted (core dumped)

Reply via email to