|
|
@ -850,8 +850,16 @@ public class TransformExceptionHandlers { |
|
|
|
FlowBlock catchFlow = flows[handlerPCs[i]]; |
|
|
|
FlowBlock catchFlow = flows[handlerPCs[i]]; |
|
|
|
while (catchFlow.analyze(handlerPCs[i], endHandler)); |
|
|
|
while (catchFlow.analyze(handlerPCs[i], endHandler)); |
|
|
|
|
|
|
|
|
|
|
|
if (!catchFlow.predecessors.isEmpty()) |
|
|
|
if (!catchFlow.predecessors.isEmpty()) { |
|
|
|
throw new AssertError("Handler has a predecessors"); |
|
|
|
/* This can actually happen, namely in code compiled by |
|
|
|
|
|
|
|
* jikes. In this case the predecessor is a nop and has |
|
|
|
|
|
|
|
* no further predecessors. |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
if (catchFlow.predecessors.size() != 1 |
|
|
|
|
|
|
|
&& ((FlowBlock)catchFlow.predecessors.elementAt(0)) |
|
|
|
|
|
|
|
.predecessors.size() != 0) |
|
|
|
|
|
|
|
throw new AssertError("Handler has a predecessors"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
updateInOutCatch(tryFlow, catchFlow); |
|
|
|
updateInOutCatch(tryFlow, catchFlow); |
|
|
|
if (types[i] != null) |
|
|
|
if (types[i] != null) |
|
|
|