http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49161
Summary: [4.5/4.6/4.7 Regression] Fix VRP on switch stmts Product: gcc Version: 4.6.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: tree-optimization AssignedTo: ja...@gcc.gnu.org ReportedBy: ja...@gcc.gnu.org The following testcase is miscompiled at -O2 on x86_64/i686, starting with: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=155937 extern void abort (void); int c; __attribute__((noinline, noclone)) void bar (int x) { if (x != c++) abort (); } __attribute__((noinline, noclone)) void foo (int x) { switch (x) { case 3: goto l1; case 4: goto l2; case 6: goto l3; default: return; } l1: goto l4; l2: goto l4; l3: bar (-1); l4: bar (0); if (x != 4) bar (1); if (x != 3) bar (-1); bar (2); } int main () { foo (3); if (c != 3) abort (); return 0; }