http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50189
Bug #: 50189 Summary: Wrong code error in -O2 compile, target independent Classification: Unclassified Product: gcc Version: unknown Status: UNCONFIRMED Severity: major Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: pkon...@gcc.gnu.org Created attachment 25105 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=25105 Test program The attached test program compiles to wrong code with GCC 4.5.3 (and 4.5.1) when compiled -O2. GCC 4.6.1 gets it right. I did some digging and determined that the problem shows up in the -fdump-tree-all output in the .068t.vrp1 dump file; the preceding file (.067.mergephi2) is correct. In the generated code that corresponds to the check_pos method, the second compare "if (m_timestamp != a_timestamp)" is transformed into "if (3 == a_timestamp)". If m_timestamp were of time position_t (an enum of range 0..3) that would be correct, but m_timestamp is an unsigned int so it can, and in our application does, have values larger than 3.