You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "offbynull (JIRA)" <ji...@apache.org> on 2014/09/14 20:47:33 UTC
[jira] [Commented] (SANDBOX-476) [asm] IllegalStateException:
"Undefined label used" with ASM > 4.1
[ https://issues.apache.org/jira/browse/SANDBOX-476?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14133339#comment-14133339 ]
offbynull commented on SANDBOX-476:
-----------------------------------
Good morning,
This fix introduces a new issue: In certain situations transformations fail because ASM 5.0 cannot determine the correct class type.
Here's a stacktrace:
{{monospaced}}
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: com.offbynull.peernetic.playground.chorddht.shared.Pointer
at org.objectweb.asm.ClassWriter.getCommonSuperClass(ClassWriter.java:1684)
at org.objectweb.asm.ClassWriter.getMergedType(ClassWriter.java:1654)
at org.objectweb.asm.Frame.merge(Frame.java:1426)
at org.objectweb.asm.Frame.merge(Frame.java:1325)
at org.objectweb.asm.MethodWriter.visitMaxs(MethodWriter.java:1475)
at org.objectweb.asm.MethodVisitor.visitMaxs(MethodVisitor.java:866)
at org.objectweb.asm.util.CheckMethodAdapter.visitMaxs(CheckMethodAdapter.java:1021)
at org.apache.commons.javaflow.bytecode.transformation.asm.ContinuationMethodAdapter.visitMaxs(ContinuationMethodAdapter.java:313)
at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:834)
at org.apache.commons.javaflow.bytecode.transformation.asm.ContinuationMethodAnalyzer.visitEnd(ContinuationMethodAnalyzer.java:143)
at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1021)
at org.objectweb.asm.ClassReader.accept(ClassReader.java:693)
at org.objectweb.asm.ClassReader.accept(ClassReader.java:506)
at org.apache.commons.javaflow.bytecode.transformation.asm.AsmClassTransformer.transform(AsmClassTransformer.java:49)
at org.apache.commons.javaflow.bytecode.transformation.asm.AsmClassTransformer.transform(AsmClassTransformer.java:41)
at org.apache.commons.javaflow.utils.RewritingUtils.rewriteClassFile(RewritingUtils.java:60)
at meme.singularsyntax.mojo.JavaflowEnhanceMojo.enhanceClassFiles(JavaflowEnhanceMojo.java:213)
at meme.singularsyntax.mojo.JavaflowEnhanceMojo.execute(JavaflowEnhanceMojo.java:154)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
... 20 more
{{monospaced}}
It looks like the folks at coberture also encountered this issue and worked around it by allowing the user to supply an auxiliary classpath via a customized version of ASM's ClassWriter class (https://github.com/cobertura/cobertura/blob/dddd1d30d19006c0a0ae0119ac8039557d0e206b/cobertura/src/main/java/net/sourceforge/cobertura/instrument/CoberturaClassWriter.java). The original issued is described on stackoverflow (http://stackoverflow.com/questions/17522385/java-lang-runtimeexception-java-lang-classnotfoundexception-org-objectweb-asm).
I have taken Coberture's custom ClassWriter implementation and plugged it in to Javaflow. This exception went away when I gave Javaflow the classpath for my project.
> [asm] IllegalStateException: "Undefined label used" with ASM > 4.1
> ------------------------------------------------------------------
>
> Key: SANDBOX-476
> URL: https://issues.apache.org/jira/browse/SANDBOX-476
> Project: Commons Sandbox
> Issue Type: Bug
> Components: Javaflow
> Affects Versions: Nightly Builds
> Reporter: Alexandre Chatiron
> Labels: asm, label
> Attachments: BytecodeClassLoader.java, ContinuationClassAdapter.java, ContinuationMethodAdapter.java, ContinuationMethodAnalyzer.java, javaflow-asm5.02.patch, pom.xml
>
>
> I want to upgrade Commons Javaflow from ASM 4 to 5 (same problem with 4.1 ) and I get this exception:
> {code}
> java.lang.IllegalStateException: Undefined label used
> at org.objectweb.asm.util.CheckMethodAdapter.visitMaxs(Unknown Source)
> at
> org.apache.commons.javaflow.bytecode.transformation.asm.ContinuationMethodAdapter.visitMaxs(ContinuationMethodAdapter.java:313)
> at org.objectweb.asm.tree.MethodNode.accept(Unknown Source)
> at
> org.apache.commons.javaflow.bytecode.transformation.asm.ContinuationMethodAnalyzer.visitEnd(ContinuationMethodAnalyzer.java:140)
> {code}
> the code triggering this error is:
> {code:java}
> public void visitMaxs(int maxStack, int maxLocals) {
> Label endLabel = new Label();
> mv.visitLabel(endLabel);
> mv.visitLocalVariable("__stackRecorder", "L" + STACK_RECORDER + ";", null, startLabel, endLabel, stackRecorderVar);
> mv.visitMaxs(0, 0);
> }
> {code}
> Any idea how to fix that?
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)