[jboss-jira] [JBoss JIRA] (JASSIST-262) Class compilation error

Alexey Kuznetsov (JIRA) issues at jboss.org
Fri Apr 22 12:01:00 EDT 2016


Alexey Kuznetsov created JASSIST-262:
----------------------------------------

             Summary: Class compilation error
                 Key: JASSIST-262
                 URL: https://issues.jboss.org/browse/JASSIST-262
             Project: Javassist
          Issue Type: Bug
    Affects Versions: 3.20.0-GA
         Environment: org.javassist:javassist:3.20.0-GA
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
Linux 3.13.0-37-generic #64-Ubuntu SMP x86_64 GNU/Linux
            Reporter: Alexey Kuznetsov
            Assignee: Shigeru Chiba


{code:java}
package com.company;

import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;

public class Main {
    public static void main(String[] args) {
        CtClass badClass = ClassPool.getDefault().makeClass("badClass");
        String src = String.join(System.getProperty("line.separator"),
                "public void eval () {",
                "    if (true) {",
                "        double t=0;",
                "    } else {",
                "        double t=0;",
                "    }",
                "    for (int i=0; i < 2; i++) {",
                "        int a=0;",
                "        int b=0;",
                "        int c=0;",
                "        int d=0;",
                "        if (true) {",
                "            int e = 0;",
                "        }",
                "    }",
                "}");
        System.out.println(src);
        try {
            badClass.addMethod(CtMethod.make(src, badClass));
            Class clazzz = badClass.toClass();
            Object obj = clazzz.newInstance(); // <-- falls here
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
{code}

After running that i get output:

{noformat}
public void eval () {
    if (true) {
        double t=0;
    } else {
        double t=0;
    }
    for (int i=0; i < 2; i++) {
        int a=0;
        int b=0;
        int c=0;
        int d=0;
        if (true) {
            int e = 0;
        }
    }
}
Exception in thread "main" java.lang.VerifyError: Inconsistent stackmap frames at branch target 41
Exception Details:
  Location:
    badClass.eval()V @41: iinc
  Reason:
    Type top (current frame, locals[4]) is not assignable to integer (stack map, locals[4])
  Current Frame:
    bci: @35
    flags: { }
    locals: { 'badClass', top, top, top, top, integer, integer, integer, integer, integer }
    stack: { integer }
  Stackmap Frame:
    bci: @41
    flags: { }
    locals: { 'badClass', top, top, top, integer, integer, integer, integer, integer }
    stack: { }
  Bytecode:
    0x0000000: 0499 0009 0387 48a7 0006 0387 4a03 3605
    0x0000010: 1505 05a2 001c 0336 0603 3607 0336 0803
    0x0000020: 3609 0499 0006 0336 0a84 0501 a7ff e4b1
    0x0000030:                                        
  Stackmap Table:
    same_frame(@10)
    same_frame(@13)
    full_frame(@16,{Object[#2],Top,Top,Top,Top,Integer},{})
    full_frame(@41,{Object[#2],Top,Top,Top,Integer,Integer,Integer,Integer,Integer},{})
    full_frame(@47,{Object[#2],Top,Top,Top,Top,Integer},{})

	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
	at java.lang.Class.getConstructor0(Class.java:3075)
	at java.lang.Class.newInstance(Class.java:412)
	at com.company.Main.main(Main.java:31)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

Process finished with exit code 1
{noformat}




--
This message was sent by Atlassian JIRA
(v6.4.11#64026)


More information about the jboss-jira mailing list