[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
Tue Jul 23 20:08:26 EDT 2013
[ https://issues.jboss.org/browse/JASSIST-207?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12792552#comment-12792552 ]
Scott Marlow commented on JASSIST-207:
--------------------------------------
Comparing the beforeInsertThrowExpression.txt + afterInsertThrowExpression.txt, especially the StackMapTable. It looks like after inserting the "throw exception", the local variables (except for "this") are no longer represented in the stack map table, but most (with some slight differences) of the (now dead) original code is included.
> 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: Scott Marlow
> Priority: Critical
> Attachments: afterInsertThrowExpression.txt, beforeInsertThrowExpression.txt
>
>
> 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