http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49217

           Summary: Wrong optimization of code
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: perso...@e-maxx.ru


Created attachment 24387
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=24387
The program demostrating the bug (should return 0 if OK, but throws in case of
wrong optimization)

A bug in gcc 4.6.0 optimizer leads to incorrect program flow.

It looks like this exact bug is difficult to reproduce in small program, so the
attached program is a result of my minimization.

The bug requires quite complex environment: recursive function, std::vector,
std::vector::iterator, zeroing the global array, unreachable 'else'.

Though, I think, the main idea of the program is not so difficult: we call
DFS(0), it calls DFS(1), and as a result both 0 and 1 are marked as visited, so
the number of calls of DFS() from main() is equal to one. But in g++ 4.6.0 with
-O2 that's not true (it looks like DFS(0) never calls DFS(1), but that's my
hypothesis).

Inserting cerr or cout into some places of DFS makes the program work fine.

Reply via email to