- changed status to resolved
Stackmap frame error in constructor
Issue #245
resolved
ExtendJ 8.0.1-243-g89c6ce2 Java SE 8
ExtendJ generates incorrect stackmap frames for the default constructor in the following test:
public class Test { int sum; Test() { this(0x523, 0x941, 0x22); if (sum == 3718) { System.out.println("pass"); } } Test(int x) { sum = x; } Test(int x, int y) { this(x); sum += y; } Test(int x, int y, int z) { this(x, y); sum += z; } public static void main(String[] args) { new Test(); } }
Expected result: should print "pass".
Actual result: runtime error:
[junit] [FAIL] runTest[codegen/smf_03p](tests.extendj.TestJava7) [junit] Error output files differ expected:<[]> but was:<[Error: A JNI error has occurred, please check your installation and try again [junit] Exception in thread "main" java.lang.VerifyError: Inconsistent stackmap frames at branch target 30 [junit] Exception Details: [junit] Location: [junit] Test.<init>()V @30: return [junit] Reason: [junit] Type 'Test' (current frame, locals[0]) is not assignable to uninitializedThis (stack map, locals[0]) [junit] Current Frame: [junit] bci: @19 [junit] flags: { } [junit] locals: { 'Test' } [junit] stack: { integer, integer } [junit] Stackmap Frame: [junit] bci: @30 [junit] flags: { flagThisUninit } [junit] locals: { uninitializedThis } [junit] stack: { }
Comments (1)
-
reporter - Log in to comment
Fix error in constructor stackmap construction
The this reference was not always marked as initialized in constructors.
fixes
#245(bitbucket)→ <<cset cf8e8d95c006>>