[jboss-jira] [JBoss JIRA] (JASSIST-207) Inconsistent Stack Map when inserting throw Expression with Java 7
Scott Marlow (JIRA)
jira-events at lists.jboss.org
Thu Jul 18 12:41:26 EDT 2013
[ https://issues.jboss.org/browse/JASSIST-207?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12790801#comment-12790801 ]
Scott Marlow commented on JASSIST-207:
--------------------------------------
I'm trying to recreate this, I made a small change to avoid "testThrowExpression(javassist.JvstTest4): by javassist.bytecode.BadBytecode: test ()I in test4.JASSIST207: dead code detected at 13. No stackmap table generated.
"
To workaround the dead code error, I made the throw (undetected dead code :) via "if (1==2)".
I pushed the test case to [github|https://github.com/scottmarlow/javassist/tree/JASSIST-207] but couldn't reproduce the failure (with Java 7).
{code}
public void testThrowExpression() throws Exception {
CtClass cc = sloader.get("test4.JASSIST207");
CtMethod m1 = cc.getDeclaredMethod("test");
m1.insertBefore("if (1==2) throw new AssertionError((Object) \"assertion error\");");
cc.writeFile();
Object obj = make(cc.getName());
assertEquals(1, invoke(obj, "test"));
}
{code}
{code}
package test4;
public class JASSIST207 {
public int test() {
return 1;
}
}
{code}
> Inconsistent Stack Map when inserting throw Expression with Java 7
> ------------------------------------------------------------------
>
> Key: JASSIST-207
> URL: https://issues.jboss.org/browse/JASSIST-207
> Project: Javassist
> Issue Type: Bug
> Affects Versions: 3.18.0-GA
> Reporter: Ben Romberg
> Assignee: Shigeru Chiba
> Priority: Critical
>
> I wrote a unit-test for javassist, reproducing the issue:
> {code}
> public class ThrowExpressionCorruptsStackMapTableTest extends JvstTestRoot {
> public ThrowExpressionCorruptsStackMapTableTest(String name) {
> super(name);
> }
> public void testInsertLocalVars() throws Exception {
> CtClass cc = sloader.get("test4.LocalVars");
> CtMethod m1 = cc.getDeclaredMethod("run");
> m1.insertBefore("throw new AssertionError((Object) \"assertion error\");");
> cc.writeFile();
> Object obj = make(cc.getName());
> assertEquals(10, invoke(obj, "run"));
> }
> }
> {code}
> Throws:
> java.lang.VerifyError: Expecting a stack map frame in method test4.LocalVars.run()I at offset 45
> My use-case is almost the same, inserting a "throw AssertionError(...)" expression with insertBefore. However, I get a slightly different error message:
> Stack map does not match the one at exception handler 37 in method timeofday.TimeOfDay.getSecond()I at offset 27
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list