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)