- changed status to resolved
Broken bytecode in nested try statements
Issue #241
resolved
ExtendJ 8.0.1-239-g7ed3ac9 Java SE 8
There is an error in deleting unreachable blocks during code generation that corrupts an instruction after a deleted block.
public class N6 {
public static void main(String[] args) {
run(1);
run(2);
}
static void run(int i) {
int target = 0;
Outer:
{
target |= 1;
try {
try {
target |= 2;
if (i < 2)
break Outer;
target |= 4;
} finally {
target |= 8;
break Outer;
}
} finally {
target |= 16;
}
}
target |= 32;
System.out.println(Integer.toString(target, 2));
}
}
Expected result: should print "111011", "111111"
Actual result:
Exception in thread "main" java.lang.VerifyError: Operand stack underflow
Exception Details:
Location:
N6.run(I)V @30: laload
Reason:
Comments (1)
-
reporter - Log in to comment
Avoid patching jumps in deleted blocks
It is not safe to patch a jump in a deleted block. This adds a reference to the source block for jumps so that they are not patched if the source block is deleted.
fixes
#241(bitbucket)→ <<cset 7a74d02ef487>>