This is a RFC mostly.
There are false positives from the unreachable code check when the block numbers in the ExplodedGraph and CFG mismatch.
If it should be allowed that they mismatch then this patch can handle such situations.
If the block numbers should match, then I'll investigate why they mismatch. Is it guaranteed what block numbers there will be for the CFG blocks for such code:
void test12(int x) { switch (x) { case 1: break; case 2: do { } while (0); break; } }
If so.. what is the correct block numbers?
You need to keep this check so that the optimized CFG still removes edges that are trivially known to be false.